为了账号安全,请及时绑定邮箱和手机立即绑定

【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>
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.4万
获赞与收藏
707

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消