mybatis各种查询

一、各种查询功能

若sql语句查询的结果为多条时,一定不能以实体类类型作为方法的返回值否则会抛出异常若sql语句查询的结果为一条时,此时可以使用实体类类型或list集合类型作为

1.查询一个实体类对象

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() throws IOException {
         SqlSession sqlSession = SqlSessionUtils.getSqlSession();
         SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
         User user = mapper.getUserById(2);
         System.out.println(user);
         sqlSession.close();
     }

2.查询一个list集合

List<User> getAllUser();
<select id="getAllUser" resultType="User">
        select * from t_user
    </select>
@Test
    public void testGetAllUser() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        List<User> allUser = mapper.getAllUser();
        allUser.forEach(System.out::println);
        System.out.println(allUser);
        sqlSession.close();
    }

3.查询单个数据

 Integer getCount();
<select id="getCount" resultType="java.lang.Integer">
        select  count(*) from t_user
    </select>
@Test
    public void testGetCount() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Integer count = mapper.getCount();
        System.out.println(count);
    }

4.查询一条数据为map集合

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() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Map<String, Object> map = mapper.getUserByIdToMap(2);//{password=123, gender=男, id=2, age=23, email=12345@qq.com, username=ybc}
        System.out.println(map);
    }

二、若查询的数据有多条时,并且要将每条数据转换为map集合,此时有如下两种方法:

5.使用list存储每一个map,输出list(list嵌套map)例:

List<Map<String, Object>> allUserToMap=mapper.getAllUserToMap();
allUserToMap.forEach(Systemout::println);

程序:

    List<Map<String,Object>> getAllUserToMap();
<!--Map<String,Object> getAllUserToMap();-->
    <select id="getAllUserToMap" resultType="map">
        select * from t_user
    </select>

@Test
    public void testGetAllUserToMap() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        List<Map<String, Object>> allUserToMap = mapper.getAllUserToMap();
        allUserToMap.forEach(System.out::println);
        System.out.println(allUserToMap);
    }

6.用map注解使map可以存储多条数据(map嵌套map)

即将每条数据转换为的map放在一个大的map中,但必须通过@mapkey注解,将查询的某个字段的值作为大的map的键,例:

Map<String, Object> allUserToMap2 = mapper.getAllUserToMap2();

程序:

@MapKey("id")
    Map<String, Object> getAllUserToMap2();
<!-- Map<String, Object> getAllUserToMap2();-->
    <select id="getAllUserToMap2" resultType="map">
        select * from t_user
    </select>
@Test
    public void testGetAllUserToMap2() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Map<String, Object> allUserToMap2 = mapper.getAllUserToMap2();
        //{2={password=123, gender=男, id=2, age=23, email=12345@qq.com, username=ybc},
        // 4={password=123456, gender=男, id=4, age=23, email=12345@qq.com, username=admin},
        // 5={password=dadad, gender=男, id=5, age=12, email=dboa@qq.com, username=pz},
        // 6={password=laoliu, gender=男, id=6, age=34, email=10090@qq.com, username=老刘}}
        System.out.println(allUserToMap2);
    }

本文章使用limfx的vscode插件快速发布