是Maybatis的结果集封装,搭配等标签的resultMap属性使用

属性:

id:该封装规则的唯一标识

type:封装出来的类型,可以是jdk自带的,比如Map,应该可以是自定义的,比如Employee

autoMapping:自动封装,如果数据库字段和javaBean的字段名一样,可以使用这种方式,但是不建议采取,还是老老实实写比较稳妥,如果非要使用此功能,那就在全局配置中加上mapUnderscoreToCamelCase=TRUE,它会使经典数据库字段命名规则翻译成javaBean的经典命名规则,如:a_column翻译成aColumn

extends:继承其他封装规则,和Java中的继承一样,也特别适合这样的场景

子标签:

用来标识出对象的唯一性,比如用表的主键,如:

column指定数据库字段名或者其别名

property指定javaBean的属性名

还有jdbcType,javaType,typeHandler,分别数据库类型,属性的java类型,数据库与Java类型匹配处理器

默认的类型匹配处理器有:

以上罗列的资料不全,可以参考官方文档的如下章节

非主键的映射规则

属性:

property:同标签

javaType:同标签

select:指定嵌套SQL,可以是本XML或者其他XML文件中的

fetchType:延迟加载,lazy打开延迟加载;eager积极加载

column:同标签

resultMap:不使用嵌套SQL,而是使用复杂SQL一次取出关联的对象,并封装,对应下面的方式三

resultSet:引用根据标签得到的resultSets,如:

SELECT * FROM BLOG WHERE ID = #{id}

SELECT * FROM AUTHOR WHERE ID = #{id}

{call getBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})}

autoMapping:同标签

columnPrefix:关联多张表查询时,为了使列明不重复,使用此功能可以减少开发量

select

B.id as blog_id,

B.title as blog_title,

A.id as author_id,

A.username as author_username,

A.password as author_password,

A.email as author_email,

A.bio as author_bio,

CA.id as co_author_id,

CA.username as co_author_username,

CA.password as co_author_password,

CA.email as co_author_email,

CA.bio as co_author_bio

from Blog B

left outer join Author A on B.author_id = A.id

left outer join Author CA on B.co_author_id = CA.id

where B.id = #{id}

抽取出共同的resultMap,因为作者和其他作者都具有同样的属性,因此有:

resultMap="authorResult" />

resultMap="authorResult"

columnPrefix="co_" />

foreignColumn:外键列

notNullColumn:不为空的列,如果指定了列,那么只有当字段不为空时,Mybatis才会真正创建对象,才能得到我们想要的值

typeHandler:同标签

方式一:

select employee_id,first_name,last_name,gendor,birthday,a.dept_id,dept_name,dept_desc

from employee a,department b

where a.dept_id=b.dept_id

and a.employee_id=#{id}

方式二:

select="com.jv.dao.DepartMentMapper.getDepartMentByIdNew" column="dept_id">

select="com.jv.dao.PostMapper.getPostById" column="post_id">

select employee_id,first_name,last_name,gendor,birthday,dept_id,post_id

from employee a

where a.employee_id=#{id}

方式三:

select employee_id,first_name,last_name,gendor,birthday,a.dept_id,dept_name,dept_desc

from employee a,department b

where a.dept_id=b.dept_id

and a.employee_id=#{id}

和association很像,collection是负责处理多行的结果集,如:

方式一:

使用嵌套SQL

SELECT * FROM BLOG WHERE ID = #{id}

SELECT * FROM POST WHERE BLOG_ID = #{id}

方式二:

使用复杂查询-在collection中直接配置封装规则

select

B.id as blog_id,

B.title as blog_title,

B.author_id as blog_author_id,

P.id as post_id,

P.subject as post_subject,

P.body as post_body,

from Blog B

left outer join Post P on B.id = P.blog_id

where B.id = #{id}

方式三:

使用复杂查询-抽取封装规则放到resultMap中

select

B.id as blog_id,

B.title as blog_title,

B.author_id as blog_author_id,

P.id as post_id,

P.subject as post_subject,

P.body as post_body,

from Blog B

left outer join Post P on B.id = P.blog_id

where B.id = #{id}

方式二和方式三只有在封装的方式上有区别

负责根据返回的字段的值封装不同的类型,如:

上面的配置就是如果vehicle_type的值是1,那么封装的结果为carResult,同事carResult又继承了vehicleResult的所有普通封装规则,最后的它结果可以按照下面的配置理解

使用构造器注入属性值,可能会问既然通过和就可以给属性注入值了,为什么还有一个构造器注入的,原因是有的JavaBean没有提供属性的getter和setter方法。

为了维护更方便,推荐在使用构造器注入的时候加上name属性,该属性值与构造器参数名字相同(需要编译参数加上-parameters,Jdk版本为1.8,而且Mybatis的参数useActualParamName设置为true(默认值为true)),也可以使用@param("paramName")指定特殊的参数名。

不一样 使用别名 数据字段和bean_Mybatis-resultMap标签详解相关推荐

  1. Android系统(96)---Android 数据交换解析框架Gson使用详解

    Android 数据交换解析框架Gson使用详解 Json 是一种文本形式的数据交换格式,比 xml 更为轻量.Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 ...

  2. 【Dash搭建可视化网站】项目10:疫情数据可视化大屏制作步骤详解

    疫情数据可视化大屏制作步骤详解 1 项目效果图 2 项目架构 3 文件介绍和功能完善 3.1 assets文件夹介绍 3.2 app.py和index.py文件完善 3.3 header.py文件完善 ...

  3. layui数据表格解析html,layui框架table 数据表格的方法级渲染详解

    layui框架table 数据表格的方法级渲染详解 如下所示: //js 规范书写 var tst=table.render({ elem: '#test11' ,cols: [[ //标题栏 {ch ...

  4. python处理excel大数据-Python实现大数据收集至excel的思路详解

    一.在工程目录中新建一个excel文件 二.使用python脚本程序将目标excel文件中的列头写入,本文省略该部分的code展示,可自行网上查询 三.以下code内容为:实现从接口获取到的数据值写入 ...

  5. 大数据时代 | 数据分析方法及理论详解

    大数据时代 | 数据分析方法及理论详解 1 数据分析前,我们需要思考 像一场战役的总指挥影响着整个战役的胜败一样,数据分析师的思想对于整体分析思路,甚至分析结果都有着关键性的作用. 2 分析问题和解决 ...

  6. 清理localstorage_vue 界面刷新数据被清除 localStorage的使用详解

    localStorage是html5新增的一个本地存储API,它有5M的大小空间,通过(key,value)的方式存储在浏览器中 window.localStorage.setItem('key', ...

  7. oracle itl解析,oracle数据块dump文件中ITL详解

    oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...

  8. 大数据是什么和大数据技术十大核心原理详解

     一.数据核心原理   从"流程"核心转变为"数据"核心   大数据时代,计算模式也发生了转变,从"流程"核心转变为"数据&quo ...

  9. 2022美亚杯第八届中国电子数据取证大赛-个人赛write up详解,软件就用弘连和美亚,尽量写的细致一点。建议入门看,仅为了解题,没有专业精神。专业选手去看后面推荐的两篇解析,都是大佬。

    建议新手看我的博客,比较简单粗暴,解题率较低,仅仅是为了比赛,入门的同学可以看看.我的水平还很糟糕,之后会努力学习,所以这篇博客也会不断修改完善.博客还有很多不当之处,如有发现不当之处请私信我,我会做 ...

  10. 图解大数据 | 分布式平台Hadoop与Map-Reduce详解

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/84 本文地址:https://www.showmeai.tech/article-d ...

最新文章

  1. 在caffe上fine-tuning网络
  2. 1秒识别200个假大牌 成本降50%  清华阿里邀全国人才用20张图锻造“打假AI”
  3. 【sprinb-boot】排除/不加载某些Bean
  4. Vue项目中的初始化
  5. Ant Design Pro 开启默认进入登录页
  6. android客户端cookies,android – 将cookie添加到客户端请求OkHttp
  7. 史上最容易理解————GET和POST两种基本请求方法的区别
  8. 金钱能让人更快乐吗?手把手教你用机器学习找到答案
  9. 程序员的噩梦:世界上最难的5种编程语言
  10. talentcentral测评结果_WinTalent人才测评系统
  11. 祖龙娱乐2021年亏损3.03亿元 同比收窄60%
  12. 二婚不领证吃亏的是谁?
  13. 11.重载示例(下)
  14. Linux服务器上安装node.js
  15. dreamweaver php网站模板,用DreamWeaver模板工具批量制作网页
  16. 微信开发之测试号申请
  17. SOFA Weekly | MOSNSOFARPC 发布、社区活动报名
  18. 盘点十大生鲜商城平台,生鲜电商还值不值得做
  19. glog安装配置及使用
  20. 简单弄懂Saas是什么? Saas与传统软件有什么区别?

热门文章

  1. java 写入指定路径文件_java对指定目录下文件读写操作介绍 | 学步园
  2. gdb tui 安装_GDB 单步调试汇编
  3. python3 上传文件到目标机器_通过python模块实现服务器和本地机器之间快速拷贝文件...
  4. Java 画精美图形
  5. Spring Boot 动态修改定时任务cron参数
  6. Android Studio 详细安装教程
  7. 域名可以转让注册人吗_网店可以转让吗?
  8. 【OpenCV 例程200篇】47. 图像增强—直方图匹配
  9. pcl从一个点云里面导出下标
  10. php pdo 关闭,php pdo预处理