ssm mapper.xml讲解

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>

转载。

posted @ 2018-10-28 16:36  goodshred  阅读(1097)  评论(0编辑  收藏  举报