掌握使用resultMap实现自定义结果映射
了解resultMap的自动映射级别
按条件查询得到用户表列表,需要显示指定字段,并显示用户角色(中文表述)。
用户表中的userRole字段记录的是角色id,不是其对应的名称,如何解决?
修改User的属性,增加userRoleName属性
User.java新增userRoleName属性
private String userRoleName; //用户角色名称
public String getUserRoleName() {
return userRoleName;
}
public void setUserRoleName(String userRoleName) {
this.userRoleName = userRoleName;
}
1. 修改查询SQL语句,连表查询
UserMapper.java
public interface UserMapper {
public List getUserList2(User user);
}
UserMapper.xml
UserMapperTest.java
@Test
public void testGetUserList22() {
List userList = null;
SqlSession sqlSession = null;
User user = new User();
user.setUserName("a");
user.setUserRole(1);
try {
sqlSession = MyBatisUtil.createSqlSession();
userList = sqlSession.getMapper(UserMapper.class).getUserList2(user);
} finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
for(User u : userList) {
logger.debug("testGetUserListByUser userCode: " + u.getUserCode() + "userName: " + u.getUserName() + "userRole: " + u.getUserRoleName());
}
}
2. resultMap-自定义映射结果
UserMapper.xml
UserMapperTest.java
@Test
public void testGetUserListUseResultMap() {
List userList = null;
SqlSession sqlSession = null;
User user = new User();
user.setUserName("a");
user.setUserRole(1);
try {
sqlSession = MyBatisUtil.createSqlSession();
userList = sqlSession.getMapper(UserMapper.class).getUserListUseResultMap(user);
} finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
for(User u : userList) {
logger.debug("testGetUserListByUser userCode: " + u.getUserCode() + "userName: " + u.getUserName() + "userRole: " + u.getUserRoleName());
}
}
描述如何将结果集映射到java对象
在select标签里增加了一个resultMap属性,一个外部resultMap的id,表示返回结果映射到哪一个resultMap结果集。
resultMap的id属性一定是唯一的。
type属性为映射的结果集。
column:数据库中的列名或别名。
property:表示查询出来的属性对应的值赋给实体对象的那个属性。
resultType:直接表示返回类型 包括基础数据类型 和 复杂数据类型
resultMap:对外部resultMap的引用 应用场景:数据库字段信息与对象属性不一致,复杂的联合查询,自由控制映射结果。
二者不能同时存在,本质上都是Map数据结果。
问题:
使用resultMap如何实现自由灵活的控制映射结果,从而达到只对关心的属性进行赋值填充?
结果:
即使没有在resultMap中的result元素中匹配,依然可以显示结果。
提示:
resultMap自动映射匹配前提:字段名和属性名一致
resultMap的自动映射级别(autoMappingBehavior)
PARTIAL(默认):自动匹配所有属性
NONE:禁止自动映射
八、总结
resultMap