目录

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=李四}}