Mybatis中,自定义resultMap,实现高级结果集映射
方法一
1、接口中定义方法
public Employee getEmpById(Integer id);
2、xml配置
<select id="getEmpById" resultType="com.fenga.mybatis.bean.Employee">
select * from tbl_employee where id = #{id}
</select>
3、测试方法
@Test
public void test1() throws IOException {
//1.获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//2.获取SQLSession对象
SqlSession openSession = sqlSessionFactory.openSession();
try {
//3.获取接口实现类对象
//会为接口自动的创建一个代理对象,代理对象会执行增删改查方法
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(employee);
}finally {
openSession.close();
}
}
注意:如果结果出现lastName=null,可能是没开启驼峰命名法,在全局配置中配置:
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
方法二
第一步同上
2、xml配置:
<!-- 自定义某个javaBean的封装规则
type:自定义规则的Java类型
id:唯一id方便引用
-->
<resultMap type="com.fenga.mybatis.bean.Employee" id="MyEmp">
<!-- 指定主键列的封装规则
id定义主键会底层有优化
column:指定哪一列
property:指定对应的javaBean属性
-->
<id column="id" property="id"/>
<!-- 定义普通列的封装规则 -->
<result column="last_name" property="lastName"/>
<!-- 其他不指定的列会自动封装,我们只要写上resultMap就把全部的映射规则都写上 -->
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</resultMap>
<select id="getEmpById" resultMap="MyEmp">
select * from tbl_employee where id = #{id}
</select>
3、测试代码同上
4、效果