我是靠谱客的博主 甜美紫菜,最近开发中收集的这篇文章主要介绍MyBatis的各种查询功能1.查询一个实体类对象2.查询一个list集合3.查询单个数据4.查询一条数据为map集合5.查询多条数据为map集合,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

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集合所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部