自定义映射resultMap
前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!
Emp.java
public class Emp {
private Integer eid;
private String empName;
private Integer age;
private String sex;
private String email;
...
}
数据库表:t_emp
一、处理字段和属性的映射关系
若字段名和实体类中的属性名不一致,但是字段名符合数据库的规则(使用
_
),实体类中的属性名符合Java
的规则(使用驼峰),此时也可通过以下三种方式处理字段名和实体类中的属性的映射关系
⭕ 方式一:可以通过为字段起别名的方式,保证和实体类中的属性名保持一致
⭕ 方式二:可以在
MyBatis
的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase
,可以在查询表中数据时,自动将_类型的字段名转换为驼峰例如:字段名
user_name
,设置了mapUnderscoreToCamelCase
,此时字段名就会转换为userName
⭕ 方式三:在映射文件中设置
redultMap
问题:
EmpMapper
/**
* @description:查询所有的员工信息
* @author: Hey
* @date: 2022/7/3 23:38
* @param: []
* @return: java.util.List<com.ir.mybatis.pojo.Emp>
**/
List<Emp> getAllEmp();
EmpMapper.xml
<select id="getAllEmp" resultType="emp">
select * from t_emp;
</select>
ResultTest
/**
* @description:查询所有用户的信息
* @author: Hey
* @date: 2022/7/3 23:40
* @param: []
* @return: void
**/
@Test
public void testGetAllEmp(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> list = mapper.getAllEmp();
list.forEach(emp -> System.out.println(emp));
/**
* Emp{eid=1, empName='null', age=34, sex='男', email='123@qq.com'}
* Emp{eid=2, empName='null', age=32, sex='女', email='123@qq.com'}
* Emp{eid=3, empName='null', age=34, sex='男', email='123@qq.com'}
* Emp{eid=4, empName='null', age=23, sex='男', email='123@qq.com'}
* Emp{eid=5, empName='null', age=45, sex='女', email='123@qq.com'}
*/
}
/**
empName所有的值都为null:因为数据库表中的字段名为emp_name,而实体类中此字段名
对应的属性名为empname,所以字段名emp_name和属性名empname不一致,导致映射文件
里无法获取到传递过来的参数
方案一:使用别名
⭕ 代码演示:
EmpMapper
/**
* @description:查询所有的员工信息
* @author: Hey
* @date: 2022/7/3 23:38
* @param: []
* @return: java.util.List<com.ir.mybatis.pojo.Emp>
**/
List<Emp> getAllEmp();
EmpMapper.xml
<select id="getAllEmp" resultType="emp">
select eid,emp_name empname,age,sex,email from t_emp;
</select>
ResultTest
/**
* @description:查询所有用户的信息
* @author: Hey
* @date: 2022/7/3 23:40
* @param: []
* @return: void
**/
@Test
public void testGetAllEmp(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> list = mapper.getAllEmp();
list.forEach(emp -> System.out.println(emp));
/**
* Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
* Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
* Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
* Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
* Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
*/
}
方案二:在mybatis-config.xml
中设置mapUnderscoreToCamelCase
⭕ 代码演示:
<!--设置MyBatis的全局配置-->
<settings>
<!--将_自动映射为驼峰,emp_name:empName-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
EmpMapper
/**
* @description:查询所有的员工信息
* @author: Hey
* @date: 2022/7/3 23:38
* @param: []
* @return: java.util.List<com.ir.mybatis.pojo.Emp>
**/
List<Emp> getAllEmp();
EmpMapper.xml
<select id="getAllEmp" resultType="emp">
select * from t_emp;
</select>
ResultTest
/**
* @description:查询所有用户的信息
* @author: Hey
* @date: 2022/7/3 23:40
* @param: []
* @return: void
**/
@Test
public void testGetAllEmp(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> list = mapper.getAllEmp();
list.forEach(emp -> System.out.println(emp));
/**
* Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
* Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
* Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
* Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
* Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
*/
}
方案三:在映射文件中设置redultMap
⭕
resultMap
:设置自定义映射关系
id
:唯一标识,不能重复type
:设置映射关系中的实体类类型- 子标签:
3.1id
:设置主键的映射关系
3.2result
:设置普通字段的映射关系
3.3 属性:
property
:设置映射关系中的属性名,必须是type
属性所设置的实体类类型中的属性名
column
:设置映射关系中的字段名,必须是sql
语句查询出的字段名
⭕ 代码演示:
EmpMapper.java
/**
* @description:查询所有的员工信息
* @author: Hey
* @date: 2022/7/3 23:38
* @param: []
* @return: java.util.List<com.ir.mybatis.pojo.Emp>
**/
List<Emp> getAllEmp();
EmpMapper.xm
<resultMap id="empTest" type="Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
</resultMap>
<select id="getAllEmp" resultMap="empTest">
select * from t_emp;
</select>
ResultTest
@Test
public void testGetAllEmp(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> list = mapper.getAllEmp();
list.forEach(emp -> System.out.println(emp));
/**
* Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
* Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
* Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
* Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
* Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
*/
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156798.html