在前面的文章中,提到过,项目里面的javaBean属性名与数据库表列名不对应的问题(例如,数据库表中last_name属性,在javaBean中,属性名为lastName),在前文中,我们通过在mybatis的全局配置文件中通过设置驼峰命名的方式解决了这个问题。在这片文章中,将采用另一种方式来解决这个问题。
通过在全局配置文件中设置
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
通过resultMap自定义结果映射规则
在 前面,气门都是用resultType
来设置返回类型,但是,在中还可以通过resultMap
自定义结果映射规则。
示例:
- 在dao接口(示例使用的是EmployeeMapper.java)中创建根据id查询一条员工记录方法。
public Employee getEmpById(Integer id);
- 在EmployeeMapper接口映射的sql映射文件中,通过
<resultMap id="" type=""></resultMap>
定义自定义结果映射规则。其中id:唯一id方便引用,type:自定义规则的java类型。
<mapper namespace="com.fzl.mybatis.dao.EmployeeMapping">
<resultMap id="MyEmp" type="com.fzl.mybatis.bean.Employee">
<!--
指定主键列的封装规则
id定义主键会底层有优化;
column:指定哪一列
property:指定对应的JavaBean属性
-->
<id column="id" property="id"/>
<!-- 定义普通列封装规则-->
<result column="last_name" property="lastName" />
<!-- 其他不指定的列会自动封装,我们只要写resultMap就把全部的映射规则都写上-->
<result column="gender" property="gender"/>
<result column="email" property="email"/>
</resultMap>
<select id="getEmpById" resultMap="MyEmp">
select * from tbl_employee where id = #{id}
</select>
</mapper>
- 测试
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "MyBatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}
@Test
public void test1() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMappingPlugs mapper = openSession.getMapper(EmployeeMappingPlugs.class);
Employee emp = mapper.getEmpById(1);
System.out.println(emp);
}finally{
openSession.close();
}
}
- 测试结果