MyBatis-映射文件05-resultMap自定义结果封装规则

mac2024-07-11  13

MyBatis-映射文件05-resultMap自定义结果封装规则

mapper.xml文件中标签下的标签可以自定义查询结果的封装规则,具体用法见代码注释

示例:

映射文件:EmployeeMapper.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="dao.EmployeeMapper"> <!--type属性的值为封装的JavaBean的全类名,id用于唯一标识该resultMap--> <resultMap type="bean.Employee" id="MyEmp"> <!-- id:指定主键的封装规则,使用id标签定义主键底层会有优化 column:指定数据库中表的字段名 property:指定对应的javabean的属性 --> <id column="id" property="id"/> <!-- result标签定义普通列封装规则 --> <result column="last_name" property="lastName"/> <!-- 其他列可以不指定,不指定的列会自动封装,但是推荐只要指定resultMap就把全部的映射规则都写上 --> <result column="email" property="email"/> <result column="gender" property="gender"/> </resultMap> <!-- 这里resultMap属性的值为前面定义的resultMap的id --> <select id="getEmpById" resultMap="MyEmp"> select * from tbl_employee where id = #{id} </select> </mapper>

在全局配置文件mybatis-config.xml中不开启驼峰命名,进行下面的测试,查看能否将数据库中的last_name字段的值封装进 JavaBean 的 lastName 成员变量

测试:

package test; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import bean.Employee; import dao.EmployeeMapper; public class MyBatisTest { // 获取SqlSessionfactory对象的方法 public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); Employee employee = mapper.getEmpById(1); System.out.println(employee); } finally { openSession.close(); } } }

执行上面的测试方法,可以看到控制台输出

DEBUG 10-31 18:11:43,482 ==> Preparing: select * from tbl_employee where id = ? (BaseJdbcLogger.java:145) DEBUG 10-31 18:11:43,545 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145) DEBUG 10-31 18:11:43,575 <== Total: 1 (BaseJdbcLogger.java:145) Employee [id=1, lastName=Admin, email=jerry.com, gender=1]

由此可见,通过使用 resultMap 标签来自定义封装的规则,在不开启驼峰命名的时候也可以将 last_name字段的值封装进 JavaBean 的 lastName 变量中;

resultMap 标签就是用于定义 数据库表的字段名 与 JavaBean实体类的成员变量 的对应关系

(resultMap的更大作用应该是在于其内部的association标签和collection标签,这两个标签主要用于多表联合查询,以及discriminator鉴别器)

最新回复(0)