mybatis 梳理12--结果映射resultMap

详细:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps

 

属性名和字段名不一致,我们一般都会按照约定去设计数据的,但是也难免瞎起名字

 

1、Java中的实体类设计

public class User {
    private int id; //id
    private String name; //姓名,数据库为username
    private String password; //密码,一致
    //构造
    //set/get
    //toString()
}

 

2、mapper

//根据id查询用户
User selectUserById(int id);

 

3、mapper映射文件

<select id="selectUserById" resultType="user">
  select * from user where id = #{id}
</select>

 

4、测试

@Test
    public void testSelectUserById() {
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.selectUserById(1);
    System.out.println(user);
    session.close();
}

 

 

5、结果

User{id=1, name='null', password='123'}

查询出来发现 name为空 . 说明出现了问题!

 

 

6、分析

select * from user where id = #{id}

可以看做 select id,username,password from user where id = #{id}

mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 利用反射去对应的实体类中查找 相应列名的set方法设值 ,当然找不到u

 

 

7、解决方案

(1)

 

 

(2)使用结果集映射->ResultMap 【推荐】

 

posted @ 2021-01-22 10:45  Master_Sun  阅读(69)  评论(0编辑  收藏  举报