概述
目录
1.查询一个实体类对象
2.查询一个list集合
3.查询单个数据
4.查询一条数据为map集合
5.查询多条数据为map集合
1.查询一个实体类对象
/**
* 根据id查询用户信息
* @param id
* @return
*/
User getUserById(@Param("id") Integer id);
<!--User getUserById(@Param("id") Integer id);-->
<select id="getUserById" resultType="User">
select * from t_user where id=#{id}
</select>
@Test
public void testGetUserById(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
User userById = mapper.getUserById(2);
System.out.println(userById);
}
2.查询一个list集合
/**
* 查询所有用户信息
* @return
*/
List<User> getAllUser();
<!--List<User> getAllUser();-->
<select id="getAllUser" resultType="User">
select * from t_user;
</select>
@Test
public void testGetAllUser(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<User> allUser = mapper.getAllUser();
allUser.forEach(System.out::println);
}
若sql语句查询的结果为多条时,一定不能以实体类类型作为方法的返回值,否则会抛出TooManyResultsException
若sql语句查询的结果为1条时,此时可以使用实体类类型或list集合类型作为方法的返回值
3.查询单个数据
有时候我们会查询当行单列的数据,比如说查询用户表里面用户的总记录数,这时候查询出来的就是单行单列。
/**
* 查询用户的总数量
* @return
*/
Integer getCount();
<!--Integer getCount();-->
<select id="getCount" resultType="Integer">
select count(*) from t_user
</select>
@Test
public void testGetCount(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Integer count = mapper.getCount();
System.out.println(count);
}
注:
MyBatis中为Java中常用的类型设置了类型别名
Integer:Integer,int
int:int,integer
4.查询一条数据为map集合
我们一般查询完一条数据都要转换为实体类对象,但是有这么个情况,我们查询出来的结果没有相对应的实体类,就比如说我们现在查询的结果里面有分组函数,比如说我们要查这个部门里的最高薪资,最低薪资,以及薪资总和,这时候并没有相应的实体类。
实体类和Map集合有什么区别?
实体类里的属性就是固定的,而Map集合里的键不固定。
所以说当我们的查询结果没有相对应的实体类时,我们就可以查询出来为一个Map集合。
/**
* 根据id查询用户信息为map集合
* @param id
* @return
*/
Map<String,Object> getUserByIdToMap(@Param("id") Integer id);
<!--Map<String,Object> getUserByIdToMap(@Param("id") Integer id);-->
<select id="getUserByIdToMap" resultType="map">
select * from t_user where id=#{id}
</select>
@Test
public void testGetUserByIdToMap(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> map = mapper.getUserByIdToMap(2);
System.out.println(map);
}
5.查询多条数据为map集合
方式1:
/**
* 查询所有的用户信息为map集合
* @return
*/
Map<String,Object> getAllUserToMap();
<!--Map<String,Object> getAllUserToMap();-->
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
@Test
public void testGetAllUserToMap(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> map = mapper.getAllUserToMap();
System.out.println(map);
}
那么现在是查多条数据放在map集合里,我们会发现报错
我们现在查询的结果有4条,但是我们返回值设置的是个Map集合,我们一条数据转换的就是map,这时候4条数据转换4个map,我们用一个map集合返回值是获取不到的。我们用的还是selectOne方法,只能获取一个结果,但是我们查询出来的结果有4条。
那么既然我们一条数据转换为一个map,多条数据则是放到一个可以存储map集合的List集合中,返回值可以这样写:
/**
* 查询所有的用户信息为map集合
* @return
*/
List<Map<String,Object>> getAllUserToMap();
@Test
public void testGetAllUserToMap(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<Map<String, Object>> list = mapper.getAllUserToMap();
System.out.println(list);
}
方式2:
我们在接口中的方法还是可以这么写:Map<String,Object> getAllUserToMap();
因为Map集合也可以存储多条数据,但是map和list不一样,你可以直接把每条数据转换为的map放在list中,但是不能把每条数据转换为的map放在map集合中,因为map是键值对,我们查出来的数据作为值,但是谁作为键呢?所以说这时候要用到一个注解@Mapkey(),这是把我们当前查询的数据所转换的map集合,放到一个大的map集合中,通过这个注解,可以设置map集合的键。这里写的就是我们所查询出来的数据的字段,比如说我们把查询出来的id作为map的键,值就是当前的每一条数据所转换为的map集合。
@MapKey("id")
Map<String,Object> getAllUserToMap();
@Test
public void testGetAllUserToMap(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> map = mapper.getAllUserToMap();
System.out.println(map);
}
注:
若查询的数据有多条时,并且要将每条数据转为map集合
此时有2种解决方案:
1.将mapper接口的方法返回值设置为泛型是map的list集合
2.可以将每条数据转换的map集合放在一个大的map中,但是必须要通过@MapKey注解,将查询的某个字段的值作为大的map的键
@MapKey("id")
Map<String, Object> getAllUserToMap();
最后
以上就是甜美紫菜为你收集整理的MyBatis的各种查询功能1.查询一个实体类对象2.查询一个list集合3.查询单个数据4.查询一条数据为map集合5.查询多条数据为map集合的全部内容,希望文章能够帮你解决MyBatis的各种查询功能1.查询一个实体类对象2.查询一个list集合3.查询单个数据4.查询一条数据为map集合5.查询多条数据为map集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复