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

是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")指定特殊的参数名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 6.0适应的机型,提升用户体验 可升Android 6.0机型盘点

原标题:提升用户体验 可升Android 6.0机型盘点【手机中国 导购】2009年Android系统正式发布,由此加速手机走向智能化进度。如今,随着Android系统日渐成熟,众多手机厂商都在此基础上研发出符合自家特色的系统版本,并且流…

MariaDB exists 学习

MariaDB exists 学习 exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录,反之如…

antd 能自适应吗_一种能自适应识别母线运行方式的备自投装置应用探讨

中山供电局的研究人员江清楷,在2019年第8期《电气技术》杂志上撰文,介绍了一种220kV备自投装置,列出了母联备自投和线路备自投的充电条件及起动条件。以220kV逸仙变电站为例,指出该备自投装置在双母线单分段接线的变电站应用中存在…

python抓取html中特定的数据库,Python抓取网页中内容,正则分析后存入mysql数据库...

firefoxhttpfox可以查看post表单首先在http://www.renren.com/这个地址输入用户名和密码,输入用户名和密码之后post到下面这个网址:http://www.renren.com/PLogin.do#renren.pyimport urllibimport urllib2import cookielibcookie cookielib.CookieJar(…

第二次团队冲刺--9

昨天:数据库的输出。今天:数据库的输出。遇到的问题:数据库里数据的输出问题。转载于:https://www.cnblogs.com/chenpengmeng/p/5559542.html

html页面tableview,用JS写的一个TableView控件代码

请看看编码是否规范,使用是否方便HTML:代码编号姓名{value}{value}编号名称{value}{value}Javascript:代码//class TableView {//构造函数function TableView(ID){var htmlTable document.getElementById(ID);this.container htmlTable.getElementsByTagName(&quo…

a4988 脉宽要求_A4982/A4984/A4985和A4988设备主要针对办公室自动化市场

随着社会的发展,在工作中,办公室的自动化需求加大,这就需要有各种办公室自动化设备的支持。Allegro MicroSystems公司宣布扩展其微步电动机驱动器系列,该系列共包含可减少外置元件和利用简单STEP(步进)和Direction(方向)接口的四款…

HTML中空格代码为,html空格 html 空格代码

html 空格和html空格代码篇在HTML网页排版机关时,一个翰墨与翰墨间空格可使用一个使用空格键直接空一格便可。然则要实现多个空格间隔,打再多空格键空格,始终至多展现一个空格地位。那末如何才智html构造中笔墨间完成多个空格成果&#xff1f…

centos 下载文件很慢_CentOS镜像下载

官网下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/step1: 进入下载页,选择阿里云站点进行下载Actual Country 国内资源 Nearby Countries 周边国家资源阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/每个链接…

使用java实现持续移动的小球

原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5559829.html 仅为自己学习作品,使用java的JFrame框架实现持续移动的小球。 最核心的部分为实现小球移动的move()方法,在小球碰到墙壁四壁的时候得以反弹&…

移动端html搜索怎么写,移动端实现搜索功能

在移动端需要实现如下搜索相关的功能点击搜索按钮实现搜索搜索按钮这里首先就会遇到怎么弹出搜索按钮。在html5 中 input 已经支持search 类型,iso/安卓所幸也都有自己的相应实现。只需要按照移动端的标准来写,那我就会为我们提供我们所需的搜索按钮。按…

git master代码被删除 怎么恢复_git 分支的删除与恢复

有没有,git创建无意中名字起错了,分支上传错了,想删除了?删除做了想恢复了?远程与本地都删除了要恢复的情况呢?如果有,那么一下内容获取你会感兴趣。删除分支有的时候可能会遇到需要删除git的br…

空白DirectX11应用程序

我用的开发工具是Visual Studio 2015,开发了第一个win32应用程序虽然顺利,但是一旦添加DirectX相关代码应用便无法启动了,出现了一连串问题!让我瞬间一蹶不振!但是隔了几天我尝试的心情又卷土重来,又尝试了…

计算机裸机与应用程序及用户之间的桥梁是,2016计算机二级《MS Office》单选试题与解析...

2016计算机二级《MS Office》单选试题与解析(1)下列叙述中正确的是A)一个算法的空间复杂度大,则其时间复杂度也必定大B)一个算法的空间复杂度大,则其时间复杂度必定小C)一个算法的时间复杂度大,则其空间复杂度必定小D)算法的时间复杂度与空间…

10kv线路负载率计算_10kV配电线路保护的整定计算

1、10kV配电线路的特点10kV配电线路结构特点是一致性差,如有的为用户专线,只接带一、二个用户,类似于输电线路;有的呈放射状,几十台甚至上百台变压器T接于同一条线路的各个分支上;有的线路短到几百m&#x…

diamond升级IP,覆盖的时候报错

这几天给客户调试DDR3 SDRAM Controllerd发现个很奇怪的问题。客户之前用的IP是DDR3 SDRAM Controllerd 1.4,客户想升级为DDR3 SDRAM Controllerd 3.0。客户直接双击之前的工程,然后regenerate,发现报错了,如下图。然后我就思考是…

一台微型计算机的处理速度主要取决于,2017年答案计算机等级考试题库「附答案」...

2017年答案计算机等级考试题库「附答案」一、单选题1、世界上首次提出存储程序计算机体系结构的是A 莫奇莱 B 艾仑图灵 C 乔治布尔 D 冯诺依曼2、世界上第一台电子计算机诞生于A 1941年 B 1946年 C 1949年 D 1950年3、世界上第一台电子数字计算机采用的主要逻辑部件是A 电子管 …

让我摘下星星送给你_想摘下星星给你摘下月亮给你是什么歌

最近中国新说唱有一首歌很是好听,这首歌歌曲开头是想摘下星星给你摘下月亮给你,那么这首歌是什么歌呢?下面就让我们来了解一下吧。想摘下星星给你摘下月亮给你是什么歌据悉这首歌叫作《星球坠落 (Live)》是由艾热 / 李佳隆演唱的星球坠落 (Live)歌手&am…

获取iOS系统版本

获取ios设备系统信息的方法 之 [UIDevice currentDevice] 获取iphone的系统信息使用[UIDevice currentDevice],信息如下: [[UIDevice currentDevice] systemName]:系统名称,如iPhone OS [[UIDevice currentDevice] systemVersion]&#xff1a…

html高度随宽度编号,纯css实现容器高度随宽度等比例变化的四种解决方案

使用一个隐藏的图片来实现这个方法是我最推荐的,因为不需要考虑任何兼容性,PC移动完美运行。除了增加了一个dom结构,但是相对与一个页面成百上千的代码来说,不值一提我们知道,div容器如果不给定高度,它的高…