目录
1、查询一个实体对象
2、查询一个List集合
3、查询单个数据
4、查询一条数据为 map 集合
5、查询多条数据为 map 集合
5.1、方法一:List><>
5.2、方法二:@Mapkey
这次笔记使用的模块是 MyBatis_demo2
1、查询一个实体对象
若查询的数据结果只有一条,结果可以用实体类或集合来接收
若查询的数据结果有多条,一定不能以单独一个实体类来接收,否则会报错:TooManyResultsException
① 创建 mapper 接口,就叫 SelectMapper 吧,在里面添加方法
/**
* 根据id查询用户信息
*/
User getUserById(@Param("id") Integer id);
② 为了方便在创建 SQL 语句时写 resultTypr 起别名,在 mybatis-config.xml 进行设置
<typeAliases>
<package name="com.zyj.mybatis.pojo"/>
</typeAliases>
② 在相应位置创建 SelectMapper 接口的映射文件 SelectMapper.xml,并添加 SQL 语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zyj.mybatis.mapper.SelectMapper">
<!-- User getUserById(@Param("id") Integer id) -->
<select id="getUserById" resultType="User">
select * from t_user where id = #{id}
</select>
</mapper>
2、查询一个List集合
① 在 SelectMapper 接口添加方法
/**
* 查询所有的用户信息
*/
List<User> getAllUser();
② 在 SelectMapper.xml 添加 SQL 语句
<!-- List<User> getAllUser() -->
<select id="getAllUser" resultType="User">
select * from t_user
</select>
3、查询单个数据
查询单个数据,例如使用单行函数、聚合函数等来查询,结果返回的不是单个或多个实体类型。MyBatis 中有为 java 自建的类型别名,这些别名大小写不敏感
① 在 SelectMapper 接口添加方法
/**
* 查询用户信息的总记录数
*/
int getCount();
② 在 SelectMapper.xml 添加 SQL 语句
<!-- int getCount() -->
<!-- MyBatis 中有为 java 自建的类型别名,这些别名大小写不敏感,且一个类型可能有多个别名,所以以下写法都是正确的 -->
<!--<select id="getCount" resultType="java.lang.Integer">-->
<!--<select id="getCount" resultType="Integer">-->
<!--<select id="getCount" resultType="integer">-->
<!--<select id="getCount" resultType="int">-->
<select id="getCount" resultType="Int">
select count(*) from t_user
</select>
4、查询一条数据为 map 集合
① 在 SelectMapper 接口添加方法
/**
* 根据id查询用户信息为一个map集合
*/
Map<String, Object> getUserByIdToMap(@Param("id") Integer id);
② 在 SelectMapper.xml 添加 SQL 语句
<!-- Map<String, Object> getUserByIdToMap(@Param("id") Integer id); -->
<select id="getUserByIdToMap" resultType="map">
select * from t_user where id = #{id}
</select>
输出的结果:
{password=lisi, sex=男, id=5, age=33, email=lisi@qq.com, username=李四}
5、查询多条数据为 map 集合
5.1、方法一:List<Map<>>
① 在 SelectMapper 接口添加方法
/**
* 查询所有用户信息为map集合
*/
List<Map<String, Object>> getAllUserToMap();
② 在 SelectMapper.xml 添加 SQL 语句
<!-- Map<String, Object> getAllUserToMap() -->
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
③ 测试方法
@Test
public void testGetAllUserToMap(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<Map<String, Object>> allUserToMap = mapper.getAllUserToMap();
allUserToMap.forEach(map -> System.out.println(map));
}
④ 输出的结果
DEBUG 03-16 16:41:37,194 ==> Preparing: select * from t_user (BaseJdbcLogger.java:137)
DEBUG 03-16 16:41:37,233 ==> Parameters: (BaseJdbcLogger.java:137)
DEBUG 03-16 16:41:37,261 <== Total: 3 (BaseJdbcLogger.java:137)
{password=123456, sex=男, id=2, age=23, email=123456@qq.com, username=张三}
{password=123456, sex=男, id=4, age=23, email=123456@qq.com, username=admin}
{password=lisi, sex=男, id=5, age=33, email=lisi@qq.com, username=李四}
5.2、方法二:@Mapkey
@Mapkey:设置当前集合的键,将当前查询到的数据的某一个字段作为键(注解里的值),将该字段对应的记录作为值(数据表中的一条记录)
@Mapkey中的值必须为非空且唯一
① 在 SelectMapper 接口添加方法
/**
* 查询所有用户信息为map集合
*/
// @Mapkey:设置当前集合的键,将当前查询到的数据的某一个字段作为键(注解里的值),将该字段对应的实体类数据作为值(数据表中的一条记录)
// @Mapkey中的值必须为非空且唯一
@MapKey("id")
Map<String, Object> getAllUserToMap();
② 在 SelectMapper.xml 添加 SQL 语句
<!-- Map<String, Object> getAllUserToMap() -->
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
③ 测试方法
@Test
public void testGetAllUserToMap(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
//List<Map<String, Object>> allUserToMap = mapper.getAllUserToMap();
//allUserToMap.forEach(map -> System.out.println(map));
Map<String, Object> allUserToMap = mapper.getAllUserToMap();
System.out.println(allUserToMap);
}
④ 输出结果
DEBUG 03-16 16:51:43,759 ==> Preparing: select * from t_user (BaseJdbcLogger.java:137)
DEBUG 03-16 16:51:43,788 ==> Parameters: (BaseJdbcLogger.java:137)
DEBUG 03-16 16:51:43,807 <== Total: 3 (BaseJdbcLogger.java:137)
{2={password=123456, sex=男, id=2, age=23, email=123456@qq.com, username=张三}, 4={password=123456, sex=男, id=4, age=23, email=123456@qq.com, username=admin}, 5={password=lisi, sex=男, id=5, age=33, email=lisi@qq.com, username=李四}}