1.resultMap
resultMap就是结果集映射的配置标签,
二、从SQL查询结果到领域模型实体
在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程。
1. 通过JDBC查询得到ResultSet对象
2. 遍历ResultSet对象(结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等),并将每行数据暂存到HashMap(即下文的resultmap)实例中,以结果集的字段名或字段别名为键,以字段值为值
3. 根据ResultMap标签的type属性(返回值的全限定类名,或类型别名)通过反射实例化领域模型,(autoMapping属性,true为:自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法)
4. 根据ResultMap标签的type属性和id(主键)、result(属性)等标签信息将HashMap中的键值对,填充到领域模型实例中并返回
举个例子:
1.示例1:通过setter构造领域模型
public class EStudent{ private long id; private String name; private int age; // getter,setter方法 /** * 必须提供一个无参数的构造函数 */ public EStudent(){} }
<!-- 属性id代表整个经过处理后的结果集resultMap的标识,type代表使用哪种类作为其映射的类,可以是别名或者全限定名--> <resultMap id="getStudentRM" type="EStudnet"> 子元素id代表resultMap的主键 <id property="id" column="ID"/> <!-- property: 映射数据库列的字段的java pojo类的成员变量名 (若映射失败,myatis会映射成搜索给定名称的字段) column:数据库的列名或者列标签别名 result代表其属性。--> <result property="studentName" column="Name"/> <result property="studentAge" column="Age"/> </resultMap>
示例2:通过构造函数构造领域模型
public class EStudent{ private long id; private String name; private int age; // getter方法 public EStudent(long id, String name, int age){ this.id = id; this.name = name; this.age = age; } }
<select id="getStudent" resultMap="getStudentRM"> SELECT ID, Name, Age FROM TStudent </select> <resultMap id="getStudentRM" type="EStudnet"> <!----- constructor元素 ,指定使用指定参数列表的构造函数来实例化领域模型。注意:其子元素顺序必须与参数列表顺序对应 idArg子元素 ,标记该入参为主键 arg子元素 ,标记该入参为普通字段(主键使用该子元素设置也是可以的) -------> <constructor> <idArg column="ID" javaType="_long"/> <arg column="Name" javaType="String"/> <arg column="Age" javaType="_int"/> </constructor> </resultMap>
转载。