MyBatis学习笔记 —— 字段名和属性不一致的情况下,如何处理映射关系
Posted 程序猿杰哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis学习笔记 —— 字段名和属性不一致的情况下,如何处理映射关系相关的知识,希望对你有一定的参考价值。
EmpMapper.java
/**
* 根据id查询员工信息
* @param empId
* @return
*/
Emp getEmpByEmpId(@Param("empId") Integer empId);
EmpMapper.xml
<?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.fan.mybatis.mapper.EmpMapper">
</mapper>
ResultMapTest.java
@Test
public void testGetEmpByEmpId()
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = mapper.getEmpByEmpId(1);
System.out.println(emp);
数据库表里字段名是带下划线的,比如 emp_name。对应实体类中的属性是驼峰命名规则的,比如empName。
字段名和属性名不一致的情况下,通过mybatis来查询,字段名和属性名是对应不上的。
有3种方法处理字段名和属性名的映射关系
方式1:带下划线的字段起别名,和实体类中的属性名一样。
<?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.fan.mybatis.mapper.EmpMapper">
<!--
字段名和属性不一致的情况,如何处理映射关系
第一种方式:为查询的字段设置别名,和属性名保持一致
-->
<select id="getEmpByEmpId" resultType="Emp">
select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #empId
</select>
</mapper>
运行测试,可以看到查询出来的字段和属性名一致。
方式二:当字段符合mysql的要求使用_,而属性符合java的要求使用驼峰
此时可以在MyBatis的核心配置文件中设置一个全局设置,可以自动将下划线映射为驼峰
比如:emp_id 映射为 empId, emp_name 映射为 empName
① 打开mybatis的核心配置文件 mybatis-config.xml
设置全局配置 settings,是作用于mybatis所有的增删改查的功能,
<settings>
<!-- 将下划线映射为驼峰 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
② EmpMapper.xml
<?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.fan.mybatis.mapper.EmpMapper">
<!--
字段名和属性不一致的情况,如何处理映射关系
1、为查询的字段设置别名,和属性名保持一致
2、当字段符合MySQL的要求使用_,而属性符合java的要求使用驼峰
此时可以在MyBatis的核心配置文件中设置一个全局设置,可以自动将下划线映射为驼峰
emp_id:empId, emp_name:empName
-->
<select id="getEmpByEmpId" resultType="Emp">
<!--select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #empId-->
select * from t_emp where emp_id = #empId
</select>
</mapper>
③ 运行测试,可以看到字段名映射为实体类中的属性了。
方式三:使用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.fan.mybatis.mapper.EmpMapper">
<!--
字段名和属性不一致的情况,如何处理映射关系
1、为查询的字段设置别名,和属性名保持一致
2、当字段符合MySQL的要求使用_,而属性符合java的要求使用驼峰
此时可以在MyBatis的核心配置文件中设置一个全局设置,可以自动将下划线映射为驼峰
emp_id:empId, emp_name:empName
3、使用resultMap自定义映射处理
-->
<!--
resultMap: 设置自定义的映射关系
id: 唯一标识
type: 处理映射关系的实体类的类型
常用的标签:
id: 处理主键和实体类中实现的映射关系
result: 处理普通字段和实体类中属性的映射关系
column: 设置映射关系中的字段名,必须是sql查询出的某个字段
property: 设置映射关系中的属性的属性名,必须是处理的实体类类型中的属性名
-->
<resultMap id="empResultMap" type="Emp">
<id column="emp_id" property="empId"></id>
<result column="emp_name" property="empName"></result>
<result column="age" property="age"></result>
<result column="gender" property="gender"></result>
</resultMap>
<select id="getEmpByEmpId" resultMap="empResultMap">
select * from t_emp where emp_id = #empId
</select>
</mapper>
select标签中的resultMap的值对应的是resultMap标签的id
以上是关于MyBatis学习笔记 —— 字段名和属性不一致的情况下,如何处理映射关系的主要内容,如果未能解决你的问题,请参考以下文章