不一样 使用别名 数据字段和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")指定特殊的参数名。
不一样 使用别名 数据字段和bean_Mybatis-resultMap标签详解相关推荐
- Android系统(96)---Android 数据交换解析框架Gson使用详解
Android 数据交换解析框架Gson使用详解 Json 是一种文本形式的数据交换格式,比 xml 更为轻量.Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 ...
- 【Dash搭建可视化网站】项目10:疫情数据可视化大屏制作步骤详解
疫情数据可视化大屏制作步骤详解 1 项目效果图 2 项目架构 3 文件介绍和功能完善 3.1 assets文件夹介绍 3.2 app.py和index.py文件完善 3.3 header.py文件完善 ...
- layui数据表格解析html,layui框架table 数据表格的方法级渲染详解
layui框架table 数据表格的方法级渲染详解 如下所示: //js 规范书写 var tst=table.render({ elem: '#test11' ,cols: [[ //标题栏 {ch ...
- python处理excel大数据-Python实现大数据收集至excel的思路详解
一.在工程目录中新建一个excel文件 二.使用python脚本程序将目标excel文件中的列头写入,本文省略该部分的code展示,可自行网上查询 三.以下code内容为:实现从接口获取到的数据值写入 ...
- 大数据时代 | 数据分析方法及理论详解
大数据时代 | 数据分析方法及理论详解 1 数据分析前,我们需要思考 像一场战役的总指挥影响着整个战役的胜败一样,数据分析师的思想对于整体分析思路,甚至分析结果都有着关键性的作用. 2 分析问题和解决 ...
- 清理localstorage_vue 界面刷新数据被清除 localStorage的使用详解
localStorage是html5新增的一个本地存储API,它有5M的大小空间,通过(key,value)的方式存储在浏览器中 window.localStorage.setItem('key', ...
- oracle itl解析,oracle数据块dump文件中ITL详解
oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...
- 大数据是什么和大数据技术十大核心原理详解
一.数据核心原理 从"流程"核心转变为"数据"核心 大数据时代,计算模式也发生了转变,从"流程"核心转变为"数据&quo ...
- 2022美亚杯第八届中国电子数据取证大赛-个人赛write up详解,软件就用弘连和美亚,尽量写的细致一点。建议入门看,仅为了解题,没有专业精神。专业选手去看后面推荐的两篇解析,都是大佬。
建议新手看我的博客,比较简单粗暴,解题率较低,仅仅是为了比赛,入门的同学可以看看.我的水平还很糟糕,之后会努力学习,所以这篇博客也会不断修改完善.博客还有很多不当之处,如有发现不当之处请私信我,我会做 ...
- 图解大数据 | 分布式平台Hadoop与Map-Reduce详解
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/84 本文地址:https://www.showmeai.tech/article-d ...
最新文章
- 在caffe上fine-tuning网络
- 1秒识别200个假大牌 成本降50% 清华阿里邀全国人才用20张图锻造“打假AI”
- 【sprinb-boot】排除/不加载某些Bean
- Vue项目中的初始化
- Ant Design Pro 开启默认进入登录页
- android客户端cookies,android – 将cookie添加到客户端请求OkHttp
- 史上最容易理解————GET和POST两种基本请求方法的区别
- 金钱能让人更快乐吗?手把手教你用机器学习找到答案
- 程序员的噩梦:世界上最难的5种编程语言
- talentcentral测评结果_WinTalent人才测评系统
- 祖龙娱乐2021年亏损3.03亿元 同比收窄60%
- 二婚不领证吃亏的是谁?
- 11.重载示例(下)
- Linux服务器上安装node.js
- dreamweaver php网站模板,用DreamWeaver模板工具批量制作网页
- 微信开发之测试号申请
- SOFA Weekly | MOSNSOFARPC 发布、社区活动报名
- 盘点十大生鲜商城平台,生鲜电商还值不值得做
- glog安装配置及使用
- 简单弄懂Saas是什么? Saas与传统软件有什么区别?
热门文章
- java 写入指定路径文件_java对指定目录下文件读写操作介绍 | 学步园
- gdb tui 安装_GDB 单步调试汇编
- python3 上传文件到目标机器_通过python模块实现服务器和本地机器之间快速拷贝文件...
- Java 画精美图形
- Spring Boot 动态修改定时任务cron参数
- Android Studio 详细安装教程
- 域名可以转让注册人吗_网店可以转让吗?
- 【OpenCV 例程200篇】47. 图像增强—直方图匹配
- pcl从一个点云里面导出下标
- php pdo 关闭,php pdo预处理