博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis一对一映射配置详解
阅读量:5908 次
发布时间:2019-06-19

本文共 3120 字,大约阅读时间需要 10 分钟。

 

听说mybatis一对一有三种写法,今天我试了一下。

数据库表准备

为了偷懒,我直接就拿用户权限菜单里的菜单表和菜单与权限的中间表做实现,他们原来是多对多的关系,这边我假设这两张表是一对一。

表  gl_role_men:id,role_id,menu_id     --------->  实体类 GlrolemenuModel  private String id;private String roleId;private String menuId;private MenuModel menu;

表  menu:id,menu_name,url         --------->  实体类 MenuModel private String id;private String menuName;private String url;

一对一第一种写法

glrolemenuMapper.xml

这个映射文件里的写法有几个要注意的地方,因为是GlrolemenuModel里放了MenuModel的信息,所以我称GlrolemenuModel是维护关系的一方,那么resultMap的type就是GlrolemenuModel

property对应是实体类的属性,column对应的是数据库里表字段名

GlrolemenuDao

List
getAllGlrolemenuAndMenu();

GlrolemenuDaoImpl

public List
getAllGlrolemenuAndMenu() { return baseDao.selectList("com.tieasy.model.mapper.glrolemenu_getAllGlrolemenuAndMenu", null); }

Action里调用接口实现方法

List
list = glrolemenuDao.getAllGlrolemenuAndMenu();

返回list的json

[{"id":"02ce54203c514b3ca176a3203957c222-1484040384-510","roleId":"02ce54203c514b3ca176a3203957ce0e-1484040384-581","menuId":"00dfcf127f4b4ba1bc8a891938519be0-1484040323-960","menu":{"menuName":"权限管理","url":"/quanxianguanli"}}]

一对一第二种写法

这边使用到了association,这个真的很神奇,原谅我很土鳖,和第一种的写法区别不大,主要就是把被维护的哪一方MenuModel换成用<association>来写

glrolemenuMapper.xml

淡黄色背景的就是改动的部分

其它文件都不需要动

元素<association>被用来导入“有一个”(has-one)类型的关联。在上述的例子中,我们使用了<association>元素引用了另外的在同一个XML文件中定义的<resultMap>。

同时我们也可以使用<association> 定义内联的resultMap。

一对一第三种写法

glrolemenuMapper.xml

还是只有映射文件有改变,但是我这边是因为数据库里每张表只有一条数据,所以其实实际id="glrolemenu_getAllGlrolemenuAndMenu"的这个select是要有个查询条件parameterType,哎,我是有多懒。不过反正是查出来了。

在此方式中,<association>元素的select属性被设置成了id为glrolemenu_getMenuById的语句。这里,两个分开的SQL语句将会在数据库中分别执行。

看看mybatis打印的信息,确定是分两次查询的

 

 总结

这个mybatis一对一配置,对于我这种懒人我选的话可能会选第一二种写法,但是需要强调的是第三种方法可以实现懒加载,因为它是分两个sql先后执行的,当选择懒加载的时候,只会执行第一个sql,只有当我们需要访问到第二条sql的数据的时候,才会触发它执行,这就是所谓的懒加载。

嗯,那什么,就和单例模式的饿汉模式和懒汉模式类似。

转载地址:http://czvpx.baihongyu.com/

你可能感兴趣的文章
第三方分享功能
查看>>
设计接口使用Post还是Get
查看>>
Python学习之路41-元类
查看>>
我是如何成为Apache Kudu committer & PMC的?
查看>>
VC防止程序被多次运行 互斥体方法
查看>>
C#调用API(User32.dll),mouse_event函数详解。
查看>>
Installing/Configuring PuTTy and Xming
查看>>
操作符---part2
查看>>
angular2.0学习笔记5.关于组件
查看>>
第四次作业测试代码+018+李滨
查看>>
例题3-4 master-mind hints
查看>>
Quartz.NET 前一次任务未执行完成时不触发下次的解决方法
查看>>
LOJ#6045. 「雅礼集训 2017 Day8」价(最小割)
查看>>
nested friend
查看>>
【Oracle】SQL学习笔记1---基本概念及SELECT语句及提取和排序数据
查看>>
Codeforces 260D - Black and White Tree
查看>>
python开发部署时新增数据库中表的方法
查看>>
JS实现动画方向切换效果(包括:撞墙反弹,暂停继续左右运动等)
查看>>
VScode运行
查看>>
从零开始学架构二 架构设计流程
查看>>