mybatis 一对一 一对多 级联查询

大家好,我是烤鸭:

    今天分享一下关于mybatis的级联查询。

    环境:

        mybatis   3.2.8

        spring      4.1.9

 

1.   业务场景

    在一个人申请某些账号或者权限的时候,比如微信的认证流程。

   会让你一步一步按要求输入,比如第一步:点击微信认证,第二步:认证联系人信息填写;最后一步:填写公众号名称、功能介绍、选择运营地区就。

   当你在填写完第二步退出之后,再重新登录会发现第一步的信息已经记录了。

   这里至少要设计四张表,流程表和每一步的表,都是主键一一关联,这是一对一。

   又或者如其他平台的企业版的认证,可以添加下级的机构,这就是一对多了。

2.    mybatis 构建

     get,set方法是必须要的,我这里没粘贴出来。

pojo:

public class ApplyCompanyBackResp{private static final long serialVersionUID = 1L;private ApplyCompanyBusinessA businessA1;private ApplyCompanyBusinessAl businessAl;private ApplyCompanyBusinessCt businessC1;private ApplyCompanyBusinessCr businessC2;private ApplyCompanyBusinessJ businessAliantJ1;private ApplyCompanyBusinessM businessM1;private ApplyCompanyBusinessMo businessAliantM2;private List<ApplyCompanyBusinessJ1Store> businessJ1StoreList;}

mapper:

<!--根据当前页面获取该企业开通的权限--><select id="applyCompanyAuthorityBusiness" parameterType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyAuthority"resultMap="applyCompanyResp">SELECTacbc.`status` AS 'c1Status','c1' AS 'c1Remarks',acbcc.`status` AS 'c2Status','c2' AS 'c2Remarks',acba.`status` AS 'a1Status','a1' AS 'a1Remarks',acbac.`status` AS 'a2Status','a2' AS 'a2Remarks',acbj.status AS 'J1Status','j1' AS 'j1Remarks',acbmr.`status` AS 'm1Status','m1' AS 'm1Remarks',acbmr2.status AS 'm2Status','m2' AS 'm2Remarks',acbjs.jx_name AS 'j1Name',acbjs.status AS 'j1StoreStatus'FROM apply_company_process acpLEFT JOIN apply_company_business_c1 acbc ON acbc.apply_id = acp.apply_idLEFT JOIN apply_company_business_c2 acbcc ON acbcc.apply_id = acp.apply_idLEFT JOIN apply_company_business_a1 acba ON acba.apply_id = acp.apply_idLEFT JOIN apply_company_business_a2 acbac ON acbac.apply_id = acp.apply_idLEFT JOIN apply_company_business_j1 acbj ON acbj.apply_id = acp.apply_idLEFT JOIN apply_company_business_m1 acbmr ON acbmr.apply_id = acp.apply_idLEFT JOIN apply_company_business_m2 acbmr2 ON acbmr2.apply_id = acp.apply_idLEFT JOIN apply_company_business_j1_store acbjs ON acbjs.apply_id = acbj.apply_id<where>1 = 1 AND 'needOptimization' = 'needOptimization' AND acp.apply_id = #{applyId}</where></select><resultMap type="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBackResp" id="applyCompanyResp"><!-- 配置xx相关的映射信息 --><association property="businessA1" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessA1"><id  property="applyId" column="applyId" /><result property="remarks" column="a1Remarks"/><result property="status" column="a1Status"/></association><!-- 配置xx的映射信息 --><association property="businessA2" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessA2"><id  property="applyId" column="applyId" /><result property="remarks" column="a2Remarks"/><result property="status" column="a2Status"/></association><!-- 配置xx相关的映射信息 --><association property="businessC1" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessC1"><id  property="applyId" column="applyId" /><result property="remarks" column="c1Remarks"/><result property="status" column="c1Status"/></association><!-- 配置xx相关的映射信息 --><association property="businessC2" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessC2"><id  property="applyId" column="applyId" /><result property="remarks" column="c2Remarks"/><result property="status" column="c2Status"/></association><!-- 配置xx相关的映射信息 --><association property="businessAliantJ1" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessJ1"><id  property="applyId" column="applyId" /><result property="remarks" column="j1Remarks"/><result property="status" column="j1Status"/></association><!-- 配置xx相关的映射信息 --><association property="businessM1" column="businessMobileRecycling.aliStatus" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessM1"><id  property="applyId" column="applyId" /><result property="remarks" column="m1Remarks"/><result property="status" column="m1Status"/></association><!-- 配置xx相关的映射信息 --><association property="businessAliantM2" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessM2"><id  property="applyId" column="applyId" /><result property="remarks" column="m2Remarks"/><result property="status" column="m2Status"/></association><!-- 配置xx相关的信息 --><!--collection用于指定集合类型的映射.property指定对应的集合名称.ofType指定集合中存放的数据的类型  --><collection property="businessJ1StoreList" ofType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessJ1Store"><!-- id和result指定了需要配置的列和属性名和映射 --><result property="applyId" column="applyId" /><result property="jxName" column="j1Name"/><result property="status" column="j1StoreStatus"/></collection></resultMap>

从sql我们可以看出来,有一张process主表,其他的表都是以applyId作为主键关联。其中store表是一对多的关系,其他都是一对一。如果我们想把这个企业的所有权限信息展示,就需要关联这些所有的表。

需求是查询这些权限的状态,所以不需要太多其他的字段。

association  一对一。

property :

association  中的 property 对应的是 resultMap实体中的属性名称,在上面就是这个ApplyCompanyBackResp。

ApplyCompanyBackResp 这个pojo中的属性名称,比如 businessA1 对应的 property 就是 businessA1。

column:

column 是一定要写的 ,对应的是数据库的关联字段名称,比如上边的是apply_id 。

javaType:

返回的实体类型。

id:

数据库表主键,我这边是主键关联,所以id就是apply_id。property 是 实体属性 ,column是 查询的结果字段(别名)。比如上边的各种status,是起的别名,这里要和下边的 column 对应上。

针对于我这边不需要查询主键,可以不查。

result:

和id是一样的, 是非主键的字段映射。property 是 实体属性 ,column是 查询的结果字段(别名)。

 

collection 一对多:

property :

association  中的 property 对应的是 resultMap实体中的属性名称,在上面就是这个ApplyCompanyBackResp。

ApplyCompanyBackResp 这个pojo中的属性名称,比如 businessJ1StoreList对应的 property 就是 businessJ1StoreList。

ofType:

返回的实体类型。

id:

数据库表主键,我这边是主键关联,所以id就是apply_id。property 是 实体属性 ,column是 查询的结果字段(别名)。比如上边的各种status,是起的别名,这里要和下边的 column 对应上。

针对于我这边不需要查询主键,可以不查。

result:

和id是一样的, 是非主键的字段映射。property 是 实体属性 ,column是 查询的结果字段(别名)。

 

3.    总结

    mybatis的级联查询,如果是一对一,一定在 association标签内加 column属性。这样查询出来的才能封装到 结果对象 中。

    如果是一对多,mysql查询出来的数据结果就会是多条。比如上面的情况,查询出来的结果如果是2条,这两条数据collection前面的结果是一样的,只是针对于collection中的属性名称的 结果 不一样。类似下图,应该j1Name,j1StoreStatus 这列是从别的表查询出来的,其他列数据是相同的。

    如果你想清晰一点你的话,也可以在 association 或者 collection 写 select标签,值是 select 语句。类似下图

    

 

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

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

相关文章

IDEA启动tomcat报错java.util.zip.ZipException: error in opening zip file

原因CATALINA_BASE参数后面多了一个斜杠 将&#xff1a;CATALINA_BASEK:\Tomcats\apache-tomcat-9.0.10_cform\ 改&#xff1a;CATALINA_BASEK:\Tomcats\apache-tomcat-9.0.10_cform

[css] 外边距重叠是什么?重叠的结果是什么?怎么防止外边距重叠?

[css] 外边距重叠是什么&#xff1f;重叠的结果是什么&#xff1f;怎么防止外边距重叠&#xff1f; 外边距重叠是什么&#xff1f;外边距重叠指的是&#xff0c;当两个垂直外边距相遇时&#xff0c;它们将形成一个外边距。 重叠后的外边距的高度等于两个发生重叠的外边距的高度…

JavaScript计算两个日期相差天数/分钟/小时

/*** 日期相减获取天数&#xff08;用于公式计算&#xff09;* param date1 日期一 例如:"{value:2020-06-05,date_format:yyyy-MM-dd}"* param date2 日期二 例如:"{value:2020-06-04,date_format:yyyy-MM-dd}"* returns {string}*/ function calcDateDay…

java 实现 常见排序算法(二) 插入排序

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下基础排序算法之直接插入排序。 1. 直接插入排序&#xff1a; 原理&#xff1a;假设前面的数为有序数列&#xff0c;然后有序数列与无序数列的每个数比较&#xff0c;我们可以从右向左比较 思路&#xff1a;从第2…

[css] css中的border:none和border:0px有什么区别?

[css] css中的border:none和border:0px有什么区别&#xff1f; none是没有边框. 0px是边框的宽度为0px.个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

linux 常用 启动命令 汇总

大家好&#xff0c;我是烤鸭&#xff1a; 没有准备启动脚本。服务器出问题之后&#xff0c;重启就是全部重启。 如&#xff1a; mysql,nginx,tomcat,zookeeper,rabbitmq,mongodb,redis,xxxxx 头大。持续更新。。。 consul启动&#xff1a; (公网可以访问 使用-client 0.0.0…

Error:Artifact com.*******:war exploded: java.nio.file.InvalidPathException: Illeg

由于一次电脑蓝屏&#xff0c;Idea启动tomcat报错: Error:Artifact :war exploded’: java.nio.file.InvalidPathException: Illegal char < > at index 71: K:\COMPANY_CODE_IDEA\FLOW_CODE*\target\activ : Illegal char < > at index 71: K:\COMPANY_CODE_IDEA…

[css] 如何写高效的CSS?

[css] 如何写高效的CSS&#xff1f; 唔&#xff0c;自动补全、预编译这些辅助手段确实能提升一定的效率&#xff0c; 但我觉得真正能提升效率的是&#xff0c;不看预览就敢上手的理论知识。 见过太多加几行就要预览下效果的开发了&#xff0c;哪怕给他双屏其实也还是会拖慢节奏…

React 在body上绑定事件以及阻止事件冒泡

<!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>React 在body上绑定事件以及阻止事件冒泡</title><script src"https://unpkg.com/react16/umd/react.development.js"></script><script …

[css] 如何做图片预览,如何放大一个图片?

[css] 如何做图片预览&#xff0c;如何放大一个图片&#xff1f; 图片不跨域的话用 canvas 来 drawImage 放大裁剪也可以。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前…

java 爬虫 抓取 网易云音乐

大家好&#xff0c;我是烤鸭&#xff1a; 今天和大家交流一下爬虫&#xff0c;抓取网易云音乐。只讨论技术&#xff0c;不提倡其他的。 1. 找音乐源地址 谷歌浏览器 F12 &#xff0c;找请求类型是 Media的。 2. 找请求链接 切换请求类型到 All&#xff0c;看 Respons…

idea警告Cannot resolve MVC View

关闭MVC View路径检查,Settings --> Editor -->Inspections -->搜索Spring MVC View—>取消勾选Spring MVC View Reference

[css] 举例说明在css3中怎么实现背景裁剪?

[css] 举例说明在css3中怎么实现背景裁剪&#xff1f; background-clip: border-box(默认,背景延伸至边框外沿,但是在边框的下层) padding-box(背景延伸至padding的外沿) content-box(背景延伸至内容的外沿) text(背景剪裁成文字的样式)个人简介 我是歌谣&#xff0c;欢迎和大…

django 模型类的常见字段约束,以及filter 过滤和查询

null 不设置时默认设置为False。设置为True时&#xff0c;数据库表字段中将存入NULL的记录。 null和blank组合使用&#xff0c;nullTrue,blankTrue,表示该字段可以为空 blank 默认设置为False。设置为True时&#xff0c;表字段许可无任何输入。设置为False 时&#xff0c;表字段…

idea启动tomcat时蓝屏

idea启动tomcat时蓝屏 环境 1&#xff0c;windows10 2&#xff0c;tomcat8 3&#xff0c;jdk8 4&#xff0c;idea2020 解决方法&#xff1a; 因为之前安装的是绿色版jdk&#xff0c;然后再官网下载exe格式的jdk&#xff0c;idea再更换一下jdk就没有蓝屏了&#xff01; jdk8下…

ssh sftp 免密码 公钥登录

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享的是java ssh sftp 免密码登录。 1. JAVA代码 ssh连接 http://www.360doc.com/content/14/0409/16/9552892_367544139.shtml https://blog.csdn.net/u013066244/article/details/70198839 公钥和私钥不需要用代码生成&…

[css] 如何使用CSS的多列布局?

[css] 如何使用CSS的多列布局&#xff1f; div {-webkit-column-count: 3; /* Chrome, Safari, Opera */-moz-column-count: 3; /* Firefox */column-count: 3; }或者使用flex布局来实现多列布局个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&…

CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)

CF传送门 洛谷传送门 【题目分析】 在zxy大佬的讲解下终于懂了这道题的做法了qwq。。。 首先根据题意&#xff0c;出发点不一定在特殊点上&#xff0c;但第一次操作后&#xff0c;之后所有的操作都是在特殊点上&#xff0c;所以先考虑从线上出发的最大概率&#xff0c;再加一步…

linux centos/redhat mysql8.0安装(汇总贴)

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下linux 装 mysql8.0。以下都是实践过的可以用的。 1. yum方式安装&#xff08;最简单方式&#xff09; https://blog.csdn.net/weixin_37264997/article/details/80342838 2. linux系统安装mysql8.0.11完整教程&#xff…

[css] 请说说CSS3实现文本效果的属性有哪些?

[css] 请说说CSS3实现文本效果的属性有哪些&#xff1f; text-shadow:文字阴影效果 word-wrap:换行设置个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题