B056-Mybatis增强

目录

      • 域对象(domain)之间的关系
        • A 表结构上是如何设计关系的
        • B 实体对象上是如何设计关系的
        • 回顾多表查询
      • 结果映射
        • 多对一/一对一
          • Domain
            • Department
            • Employee
          • Mapper
            • EmployeeMapper
            • EmployeeMapper_嵌套结果.xml(推荐使用)
            • EmployeeMapper_嵌套查询.xml
          • Many2OneTest
        • 一对多
          • domain
            • Department
            • Employee
          • mapper
            • DepartmentMapper
            • DepartmentMapper_嵌套查询.xml(建议使用)
            • DepartmentMapper_嵌套结果.xml
          • One2ManyTest
      • 缓存

域对象(domain)之间的关系

关系:java对象之间的关系
分类:1. 一对多,2. 多对一,3. 一对一,4. 多对多,

A 表结构上是如何设计关系的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

B 实体对象上是如何设计关系的

在这里插入图片描述

回顾多表查询

先查出宽表,取别名,然后做自定义映射
在这里插入图片描述

结果映射

为什么要使用结果映射
原因一:解决表字段名和对象属性名不一样的情况.
原因二:关联对象查询,在mybatis不会默认查询出来,需要自己查询结果并且通过resultMap来配置

关联映射处理方式
嵌套查询和嵌套结果
在这里插入图片描述

多对一/一对一

Domain
Department
@Data
public class Department {private Long id;private String name;
}
Employee
@Data
public class Employee {private Integer id;private String name;/*在多对一种:通过对象引用来表明关系*/private Department dept;
}
Mapper
EmployeeMapper
public interface EmployeeMapper {List<Employee> loadAll();
}
EmployeeMapper_嵌套结果.xml(推荐使用)
   <!-- 这是我们自定义的结果集映射规则,如果我们使用自定义映射,那么所有我们想要的对象属性都得做手动匹配 --><resultMap id="employeeMap" type="cn.itsource.many2one.domain.Employee"><!--id:主键       property:Employee对象里的属性     column:宽表列名--><id property="id" column="id"/><!--除开主键之外的普通属性外层用result--><result property="name" column="name"/><!--association:绑定一个对象  javaType:申明引用属性的类型--><association property="dept" javaType="cn.itsource.many2one.domain.Department"><id property="id" column="did"/><result property="name" column="dname"/></association></resultMap><!--resultMap 我们自定义的结果集映射,作用:用来绑定对应引用属性值的--><select id="loadAll" resultMap="employeeMap">SELECTe.*,d.id did,d.NAME dnameFROMemployee eJOIN department d ON e.dept_id = d.id</select>
EmployeeMapper_嵌套查询.xml
    <!-- 这是我们自定义的结果集映射规则,如果我们使用自定义映射,那么所有我们想要的对象属性都得做手动匹配 --><resultMap id="employeeMap" type="cn.itsource.many2one.domain.Employee"><!--id:主键       property:Employee对象里的属性     column:宽表列名--><id property="id" column="id"/><!--除开主键之外的普通属性外层用result--><result property="name" column="name"/><!-- association:绑定一个对象     column:外层sql查询出来的列名     select:指明要使用的sql--><association property="dept"column="dept_id"select="cn.itsource.many2one.mapper.EmployeeMapper.loadDeptById"javaType="cn.itsource.many2one.domain.Department"></association></resultMap><!--1.查询出员工数据--><select id="loadAll" resultMap="employeeMap">SELECT * from employee</select><!--2.根据员工表中的dept_id 查询出部门数据--><select id="loadDeptById" parameterType="long" resultType="cn.itsource.many2one.domain.Department">SELECT * from department where id = #{id}</select>
Many2OneTest
    @Testpublic void testMany2One() {//1.获取连接SqlSession session = MybatisUtil.getSession();//2.得到mapper对象EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);//3.执行操作mapper.loadAll().forEach(a -> {System.out.println(a);});//4.释放资源session.close();}

一对多

domain
Department
@Data
public class Department {private Long id;private String name;/*在一对多中:通过集合引用属性来表明关系*/private List<Employee> employees;
}
Employee
@Data
public class Employee {private Long id;private String name;
}
mapper
DepartmentMapper
public interface DepartmentMapper {List<Department> loadAll();
}
DepartmentMapper_嵌套查询.xml(建议使用)
	<!-- 这是我们自定义的结果集映射规则,如果我们使用自定义映射,那么所有我们想要的对象属性都得做手动匹配 --><resultMap id="departmentMap" type="cn.itsource.one2many.domain.Department"><!--id:主键       property:Department对象里的属性     column:宽表列名--><id property="id" column="id"/><!--除开主键之外的普通属性外层用result--><result property="name" column="name"/><!--collection:对应多个对象  ofType:申明集合引用属性类型--><collection property="employees"column="id"select="loadEmpsByDeptId"ofType="cn.itsource.one2many.domain.Employee"></collection></resultMap><!--resultMap 我们自定义的结果集映射,作用:用来绑定对应引用属性值的--><select id="loadAll" resultMap="departmentMap">select * from department</select><!--通过部门ID查询出部门下的员工--><select id="loadEmpsByDeptId" parameterType="long" resultType="cn.itsource.one2many.domain.Employee">select * from employee where dept_id = #{id}</select>
DepartmentMapper_嵌套结果.xml
    <!-- 这是我们自定义的结果集映射规则,如果我们使用自定义映射,那么所有我们想要的对象属性都得做手动匹配 --><resultMap id="departmentMap" type="cn.itsource.one2many.domain.Department"><!--id:主键       property:Department对象里的属性     column:宽表列名--><id property="id" column="did"/><!--除开主键之外的普通属性外层用result--><result property="name" column="dname"/><!--collection:对应多个对象  ofType:申明集合引用属性类型--><collection property="employees" ofType="cn.itsource.one2many.domain.Employee"><id property="id" column="id"/><result property="name" column="name"/></collection></resultMap><!--resultMap 我们自定义的结果集映射,作用:用来绑定对应引用属性值的--><select id="loadAll" resultMap="departmentMap">SELECTe.*,d.id did,d.NAME dnameFROMemployee eJOIN department d ON e.dept_id = d.id</select>
One2ManyTest
    @Testpublic void testOne2Many() {//1.获取连接SqlSession session = MybatisUtil.getSession();//2.得到mapper对象DepartmentMapper mapper = session.getMapper(DepartmentMapper.class);//3.执行操作mapper.loadAll().forEach(a -> {System.out.println(a);});//4.释放资源session.close();}

缓存

在这里插入图片描述

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

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

相关文章

c刷题(二)

目录 加减混合运算 计算n的k次方 计算非负整数各位之和 字符串逆序 双指针 递归 矩阵计算 矩阵转置 加减混合运算 题目&#xff1a;计算1 / 1 - 1 / 2 1 / 3 - 1 / 4 1 / 5 …… 1 / 99 - 1 / 100 的值&#xff0c;打印出结果。 一般情况我们可以写个循环然后在用条…

【讯飞星火认知大模型】大模型之星火手机助理

目录 1. 讯飞星火认知大模型介绍 2. API 申请 3. 星火手机助理 4. 效果展示 1. 讯飞星火认知大模型介绍 讯飞星火认知大模型是科大讯飞自研的基于深度学习的自然语言处理模型&#xff0c;它可以理解和生成中文&#xff0c;执行多种任务&#xff0c;如问答、翻译、写作、编…

批量翻译多个文件夹,让你的文件管理更智能高效!

大家好&#xff01;对于经常需要管理大量文件夹的你来说&#xff0c;每次手动逐个改名实在是一项繁琐且易出错的工作。现在&#xff0c;我们为你带来一款强大的文件夹批量改名工具&#xff0c;让你能够轻松实现多个文件夹的批量翻译&#xff0c;让你的文件管理更智能高效 第一…

【数学建模】--聚类模型

聚类模型的定义&#xff1a; “物以类聚&#xff0c;人以群分”&#xff0c;所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计&#xff0c;分析或预测&#xff1b;也可以探究不…

AI抠图使用指南:Stable Diffusion WebUI Rembg实用技巧

抠图是图像处理工具的一项必备能力&#xff0c;可以用在重绘、重组、更换背景等场景。最近我一直在探索 Stable Diffusion WebUI 的各项能力&#xff0c;那么 SD WebUI 的抠图能力表现如何呢&#xff1f;这篇文章就给大家分享一下。 安装插件 作为一个生成式AI&#xff0c;SD…

centos7 安装 docker 不能看菜鸟教程的 docker 安装,有坑

特别注意 不能看菜鸟教程的 docker 安装&#xff0c;有坑 如果机器不能直接上网&#xff0c;先配置 yum 代理 proxyhttp://172.16.0.11:8443 配置文件修改后即刻生效&#xff0c;再执行 yum install 等命令&#xff0c;就可以正常安装软件了。 参考 https://blog.csdn.net/c…

从零实战SLAM-第二课(SLAM中的基础数学)

空间数据的表达方式&#xff1a;点和向量两种形式。 向量的内积&#xff0c;也叫做点乘&#xff0c;是逐点相乘后累加&#xff0c;最终结果是一个标量&#xff0c;物理意义是一个向量在另一个向量上的投影。 外积&#xff0c;也叫做叉乘&#xff0c;两个向量拼起来成&#xff0…

逆向破解学习-登山赛车

试玩 课程中的内容 Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage;public class HookComYoDo1SkiSafari2TXYYB_01 extends HookImpl{Overridepublic String p…

JSON.stringify循环引用问题

前端使用到对象的深度复制通常会简单的使用JSON.parse(JSON.stringify(obj))实现 &#xff08;浅表复制会用Array.from、Object.assign、Object.create静态方法实现&#xff09;&#xff0c;但在对象存在循环引用的情况下&#xff08;比如&#xff1a;树结构中子对象存在parent…

Linux进程管理命令

一、进程 程序由一条条指令构成&#xff0c;在运行一个程序的时候就是把这些指令从第一条执行到最后一条&#xff0c;而进程是一个正在运行的程序。 比如说&#xff0c;一个main.c文件是不可以直接运行的&#xff0c;对main.c进行编译链接之后生成一个main.exe&#xff08;在W…

CEC2013(MATLAB):遗传算法(Genetic Algorithm,GA)求解CEC2013的28个函数

一、遗传算法GA 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任…

网络原理(JavaEE初阶系列11)

目录 前言&#xff1a; 1.网络原理的理解 2.应用层 2.1自定义协议的约定 2.1.1确定要传输的信息 2.1.2确定数据的格式 3.传输层 3.1UDP 3.1.1UDP报文格式 3.2TCP 3.2.1确认应答 3.2.2超时重传 3.2.3连接管理 3.2.3.1三次握手 3.2.3.2四次挥手 3.2.4滑动窗口 3.…