Mybatis关联映射;Mybatis注解
Mybatis关联映射
Mybatis关联映射的用途:
在实际的开发过程中,对于数据库的操作除了单表外往往会涉及到多张表,这些操作在面向对象中就涉及到了对象与对象之间的关联关系。针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关系。
关联关系的种类:
在关系型数据库中,多表之间存在着三种关联关系,分别为一对一(1:1)、一对多(1:N)和多对多(M:N)。
一对一(1:1):在任意一方引入对方主键作为外键。
一对多(1:N):在“多”的一方,添加“一”的一方的主键作为外键。
多对多(M:N):产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键。
在java中也可以通过对象进行关联关系的描述
一对一(1:1):在本类中定义对方类型的对象
一对多(1:N):一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a
多对多(M:N):在A类中定义B类类型的集合,在B类中定义A类类型的集合
一对一的关联关系:
<resultMap> 元素表示的是结果映射集,是 MyBatis 中最重要也是最强大的元素,主要是用来定义映射规则、级联的更新以及定义类型转化器等。
而在<resultMap>元素中,包含了一个<association>子元素,MyBatis就是通过该元素来处理一对一关联关系的。
在<association>子元素中可以配置以下属性:
Property:指定映射到的实体类对象属性,与表字段一一对应
Column:指定表中对应的字段
javaType:指定映射到实体对象属性的类型
Select:指定引入嵌套查询的子SQL语句,该属性用于关联映射中的嵌套查询
fetchType:指定在关联查询时是否启用延迟加载。
MyBatis加载关联关系对象的两种方式:
嵌套查询:嵌套查询是通过执行另外一条SQL映射语句来返回预期的复杂类型
嵌套结果:嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集
二者的区别:
嵌套查询 |
嵌套结果 |
嵌套查询是在查询 SQL 后再进行一个(子)查询 |
嵌套结果是一个多表查询的 SQL 语句 |
会执行多条 SQL 语句 |
只有一条复杂的 SQL 语句(多表连接) |
SQL语句编写较为简单 |
SQL语句编写较为复杂 |
嵌套查询的方式比较简单,但嵌套查询的方式要执行多条SQL语句,这种方式对于大型数据集合和列可能会导致成百上千条关联的SQL语句被执行,极大的消耗数据库性能并降低查询效率。
解决方法:MyBatis的延迟加载在一定程度上可以降低运行消耗并提高查询效率。因为在MyBatis默认没有开启延迟加载所以需要在核心配置文件中添加一些配置。如下图:
使用<association>元素进行一对一关联映射配置
嵌套查询:
<association property="card" column="card_id"
javaType="com.itheima.po.IdCard" select="com.itheima.mapper.IdCardMapper.findCodeById" />
嵌套结果:
<association property="card" javaType="com.itheima.po.IdCard">
<id property="id" column="card_id" />
<result property="code" column="code" />
</association>
一对多的关联关系:
同样在<resultMap>元素中,包含了一个<collection>子元素,MyBatis通过该元素来处理一对多关联关系。
<collection>子元素的属性与<association>元素大致相同,但<collection>包含一个特殊属性ofType,它用于指定实体对象中集合类属性所包含的元素类型。
配置:
嵌套查询:
<collection property="ordersList" column="id" ofType="com.itheima.po.Orders"
select=" com.itheima.mapper.OrdersMapper.selectOrders" />
嵌套结果:
<collection property="ordersList" ofType="com.itheima.po.Orders">
<id property="id" column="orders_id" />
<result property="number" column="number" />
</collection>
Mybatis注解
MyBatis的注解方式就是将SQL语句直接写在接口上。
MyBatis注解SQL中,最基本的是@Select、@Insert、@Update、@Delete这四种。
MyBatis注解
优点:对于需求比较简单的系统,效率高。
缺点:当SQL有变化时都需要重新编译代码
@Select注解:实现查询功能
@Select("Select * from user")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(column = "name", property = "name"),
@Result(column = "sex", property = "sex"),
@Result(column = "age", property = "age")
})
List<User> queryAllUser();
@Insert注解:实现插入功能
@Insert("insert into user(name,sex,age) values(#{name},#{sex},#{age}")
int saveUser(User user);
@Update注解:实现更新功能
@Update("update user set name= #{name},sex = #{sex},age =#{age} where id = #{id}")
void updateUserById(User user);
@Delete注解:实现删除功能
@Delete("delete from user where id =#{id}")
void deleteById(Integer id);
Mybatis关联映射;Mybatis注解相关推荐
- MyBatis关联映射例题
在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍.模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题 ...
- MyBatis 关联映射
在实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系.针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关 ...
- 三分钟带你了解mybatis关联映射(案例分析一对一,多对多)
------------------------------------------------原创不易,如若喜欢,请点一点赞吧!----------------------------------- ...
- MyBatis关联映射:一对一、一对多
一.一对一 场景:生活中每一个人都有一个身份证,这是最简单的一对一的关系. (1)用户表 (2)身份证表 (3)用户实体对象,com.xuliugen.mybatis.demo.bean.User ( ...
- MyBatis 3(4)关联映射:一对一,一对多
MyBatis 关联映射 MyBatis 中对一对一,一对多的关联映射关系的配置方式是比较简单的,只需要在 XML 实体映射文件中进行相应的简单配置即可: 以下完整示例代码地址:https://git ...
- MyBatis的关联映射之 一对一(嵌套查询/嵌套结果)
关联映射概述 在实际的开发中,对数据库的操作常常会涉及多张表,这在面向对象中就涉及了对象与对象之间的关联关系 针对多表之间的操作, MyBatis 提供了关联映射,通过关联映射就可以很好地处理对象与对 ...
- 第4章 MyBatis的关联映射和缓存机制
目录/Contents 第4章 MyBatis的关联映射和缓存机制 学习目标 了解数据表之间的三种关联关系 了解对象之间的三种关系 熟悉关联关系中的嵌套查询和嵌套结果 掌握一对一关联映射 掌握一对多关 ...
- Mybatis注解实现一对多关联映射(@Many)
mybatis注解实现一对多关联映射 @Select("<script> \n" +"\t\tselect a.*,p.punishment_money, p ...
- MyBatis使用resultMap自定义映射规则与关联映射
一.写在前面 在MyBatis 的全局配置文件中我们可以通过在settings标签中设置 <setting name="mapUnderscoreToCamelCase" v ...
最新文章
- linux mysql 1045 错误_Linux 下,mysql数据库报无法登陆错误:ERROR 1045 (28000): Access denied for use...
- Java 8系列之重构和定制收集器
- 牛客 - 点对最大值(树的直径)
- sprintboot 配置文件上传大小(默认是1MB)
- 查询链接服务器信息,如何通过 SQL Server 链接服务器和分布式查询使用 Excel
- 数据结构之树与二叉树的应用:哈夫曼树(最优二叉树)
- 配图做设计、找图找灵感交给素材路SUCAI63
- java单例模式 三种_三种java单例模式概述
- 【路径规划】基于matlab改进的遗传算法栅格地图路径规划【含Matlab源码 525期】
- IDM下载器插件 让浏览器不在限速
- graphx项目实战 — 航班飞行网图分析
- 20212022最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)、前端面试题大全、前端进阶必知必会知识点1
- Docker进阶实战
- OpenStack资源整理(转自陈沙克)
- Holt-Winters 季节方法
- 2021-10-11 今日总结
- Git 每次提交都需要输入密码
- Kaprekar constant(卡普雷卡尔黑洞)
- 【STM32存储器映射-寄存器基地址-偏移】
- COGS1487 麻球繁衍