MyBaits—ResultMap自定义结果映射
resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中
以下以实例介绍resultMap的用法:
1、创建Employee对象:
@Alias("emp")
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
public Employee(Integer id, String lastName, String email, String gender) {
super();
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
}
public Employee() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
}
}
2、定义接口方法
public interface EmployeeMapperPlus {
public Employee getEmployee(Integer id);
}
3、对应的ResultMap
<?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.atguigu.mybatis.dao.EmployeeMapperPlus">
<!--public Employee getEmployee(Integer id); -->
<select id="getEmployee" resultMap="emp">
select * from tbl_employee where id=#{id}
</select>
</mapper>
4,测试类
@Test
public void test05() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
Employee empById = mapper.getEmployee(1);
System.out.println(empById);
} finally {
openSession.close();
// TODO: handle finally clause
}
}
结果如下:
可以看到lastName 取不到值
这是为什么?
因为数据库表中lastName字段名不一致
在MyBatis配置中加上驼峰命名法
这样就可以取到值
但是实际开发中一般比较少用这种方法,用的是自定义结果映射
<?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.atguigu.mybatis.dao.EmployeeMapperPlus">
<!--resultMap:自定义结果集映射规则
type:自定义规则的Java类型
id:唯一id方便引用
-->
<resultMap type="com.atguigu.mybatis.bean.Employee" id="Myemp">
<!--指定主键列的封装规则
column:指定拿一列
property:指定对应的javaBean 属性
-->
<id column="id" property="id"/>
<!--定义普通列封装规则 -->
<result column="last_name" property="lastName"/>
<!-- 其他不指定的列会自动封装,只要写resultMap就把全部的映射跪着写上 -->
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</resultMap>
<!--public Employee getEmployee(Integer id); -->
<select id="getEmployee" resultMap="Myemp">
select * from tbl_employee where id=#{id}
</select>
</mapper>
也能得到结果