目录

准备

问题

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

方式二:修改核心配置文件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<Emp> 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

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

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

 测试结果

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:设置映射关系中表中的字段名

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐