Mybatis关联映射;Mybatis注解

mybatis执行流程、关联映射注解开发 sqlsession可以实现JDBC的connection以及mysql执行(本质操作数据库)把原来写在 Mapper.xml 里的 SQL,直接写在 DAO 接口的方法上面。这一步是 MyBatis 的初始化阶段,会解析配置文件并构建。把数据库表之间的关系 → 映射成 Java 对象之间的关系。mybatis实现目前是mapper接口+xml映射。MyBatis 首先会加载核心配置文件(获取 Mapper 接口的代理对象。)和所有 Mapper 映射文件。加注解,写 SQL 就行。 阅读详情

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 源码学习(七) —— annotations 包和 lang 包 Mybatis 的 annotations 包和 lang 包的作用 阅读详情

相关推荐

MyBatis注解开发---实现自定义映射关系和关联查询

MyBatis注解开发---使用注解实现自定义映射关系和关联查询,一对一关联查询,一对多关联查询

qq_53317005的博客 3463

MyBatisPlus(四)——常用注解

在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表。若实体类类型的类名和要操作的表的表名不一致怎么办?将表user更名为t_user,测试查询功能程序抛出异常,表不存在。......

路过Coder 3150

【硬件】LT3763中文手册

1)精确控制输入和输出电流;2) 3000:1真彩色PWM™调光;3) ±1.5%电压调节精度;4) ±6%电流调节精度;5)6V至60 V输入电压范围;6)宽输出范围最高可达55V;7)<2µA关断电流;8)用于负载电流热控制的控制引脚;9)输入和输出电流监控和限制;10)开路、短路和C/10故障检测;11)适用于LED应用的PWM驱动器输出;12)热增强型28引脚FE封装。

qq_39200110的博客 442

MyBatis注解映射

1.普通映射@Select("select * from mybatis_Student where id=#{id}") public Student getStudent(int id); @Insert("insert into mybatis_Student (name, age, remark, pic,grade_id,address_id) values (#{name},#{age...

勿忘初心的博客 3789

MyBatis快速入门(17)注解映射方式

mybatis注解方式就是将SQL语句直接写在接口上,优点是对于需求简单,SQL语句简单的系统,开发效率高,不用写xml文件。缺点是当SQL有变化时,需要从新编译代码,一般情况下,不建议使用注解方式,还是建议使用xml映射文件的方式,下面简单介绍一下注解方式。 Select注解 首先来看注解形式的查询写法: 使用注解就是在方法接口上面写增删改查四种形式的注解,并把SQL语句写在@Select注解里面,写法上和xml文件中没什么区别,关于参数上的注解,其实单个参数是不用加的,...

Blues的专栏 2735

MyBatis关联映射注解开发详解

本文系统介绍了MyBatis关联映射的实现机制和开发实践。首先阐述了数据库关联关系的三种类型(一对一、一对多、多对多)及其实现方式,重点讲解了MyBatis通过association和collection标签实现的两种关联映射方式:嵌套结果(JOIN查询)和嵌套查询(分步查询)。文章深入分析了N+1查询问题的成因及解决方案,并详细说明了延迟加载的配置与使用。最后对比了注解开发与XML方式的优缺点,提出了根据场景选择合适开发方式的建议。全文为MyBatis关联映射提供了完整的理论指导和实践参考,帮助开发者优化

alkamgg的博客 1139

JavaEE开发之MyBatis关联映射注解

JavaEE学习过程中的自我总结记录---MaBatis关联映射(一对一,一对多,多对一,多对多)、注解

weixin_46023607的博客 1097

Mybatis关联映射注解开发

一、Mybatis关联映射:以个人和身份证之间的一对一关联关系为例,对Mybatis中处理一对一关联的元素和方式进行实现。• 元素:<resultMap>的 <association> 子元素。• 方式:嵌套查询方式 和 嵌套结果方式二、Mybatis注解开发:通过注解开发的方式完成数据库表的增删改查• @Params。

2301_81704123的博客 399

Mybatis关联映射Mybatis注解

前面介绍了MyBatis的基本用法、关联映射和动态SQL等重要知识但这些知识只是针对单表实现进行操作的,在实际开发中,对数据库的操作常常会涉及到多张表,针对多表之间的操作MyBatis提供了关联映射,通过关联映射可以很好地处理表与表、对象与对象之间的关联关系。此外,在实际开发中经常需要合理地利用MyBatis缓存来加快数据库查询,进而有效地提升数据库性能。 关联映射关系: 在关系型数据库中,表与表之间存在着三种关联映射关系,分别为一对一关系、一对多关系和多对多关系。 ...

qq568023的博客 1478

Mybatis注解开发中关于动态sql、关联映射、延迟加载、二级缓存的简单应用

sjndidnsns

weixin_43353564的博客 714

mybatis基于注解的一对一和多对一的关联映射

项目准备 导入前面项目的pom文件,实体类 一对一的关联映射 实体类: public class Account implements Serializable { 在这里插入代码片 ```private Integer id; private Integer uid; private Double money; private User user; //省略了getter和setter,省略了toString } 查询账号的同时查询出账户绑定的用户信息,所以需要在账户实体

m0_45115609的博客 520

重温MyBatis(六、注解之与二:基于注解的一对一关联映射

/** * 注解配置===开始 */ @Select("select * from idcard where id = #{id}") Idcard findIdcardByIdWithAnnotations(int id); // 根据编号查询用户信息 /** * 注解配置===开始 */ @Select("select * from person where id = #{id}")

yuzhiboyouzhu的博客 184

MyBatis框架基于Annotation注解的多对多关联映射

代码: mybatis-config.xml Article.java package com.bean; impo

汉南最後の読書人 5173

MyBatis框架基于Annotation注解的一对一关联映射

代码: mybatis-config.xml Card.java package com.bean; import java.io.

汉南最後の読書人 3507

最全面的Mybatis教程,从“开局”到“通关”(二)

MyBatis 是一款优秀的半自动的ORM持久层框架,本文将从Mybatis简介,Mybatis入门,Mybatis的CRUD实现,Mybatis的配置文件,Mybatis的日志配置,resultMap详解,分页实现,注解式开发,Lombok的使用,关联映射,动态SQL,Mybatis缓存等方面对Mybatis进行详尽介绍~

小新要变强的博客 2495

重温MyBatis(六、注解之与四:基于注解的多对多关联映射

AdminInfoMapper.java的代码 public interface AdminInfoMapper { /** * 注解配置===开始 */ @Select("select * from admin_info where id = #{id}") AdminInfo findAdminInfoByIdWithAnnotations(int id); // 根据id查单表 @Select("select *

yuzhiboyouzhu的博客 345

MyBatis注解解析

场景推荐方案简单CRUD操作直接使用@Select@Insert等注解多参数查询@Param注解命名参数列名-属性名映射@Results@Result一对一/一对多关系@One@Many嵌套查询简单动态SQL<script>标签内嵌XML复杂动态SQL动态生成SQL批量操作@Flush+ BATCH 执行器存储过程调用复杂结果映射结合XML定义 resultMap需要二级缓存最佳实践原则简单优先:优先使用注解实现简单逻辑。复杂XML:动态SQL和复杂映射优先采用XML配置。

m0_75107803的博客 1498

1.1.4 mybatis关联映射注解查询

2.创建两个映射接口,一个为StudentMapper,第二个为OrdersMapper,先写后者,同一对一,就是需要@Result映射,从而可以实现List属性可以一一对应获取,最后写调用方法。而前者则是同上,id=true可以加上,就是在最后换成many=@many,一样是(),然后select填入传入的list属性,当然这里是需要column和property的属性参数,注意传出是ordersList,且是属性,不是类型。3.创建test类,同一对一。3.创建test文件,同一对多。

qq_66049340的博客 232

Mybatis教程 | 第八篇:Mybatis注解配置

Mybatis为用户提供了快速的开发方式,因为有时候大量的XML配置文件的编写时非常繁琐的,因此Mybatis也提供了更加简便的基于注解(Annnotation)的配置方式。 Mybatis注解位于org.apache.ibatis.annotations包下,常用的注解如下: 注解 说明 @Select 映射查询的SQL语句 @Insert 映射插入的SQL语句 ...

好记性不如烂笔头 4786

YOLOv13改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv13的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 824

【最新版JEDEC2025】 JESD301-A.03_0 PMIC5000 PMIC5010 Power Management IC Standard.rar

【最新版JEDEC2025】 JESD301-A.03_0 PMIC5000 PMIC5010 Power Management IC Standard.rar

林皖阮
博客等级 码龄5年 0粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值