文档章节

【MyBatis】学习纪要五:resultMap

冯文议
 冯文议
发布于 2018/04/25 01:23
字数 546
阅读 9
收藏 10

这一节我们来讲讲 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>

© 著作权归作者所有

冯文议
粉丝 11
博文 47
码字总数 47895
作品 0
成都
高级程序员
私信 提问
MyBatis多对多关联查询示例——MyBatis学习笔记之十八

MyBatis系列的上一篇博客发表时,笑笑还没有出生。转眼间八个月过去了,他已经是个大宝宝了。这么长时间未更新MyBatis系列的博客,想来真是罪过。不过有了宝宝之后,的确会分散自己很大一部分...

NashMaster2011
2014/04/23
0
0
Mybatis(二)返回值、表查询

之前对Mybatis有了初步的学习与使用,最近学习ssh发现ssh太重,我个人觉得,像hibernate事务,很多情况下没有使用,而缓存,大部分时候也用不上,需要用到的场景,完全可以自已开发,更轻,而...

什么都不懂的小石
2017/12/02
0
0
Mybatis Mapper.xml 配置文件中 resultMap 节点的源码解析

相关文章 Mybatis 解析配置文件的源码解析 Mybatis 类型转换源码分析 Mybatis 数据源和数据库连接池源码解析(DataSource) Mybatis Mapper 接口源码解析(binding包) Mybatis 解析 SQL 源码...

tsmyk0715
2018/11/18
1K
0
mybatis(八)mapper映射文件配置之select、resultMap

上篇介绍了insert、update、delete的用法,本篇将介绍select、resultMap的用法。select无疑是我们最常用,也是最复杂的,mybatis通过resultMap能帮助我们很好地进行高级映射。下面就开始看看...

LCZ777
2014/12/19
34
0
mybatis学习笔记(7)-输出映射

mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射。 输出映射有两种方式 resultType 使用进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可...

brianway
2016/02/28
201
0

没有更多内容

加载失败,请刷新页面

加载更多

debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
28分钟前
9
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
29分钟前
7
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
34分钟前
5
0
《区块链DAPP开发入门、代码实现、场景应用》笔记1——天外飞仙DAPP

Solidity编程语言解决了编写智能合约的不友好的问题,但是当合约编译并部署之后,对与这些接口的访问,对于一般的使用者来说,门槛有点高, 对普通用户来说也是非常不友好,为了使广大用户理...

柯南和由美
38分钟前
4
0
流程图制作软件推荐_流程图制作软件哪个好

流程图(Flow Chart)是一种表示算法思路的图示,通过特定图形、图表可以直观的说明某一过程。这种过程既可以是生产线上的工艺流程图,也可以标明某项任务必需的管理过程。为了便于识别,绘制...

工具分享
41分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部