resultMap
处理字段和属性的映射关系
方式一:字段名与属性名不一致,用别名
解决
select * from emp;
select eid,emp_name as empName,age,sex,email from emp;别名方式
方式二:核心配置文件中setters
标签配
在setters
标签配置mapUnderscoreToCamelCase
属性,值设置为true
是开户驼峰命名转换,默认是false
是不开启驼峰命名转换
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
mapUnderscoreToCamelCase |
是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 |
`true | false` |
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
方式三:自定义映射关系
resultMap
自定义标签相关的属性
父级标签
-
resultMap
:设置自定义映射关系 -
id
:唯一标识,不能重复 -
type
:设置映射关系中的实体类类型【就是查询结果给那个JavaBean
赋值】
子标签:【重点理解】
-
id
:设置主键的映射关系 -
result
:设置普通字段映射关系属性:
property
:设置映射关系中的属性名,必须是type
属性所设置的实体类类型中的属性名【就是type
设置JavaBean
类中的属性】column
:设置映射关系中字段名,必须是sql
语句查询出字段名【就是查询语句中的字段】
案例:
<!--
查询所有员工,并且使用resultMap解决字段名与属性名不一致问题
-->
<!--
resultMap:设置自定义映射关系
id:唯一标识,不能重复
type:设置映射关系中的实体类类型
子标签:
id:设置主键的映射关系
result:设置普通字段的映射关系
属性:
property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名
column:设置映射关系中的字段名,必须是sql语句查询出的字段名
-->
<resultMap id="empResultMap" type="Emp">
<id property="eid" column="eid"/>
<result property="empName" column="emp_name"/>
<result property="age" column="age"/>
<result property="sex" column="sex"/>
<result property="email" column="email"/>
</resultMap>
<select id="getAllEmp" resultMap="empResultMap">
select * from emp;
</select>
综合案例
Mapper
接口
public interface ResultMapper {
/**
* 查询所有员工,解决字段名与属性不一致三种方式
*/
List<Emp> getAllEmp();
}
文件
<!--
/**
* 查询所有员工,解决字段名与属性不一致三种方式
*/
List<Emp> getAllEmp();
方式一:起别名
<select resultType="Emp">
select eid,emp_name as empName,age,sex,email,did from emp;
</select>
方式二;设置全局[核心]配置文件开启驼峰命名
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
方式三:自定义映射文件
-->
<!--起别名-->
<select id="getAllEmpOld" resultType="Emp">
select eid,emp_name as empName,age,sex,email,did from emp;
</select>
<!--自定义映射文件-->
<resultMap id="empResultMap" type="Emp">
<id property="eid" column="eid"/>
<result property="empName" column="emp_name"/>
<result property="age" column="age"/>
<result property="sex" column="sex"/>
<result property="email" column="email"/>
<result property="did" column="did"/>
</resultMap>
<select id="getAllEmp" resultMap="empResultMap">
select * from emp;
</select>
test
类
public class ResultMapperTest {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ResultMapper mapper = sqlSession.getMapper(ResultMapper.class);
@Test
public void testField(){
List<Emp> list = mapper.getAllEmp();
list.forEach(emp -> System.out.println(emp));
}
}