阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MyBatis注解(多表)

429次阅读
没有评论

共计 3865 个字符,预计需要花费 10 分钟才能阅读完成。

1、多表关系映射说明

1.1、一对一

@One 注解(一对一)

代替了标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。

@One 注解属性介绍:

select 指定用来多表查询的 sqlmapper

fetchType 会覆盖全局的配置参数 lazyLoadingEnabled

使用格式:

@Result(column=”“,property=””,one=@One(select=””))

1.2、一对多

@Many 注解(多对一)

代替了 标签, 是是多表查询的关键,在注解中用来指定子查询返回对象集合。

使用格式:

@Result(property=””,column=””,many=@Many(select=””))

注意:

聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType(一般为 ArrayList)但是注解中可以不定义;

2、一对一

2.1、需求分析

查询学生信息,加载该学生的班级信息

2.2、编写 Classes.java 文件

import java.io.Serializable; public class Classes implements Serializable {private int cid; private String cname; public int getCid() {return cid; } public void setCid(int cid) {this.cid = cid; } public String getCname() {return cname; } public void setCname(String cname) {this.cname = cname; } @Override public String toString() {return "Classes{" + "cid=" + cid + ", cname='" + cname + '\'' + '}'; } }

2.3、修改 Students.java 文件

private Classes classes; public Classes getClasses() {return classes; } public void setClasses(Classes classes) {this.classes = classes; }

2.4、修改 IStudentsDao.java 文件

@Select("select sid,sname,ssex,sage,cid as c_id from students") @Results(id="studentsMap1",value={@Result(id=true,column = "sid",property = "sid"), @Result(column = "sname",property = "sname"), @Result(column = "ssex",property = "ssex"), @Result(column = "sage",property = "sage"), @Result(column = "c_id",property = "cid"), @Result(column = "c_id",property = "classes", one=@One(select = "com.tianyi.dao.IClassesDao.findById",fetchType = FetchType.EAGER)) }) List<Students> findAll1();

2.5、编写 IClassesDao.java 文件

import com.tianyi.javabean.Classes; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; public interface IClassesDao {@Select("select * from classes where cid=#{cid}") @Results(id="classesMap",value={@Result(id=true,column = "cid",property = "cid"), @Result(column = "cname",property = "cname") }) Classes findById(int cid); }

2.6、修改 MbStudentsTest.java 测试类

@Test public void findAll1(){List<Students> list=studentsDao.findAll1(); for (Students s:list) {System.out.println(s); //System.out.println(s+":"+s.getClasses()); } }

3、一对多

3.1、需求分析

完成班级表与学生表的一对多的关系,查询出班级的信息和学生信息,学生信息只有在需要的时候才会显示。

3.2、编写 Classes.java 文件

private List<Students> studentsList; public List<Students> getStudentsList() {return studentsList; } public void setStudentsList(List<Students> studentsList) {this.studentsList = studentsList; }

3.3、编写 IClassesDao.java 文件

@Select("select * from classes") @Results(id="classesMap1",value={@Result(id=true,column = "cid",property = "cid"), @Result(column = "cname",property = "cname"), @Result(column = "cid",property = "studentsList",many = @Many(select = "com.tianyi.dao.IStudentsDao.findById1",fetchType = FetchType.LAZY )) }) List<Classes> findAll();

3.4、修改 IStudentsDao.java 文件

@Select("select * from students where cid=#{cid}") Students findById1(int cid);

3.5、编写 MbClassesTest.java 文件

import com.tianyi.dao.IClassesDao; import com.tianyi.dao.IStudentsDao; import com.tianyi.javabean.Classes; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MbClassesTest {private InputStream in; private SqlSession session; private IClassesDao classesDao; @Test public void findAll(){List<Classes> list=classesDao.findAll(); for(Classes c:list){System.out.println(c); } } @Before public void init()throws IOException {in= Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); SqlSessionFactory factory=builder.build(in); session=factory.openSession(); classesDao=session.getMapper(IClassesDao.class); } @After public void destroy() throws IOException {session.commit(); session.close(); in.close();} }

4、二级缓存的开启

4.1、修改 SqlMapConfig.xml 文件

<!-- 配置二级缓存 --> <settings> <!-- 开启二级缓存的支持 --> <setting name="cacheEnabled" value="true"/> </settings>

4.2、持久层使用二级缓存

@CacheNamespace(blocking = true) public interface IClassesDao { }

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计3865字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7820452
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
Python自学26 – Cookie和Session

Python自学26 – Cookie和Session

Python 自学 26 – Cookie 和 Session 在学习 Web 开发时,Cooki...
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...