目录

准备

问题

方式一:给查询的字段起别名

方式二:修改核心配置文件mybatis-config.xml

方式三:通过resultMap自定义映射


准备

我们的表的字段以及表数据如下

生成的实体类的属性如下

public class Emp {    private Integer eid;    private String empName;    private Integer empAge;    private String empSex;    private String empEmail;}

问题

通过上面我们可以看到,实体类的属性值与数据库表的字段值并不是一样的,这跟我们之前处理User类的时候是不一样的,当时User类的属性与其对应的数据表字段是一样的。如果我们现在按照之前的思路来查找所有的Emp信息的话会出现什么问题呢?先看代码。

测试代码:  @Test    public void test1(){        SqlSession sqlSession= SqlSessionUtil.getSqlSession();        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);        List emps = mapper.getAllEmp();        emps.forEach(emp -> System.out.println(emp));    }输出结果:Emp(eid=1, empName=null, empAge=null, empSex=null, empEmail=null)Emp(eid=2, empName=null, empAge=null, empSex=null, empEmail=null)Emp(eid=3, empName=null, empAge=null, empSex=null, empEmail=null)Emp(eid=4, empName=null, empAge=null, empSex=null, empEmail=null)Emp(eid=5, empName=null, empAge=null, empSex=null, empEmail=null)

通过上面的测试结果,我们可以看到并不是所有的属性都被赋值了。究其原因就是因为实体的属性与其对应表的字段不一致。那么,如何解决这个问题呢,我们可以通过以下3三种方式。

方式一:给查询的字段起别名

起的别名与实体类对应的属性一致,在配置文件中可以这样写。对于名称已经一样的可以不用起别名,比如eid。

测试结果为

Emp(eid=1, empName=zhangsan, empAge=45, empSex=男, empEmail=bac@126.com)Emp(eid=2, empName=李四, empAge=55, empSex=男, empEmail=bac@126.com)Emp(eid=3, empName=王五, empAge=21, empSex=男, empEmail=bac@126.com)Emp(eid=4, empName=赵六, empAge=32, empSex=女, empEmail=bac@126.com)Emp(eid=5, empName=田七, empAge=33, empSex=女, empEmail=bac@126.com)

方式二:修改核心配置文件mybatis-config.xml

在核心配置文件中加入以下代码

    

测试结果

Emp(eid=1, empName=zhangsan, empAge=45, empSex=男, empEmail=bac@126.com)Emp(eid=2, empName=李四, empAge=55, empSex=男, empEmail=bac@126.com)Emp(eid=3, empName=王五, empAge=21, empSex=男, empEmail=bac@126.com)Emp(eid=4, empName=赵六, empAge=32, empSex=女, empEmail=bac@126.com)Emp(eid=5, empName=田七, empAge=33, empSex=女, empEmail=bac@126.com)

方式三:通过resultMap自定义映射

结果

Emp(eid=1, empName=zhangsan, empAge=45, empSex=男, empEmail=bac@126.com)Emp(eid=2, empName=李四, empAge=55, empSex=男, empEmail=bac@126.com)Emp(eid=3, empName=王五, empAge=21, empSex=男, empEmail=bac@126.com)Emp(eid=4, empName=赵六, empAge=32, empSex=女, empEmail=bac@126.com)Emp(eid=5, empName=田七, empAge=33, empSex=女, empEmail=bac@126.com)
  • resultMap:设置自定义映射

  • 属性:

    • id:表示自定义映射的唯一标识,不能重复

    • type:查询的数据要映射的实体类的类型

    • 子标签:

    • id:设置主键的映射关系

      • result:设置普通字段的映射关系

      • 子标签属性:

      • property:设置映射关系中实体类中的属性名

        • column:设置映射关系中表中的字段名