MyBatis的各种查询功能

1、查询:

查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系

resultType:自动映射,用于属性名和表中字段名一致的情况

resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

2、查询一个实体类的对象
User getUserById(@Param("id") Integer id);//查询方法
<select id="getUserById" resultType="user">select * from user where id = #{id};
</select>//测试类
@Test
public void testGetUserById(){User user = mapper.getUserById(7);System.out.println(user);
}
3、查询一个list集合

当查询的数据为多条记录时,不能使用实体类作为返回值,否则会抛出异常:TooManyResultsException,但是如果查询的数据只有一条,可以使用实体类或集合作为返回值

/*** 查询所有用户信息* @return*/
List<User> getAllUser();<select id="getAllUser" resultType="user">select * from user;
</select>@Test
public void testGetAllUser(){List<User> users = mapper.getAllUser();System.out.println(users);System.out.println("--------------------------------");for(User user:users){System.out.println(user);}System.out.println("--------------------------------");users.forEach(System.out::println);
}
遍历User集合的几种方法
//法1 增强for循环
for(User user:users){System.out.println(user);
}//法2 forEach
users.forEach(System.out::println);//法3
//利用lambda表达式遍历users
users.forEach(user -> System.out.println(user));//法4
for(int i=0;i< users.size();i++){System.out.println(users.get(i));
}
4、查询单个数据
/*** 查询用户的总数量* @return*/
Integer getCount();<select id="getCount" resultType="int">select count(*) from user;
</select>@Test
public void testGetCount(){Integer countusers = mapper.getCount();System.out.println("用户总数:"+countusers);
}

5、查询一条数据为Map集合
/*** 根据id查询用户信息为Map集合* @param id* @return*/
Map<String,Object> getUserByIdToMap(@Param("id") Integer id);<select id="getUserByIdToMap" resultType="map">select * from user where id = #{id};
</select>@Test
public void testGetUserByIdToMap(){Map<String,Object> map = mapper.getUserByIdToMap(6);System.out.println(map);
}
6、查询多条数据为Map集合
⑴方式一

将表中的数据以map集合的方式查询,一条数据对应一个map;如果有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取

错误写法

Map<String,Object> getAllUserToMap();
<select id="getAllUserToMap" resultType="map">select * from user
</select>@Test
public void testGetAllUserToMap(){Map<String,Object> map = mapper.getAllUserToMap();System.out.println(map);
}报错:TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 10

 该方法只能有一条数据结果

正确写法:

/*** 查询所有用户信息为Map集合,采用将map数据放入list集中的方式* @return*/List<Map<String,Object>> getAllUserToMap();<select id="getAllUserToMap" resultType="map">select * from user
</select>public void testGetAllUserToMap(){List<Map<String,Object>> list = mapper.getAllUserToMap();System.out.println(list);}结果:[{password=123, sex=男, id=1, age=12, email=123@qq.com, username=admin},{password=123, sex=男, id=2, age=12, email=123@qq.com, username=admin},{password=456, sex=男, id=5, age=12, email=123@qq.com, username=qqq}]

⑵方式二

如果有多条数据,可以将每条数据转换的map集合放在一个大的map集合中,但是必须要通过@MapKey注解来完成。将查询的某个字段的值作为大的Map集合的键(key)

/*** 查询所有用户信息为Map集合,采用注解的方式* @return*/
@MapKey("id")
Map<String,Object> getAllUserToMap2();<select id="getAllUserToMap2" resultType="map">select * from user
</select>@Test
public void testGetAllUserToMap2(){Map<String,Object> map  = mapper.getAllUserToMap2();System.out.println(map);
}
结果:()前边会写对应的key
{1={password=123, sex=男, id=1, age=12, email=123@qq.com, username=admin},2={password=123, sex=男, id=2, age=12, email=123@qq.com, username=admin},5={password=456, sex=男, id=5, age=12, email=123@qq.com, username=qqq}}

当查询的key值为age时

返回结果为

因为age所给值都是相同的,而key是唯一的,一个个查询时后一个会将前一个给覆盖,所以最后显示的只有最后一条(真正条数是对的,但是显示只有一个,因为其他都被覆盖了)

如果按照username查询,其结果会按照首字母排序,不同于数据库的顺序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 索引和null值的关系

在MySQL中&#xff0c;索引与NULL值的处理涉及一些特殊规则和注意事项&#xff0c;这些规则影响着索引的使用效率和查询优化器的决策&#xff1a; 索引中NULL值的包容性 允许NULL值&#xff1a;MySQL允许在唯一索引&#xff08;Unique Index&#xff09;和普通索引&#xff0…

Github生成SSH密钥,使用SSH进行连接

目录 一、生成新的SSH密钥 二、添加新的SSH密钥 三、测试SSH连接 四、SSH密钥密码 五、创建新仓库并推送到github 说明 使用 SSH URL 将 git clone、git fetch、git pull 或 git push 执行到远程存储库时&#xff0c; 须在计算机上生成 SSH 密钥对&#xff0c;并将公钥添加到…

1. 数据结构

文章目录 数据结构一、线性结构和非线性结构1. 线性结构2. 非线性结构 二、数组&#xff08;Array&#xff09;1. 定义2. 初始化数组 2. 链表&#xff08;Linked List&#xff09;3. 栈&#xff08;Stack&#xff09;4. 队列&#xff08;Queue&#xff09;5. 树&#xff08;Tre…

(CVPRW,2024)可学习的提示:遥感领域小样本语义分割

文章目录 相关资料摘要引言方法训练基础类别新类别推理 相关资料 论文&#xff1a;Learnable Prompt for Few-Shot Semantic Segmentation in Remote Sensing Domain 代码&#xff1a;https://github.com/SteveImmanuel/OEM-Few-Shot-Learnable-Prompt 摘要 小样本分割是一项…

STP----生成树协议

目的&#xff1a;解决二层环路问题 跨层封装 广播风暴---广播帧在二层环路中形成逆时针和顺时针转动环路&#xff0c;并且无限循环&#xff0c;最终造成设备宕机&#xff0c;网络瘫痪。 MAC地址表的翻摆&#xff08;漂移&#xff09;---同一个数据帧&#xff0c;顺时针接收后记…

GUN compiler collection源代码编译过程

第一部分&#xff1a; 学习kernel需要了解编译的一些过程&#xff0c;为了详细理解GCC编译过程的原理&#xff0c;动手做了个sy&#xff0c;记录如下&#xff0c;有需要的童鞋可以参考。 1.环境&#xff1a;&#xff08;均可&#xff0c;二次环境并非是WSL版本&#xff09; r…

大模型应用框架-LangChain

LangChain的介绍和入门 &#x1f4a5; 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月&#xff0c;它是围绕LLMs&#xff08;大语言模型&#xff09;建立的一个框架&#xff0c;LLMs使用机器学习算法和海量数据来分析和理解自然语言&#xff0c;GPT3.5、GPT4是…

[LitCTF 2024 公开赛道] Crypto/PWN/Rev

DAS是打不动了&#xff0c;只能玩玩新生赛了。 Crypto small_e e3对密文直接开3次方 m [iroot(i,3)[0] for i in c_list] bytes(m) #bLitCTF{you_know_m_equ4l_cub3_root_0f_n}common_primes n1,n2有公共因子&#xff0c;用gcd求&#xff0c;再解RSA >>> p gc…

Android handler 一次通关

前言 Android 的 Handler 是一个用于管理线程间通信的工具,主要用于在不同的线程之间发送和处理消息。它是 Android 应用程序中处理异步任务的重要组成部分,尤其是在需要在后台线程进行操作,而操作结果需要在主线程(UI 线程)中更新界面时。 Handler 的基本概念 消息(Me…

一维时间序列信号的奇异小波时频分析方法(Python)

最初的时频分析技术就是短时窗傅里叶变换STFT&#xff0c;由于时窗变短&#xff0c;可供分析的信号量减少&#xff0c;采用经典的谱估算方法引起的误差所占比重会增加。且该短时窗一旦选定&#xff0e;则在整个变换过程中其时窗长度是固定的。变换后的时频分辨率也即固定&#…

第十五届蓝桥杯物联网试题(省赛)

这个省赛题不算难&#xff0c;中规中矩&#xff0c;记得看清A板B板&#xff0c;还有ADC的获取要配合定时器

视频修复工具助你完成高质量的视频作品!

在短视频发展兴起的时代&#xff0c;各种视频层出不穷的出现在了视野中&#xff0c;人们已经从追求数量转向追求质量。内容相同的视频&#xff0c;你视频画质好、质量高的更受大家欢迎&#xff0c;那么如何制作高质量、高清晰度的视频呢&#xff1f;与您分享三个视频修复工具。…

Nios II 实现流水灯实验

Nios II 实现流水灯实验 一.硬件设计1.新建Quartus项目2. 设计Nios ii 二.软件设计 前言 实验目标&#xff1a; 学习 Quartus 、Platform Designer、Nios-II SBT 的基本操作&#xff1b;初步了解 SOPC 的开发流程&#xff0c;基本掌握 Nios-II 软核的定制方法&#xff1b;掌握 …

【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、深入理解并利用零值提升代码质量1.1 深入Go类型零值原理1.2 零值可用性的实践与优势1.2.1 切片(Slice)的零值与动态扩展1.2.2 Map的零值与安全访问1.2.3 函数参数与零值 二、使用复合字面值作为初值构造器2.1 结构体…

PostgreSQL启动报错“could not map anonymous shared memory: Cannot allocate memory”

PostgreSQL启动报错“could not map anonymous shared memory: Cannot allocate memory” 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg1…

LINUX系统编程:信号(1)

目录 什么是信号&#xff1f; 为什要有信号呢&#xff1f; 进程接受信号的过程 1.信号的产生 1.1kill命令产生信号 1.2键盘产生信号 1.3系统调用接口 1.3.1killl() 1.3.2raise() 1.3.3abort() 1.4软件条件 1.5异常 1.6对各种情况产生信号的理解 1.6.1kill命令 1…

突破 LST/LRT 赛道中心化困境,Puffer Finance 何以重塑以太坊再质押未来

纵观过去的 2023 年&#xff0c;LST 赛道竞争进入“白热化”状态。去中心化、DeFi 增强、全链化成为市场争夺关键词&#xff0c;诸多 LST 赛道老牌项目纷纷陷入“中心化矛盾”&#xff0c;指责对方在以太坊去中心化进程中的不利作为。 在这样的竞争情形下&#xff0c;以太坊联…

SpringBoot登录认证--衔接SpringBoot案例通关版

文章目录 登录认证登录校验-概述登录校验 会话技术什么是会话呢?cookie Session令牌技术登录认证-登录校验-JWT令牌-介绍JWT SpringBoot案例通关版,上接这篇 登录认证 先讲解基本的登录功能 登录功能本质就是查询操作 那么查询完毕后返回一个Emp对象 如果Emp对象不为空,那…

The Missing Semester ( Shell 工具和脚本 和 Vim)

管道符号 &#xff08;1&#xff09;管道符号 | 将前一个命令的输出作为下一个命令的输入 例如&#xff1a; 以下为 ./semester输出中提取包含 "Last-Modified" 的行并写入文件 last-modified.txt./semester | grep "Last-Modified" > ~/last-modif…

【数据结构】详解堆的基本结构及其实现

文章目录 前言1.堆的相关概念1.1堆的概念1.2堆的分类1.2.1小根堆1.2.2大根堆 1.3堆的特点堆的实用场景 2.堆的实现2.1初始化2.2插入2.3堆的向上调整2.4删除2.5堆的向下调整2.6判空2.7获取堆顶元素2.8销毁 3.堆排序3.1实现3.2堆排序的时间复杂度问题 前言 在上一篇文章中&#…