【MyBatis】学习纪要五:resultMap

这一节我们来讲讲 resultMap。因为前面几节已经提供大量实例代码,本节不再引入,需要的,可以进我的github,clone or download import your tool try run (methods)

demo2

欢迎你Star,或者 Follow

首先来分享一个技巧: domain 别名 @Alias("name") 但不推荐这么用,因为指定实体类的类路径就已经很简化了。

好,下面我们开始今天的内容!

Map

  • Map<Object, Object> 你只需要这么写 resultType="map"

  • Map<Object, POJO> 需要接口上指定Map的key @MapKey

resultMap

resultMap 封装格式

<resultMap>
  <id /> 主键 底层有优化
      column:列名
      property:对象的属性
  <result>
</>

关联查询

  • 自定义封装

实例代码:

   <resultMap id="cp" type="City">
      <id column="cId" property="id"/>
      <result column="cName" property="name" />
      <result column="pId" property="province.id" />
      <result column="pName" property="province.name" />
   </resultMap>
  • association

1、association 自定义单个对象的封装规则 属性 属性对象类型

<association property="" javaType=""></>

实例代码:

CityMapper.xml

   <!-- City findById3 (Integer id); -->
   <resultMap id="cp" type="City">
      <id column="cId" property="id"/>
      <result column="cName" property="name" />
      <association property="province" javaType="Province">
         <id column="pId" property="id" />
         <result column="pName" property="name" />
      </association>
   </resultMap>
   <select id="findById3" resultMap="cp">
       SELECT
          c.id    as cId,
          c.name  as cName,
          p.id    as pId,
          p.name  as pName
       FROM
          city c, province p
       WHERE
          c.province_id = p.id
          AND
          c.id = #{id}
   </select>

2、association 分布查询
<association property="" select="......Mpper.get..." column=""></>

实例代码:

CityMapper.xml

    <!--
    association 分步查询
    City findById4 (Integer id);
    -->
   <resultMap id="cp2" type="City">
      <id column="id" property="id"/>
      <result column="name" property="name" />
      <association property="province"
                   select="com.fengwenyi.mybatis.demo2.dao.ProvinceDao.findById2"
                   column="id"
                   ><!--fetchType="lazy" // 懒加载-->
         <id column="id" property="id" />
         <result column="name" property="name" />
      </association>
   </resultMap>
   <select id="findById4" resultMap="cp2">
       SELECT
          *
       FROM
          city
       WHERE
          id = #{id}
   </select>
  • collection 指定集合里面的元素类型 <collection property="" ofType=""></>

分布查询 使用延迟加载 lazy:延迟加载 / eager:立即 <collection property="" select="" column="" fetchType="lazy"></>


延迟加载 lazyLoadingEnabled=true

4、多列的时候怎么传?

封装Map

column="{key1=column1, key2=column2,....}"

5、discriminator 鉴别器

MyBatis 可以使用discriminator判断某列的值,然后根据某列的值改变封装行为

<discriminator javaType="" column="">
    <case value="" resultType="">
          
     </>
</>

实例代码:

   <!--
   测试鉴别器 discriminator
   City findById5 (Integer id);
   -->
   <resultMap id="cp5" type="City">
      <id column="id" property="id"/>
      <result column="name" property="name" />
      
      <discriminator javaType="String" column="name">
         <case value="巴中" resultType="City">
            <id column="id" property="id"/>
            <result column="id" property="name" />
         </case>
      </discriminator>
   </resultMap>
   <select id="findById5" resultMap="cp5">
       SELECT
          id, name
       FROM
          city
       WHERE
          id = #{id}
   </select>

猜你喜欢

转载自my.oschina.net/fengwenyi/blog/1800694