Mybatis中的各种查询功能
这里以实现SelectMapper接口中的方法为例,根据id查询用户信息;查询所有的用户信息;查询用户表中的总记录数;根据id查询一个用户信息为map集合;查询所有的用户信息为一个map集合
以上功能以代码和注释来展现:
package com.qcw.mybatis.mapper;
import com.qcw.mybatis.pojo.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface SelectMapper {
/**
*-若sql语句查询结果为多条时,一定不能以实体类类型作为方法的返回值
* 否则会抛出异常TooManyResultsException
*若sql语句查询的结果为一条时,此时可以使用实体类类型或list集合类型作为方法返回值
*/
//根据id查询用户信息
User getUserById(@Param("id") Integer id);
//查询所有的用户信息
List<User> getAllUser();
//查询用户表中用户的总记录数
Integer getCount();
//根据id查询一个用户信息为map集合
Map<String,Object> getUserByIdToMap(@Param("id") Integer id);
//查询所有的用户信息为一个map集合
//List<Map<String,Object>> getAllUserToMap();
//注解的作为作为一个更大的map集合存放查询出的每条信息的小的集合,以id作为键以每个map集合作为值
@MapKey("id")
Map<String,Object> getAllUserToMap();
}
<?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.qcw.mybatis.mapper.SelectMapper">
<!-- User getUserById(@Param("id") Integer id);-->
<select id="getUserById" resultType="User">
select * from t_user where id = #{id}
</select>
<!-- List<User> getAllUser();-->
<select id="getAllUser" resultType="User">
select * from t_user
</select>
<!-- Integer getCount();-->
<!-- MyBatis中为Java中的常用类型设置了别名:
Integer:Integer, int int:_int,_integer Map:map String:string-->
<select id="getCount" resultType="int">
select count(*) from t_user
</select>
<!-- Map<String,Object> getUserByIdToMap(@Param("id") Integer id);-->
<select id="getUserByIdToMap" resultType="Map">
select * from t_user where id = #{id}
</select>
<!-- Map<String,Object> getAllUserToMap();-->
<select id="getAllUserToMap" resultType="Map">
select * from t_user
</select>
</mapper>
package com.qcw.mybatis.test;
import com.qcw.mybatis.mapper.SelectMapper;
import com.qcw.mybatis.pojo.User;
import com.qcw.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class SelectMapperTest {
@Test
public void getUserByIdTest(){
//根据id查询用户信息
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
User user = mapper.getUserById(1);
System.out.println("user = " + user);
}
@Test
public void getAllUserTest(){
//查询所有的用户信息 List<User> getAllUser();
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<User> list = mapper.getAllUser();
list.forEach(System.out::println);
}
@Test
public void getCountTest(){
//查询用户表中用户的总记录数 Integer getCount();
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Integer count = mapper.getCount();
System.out.println("count = " + count);
}
@Test
public void getUserByIdToMapTest(){
//根据id查询一个用户信息为map集合
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> map = mapper.getUserByIdToMap(6);
//map = {password=12357, gender=女, id=6, age=26, email=377@qq.com, username=root}
System.out.println("map = " + map);
}
@Test
public void getAllUserToMapTest(){
//查询所有的用户信息为一个map集合
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
/**
* 查询的所有信息为一个map集合
* 若查询的数据有多条时,并且要将每条数据转换为map集合,此时有两种解决方案
* 1.将mapper接口方法的返回值设置为泛型是map的list集合:
* List<Map<String,Object>> getAllUserToMap();
* 2.可以将每条数据转换的map集合放在一个更大的map中,但是必须要通过@MapKey注解
* 将查询得某个字段的值作为大map集合的键:
* @MapKey("id")
* Map<String, Object> getAllUserToMap();
*/
Map<String, Object> map = mapper.getAllUserToMap();
System.out.println("map = " + map);
}
}
注:以上代码为本人学习记录,仅供参考