目录
准备
问题
方式一:给查询的字段起别名
方式二:修改核心配置文件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:设置映射关系中表中的字段名