在开发过程中单表查询往往不能满足需求分析的很多功能,对于比较复杂业务来说,关联的表有几个,甚至是几十个并且表与表之间的关联相当复杂。为了能够实现复杂的功能业务,就必须进行多表查询,Mybatis作为流行的Java持久化框架,提供了灵活而强大的多表查询映射功能,可以实现表之间的一对一、一对多、多对多关系的映射。
在学数据库概论的时候会听到这么几个词:数据库的关系分为一对一、一对多、多对多。对于在学校里学的知识已经忘得差不多了,在这里简单的提一下数据库的关系。此篇是介绍MyBatis是如何实现数据库中一对一关系的,我们就暂且先介绍一对一关系。所谓一对一关系其实在生活中很常见,比如一个学生有且只对应一个属于他的学生证。下面就是我们的所假设的数据库物理模型。 image.png 在这个数据库模型中,学生证和学生表是1对1的关系。那么基于此,我们会在Java代码的POJO包中就会有两个POJO对象,Student和Sel
在上面我们已经准备好了 sql 表结构,在 sql 中具有 一对一、一对多、多对多 三种关系。而如果在 mybatis 的角度来看,却只有 一对一、一对多 两种关系,这是为什么呢?
在数据库设计中,经常会遇到需要在两个表之间建立关联关系的情况。一对一关联查询是其中一种常见的需求,它允许我们在两个表之间建立一对一的关系,以便在查询时将相关数据合并在一起。在本篇博客中,我将介绍如何使用 MyBatis 实现一对一关联查询,并详细讨论多种实现方式。
上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证。那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系。我们结合上一章中的学生和学生证,在此基础
1、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
#{}和${}的区别 #{}是预编译处理,${}是字符串替换。 Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; Mybatis
不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复;毕竟namespace不是必须的,只是最佳实践而已。
有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配置 association节点配置一对一的类就可以完成;
在关系型数据库中,多表之间存在着三种关联关系,分别为一对一、一对多和多对多,如下图所示:
(3)用户实体对象,com.xuliugen.mybatis.demo.bean.User
注解开发是指在Java程序中使用注解来完成某些特定的功能,例如配置、路由、日志、权限等。注解是一种特殊的标记,它可以在编译期或运行期被解析并执行相应的操作。注解开发可以提高代码的可读性、可维护性和可扩展性,使代码更加清晰简洁。同时,注解开发也是现代框架和技术的重要组成部分,例如Spring、Hibernate、JUnit等都广泛使用注解来实现各种功能。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136707.html原文链接:https://javaforall.cn
5、Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
接《MyBatis+Spring MVC开发指南(一)》,本篇博客将涵盖MyBatis高级映射(一对一,一对多、多对多)、延迟加载、缓存原理分析(一级缓存、二级缓存)、MyBatis和Spring的整合、逆向工程等主题。
在上一篇中我们已经基本认识了 MyBatis 的多表查询了。那么 MyBatis 还有一个比较有意思的功能,就是 嵌套查询。 这个功能有些类似 SQL 的多表联合查询,但是又不是。下面我们来认识一下。
MyBatis是基于Java的一款优秀的ORM框架,提供了多种映射配置方式,并且支持各种形式的关联查询。在MyBatis中,一对一关系指的是一个数据库表中的某个字段在另一张表中也有对应的唯一值。如果你是一位Java小白,那么接下来讲解如何使用MyBatis完成一对一关系的映射。
可以通过关联查询实现。关联查询是几个表联合查询,只查询一次,通过在resultMap里面的association,collection节点配置一对一,一对多的类就可以完成
我们在查询业务数据的时候经常会遇到关联查询的情况,比如查询员工就会关联部门(一对一),查询学生成绩就会关联课程(一对一),查询订单就会关联商品(一对多),等等。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51578010
这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper
一、一对一映射查询: 第一种方式(手动映射):借助resultType属性,定义专门的pojo类作为输出类型,其中该po类中封装了查询结果集中所有的字段。此方法较为简单,企业中使用普遍。 1 <
resultMap 可以将查询到的复杂数据,比如多张表的数据、一对一映射、一对多映射等复杂关系聚合到一个结果集当中。日常的业务开发通常都会和它打交道,今天就对 resultMap 进行一个详细讲解。文末有 DEMO
1、Mybatis实现了接口绑定,使用更加方便。 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。 这可以说是Mybatis最重要的改进。
相信对mybatis/ibatis熟悉的小伙伴对这两个词汇一定特别熟悉,Collection是用来处理一对多的查询,Association是用来解决一对一的解决,这是大家对这俩词汇的理解,为什么我今天还要说这两者呢,因为我发现其实两者之间区别不是一对一与多对一的区别,只是在形式上一种区分而已,我用的mybatis是3.2.6版本,请看下面代码。
实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系。
1.什么是延迟加载 在真正需要使用数据时才发起查询,不用的时候不进行查询。按需加载(懒加载) 2. 什么是立即加载 不管用不用,只要一调用方法,马上发起查询。
使用自动映射就是通过别名让MyBatis自动将值匹配到对应的子弹上,简单的别名映射如user_name 对应userName .
2、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
(1)创建扩展PO类 一般User.java类要和数据表表字段一致,最好不要在这里面添加其他字段,今天学习mybatis的逆向工程时,会根据表结构,生成po类,如果在po类中扩展字段,此时会被覆盖掉。 所以针对要扩展的po类,我们需要创建一个扩展类,来继承它。
(1) Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写生态 sql,可以严格控制sql 执行性能,灵活度高。 (2) MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 (3) 通过 xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql语句,最后由 mybatis 框架执行 sql 并将结果映射为 java对象并返回。
当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 第 1 种:通过在查询的 sql 语句中定义字段名的别名,让字段名的别名和实体类 的属性名一致
答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。
答:{}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如{driver}会被静态替换为com.mysql.jdbc.Driver。
原文:http://www.java520.cn/mybatis/146.html
2.在MyBatis中针对不同的数据库软件,<insert>元素如何将主键回填?
1、#{}和${}的区别是什么? ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc
MyBatis多表查询 0. 分析 一对一 一个用户只能拥有一个一个账户 sql语句: select u.*,a.id as aid,a.uid,a.money from account a,user u where a.uid =u.id; 📷 一对多 一个用户可以拥有多个账户 sql语句 select u.*,a.id as aid ,a.uid,a.money from user u left outer join account a on u.id =a.uid 📷 多对多
修改MyBatis的核心配置文件,我们使用了注解替代的映射文件,所以我们只需要加载使用了注解的Mapper接口即可
16、Xml映射文件中,除了常见的 select|insert|updae|delete标签之外,还有哪些标签?
MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓
单标的CRUD操作,主要根据业务如何编写高质量的SQL语句.单标操作的时候如果表中的列和实体的属性不对应的时候,建议使用别名方式进行影射处理.
答:还有很多其他的标签,<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态 sql 的 9 个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中为 sql 片段标签,通过<include>标签引入 sql 片段,<selectKey>为不支持自增的主键生成策略标签。
使用 #{arg0}-#{argn} 或者 #{param1}-#{paramn} 获取参数
注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方式:指定实体类的全限定类名
MyBatis的XML动态SQL相信大家不陌生了,本文主要讲解一些比较容易出错、忘记,比较冷门的写法。
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
Mybatis 技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用 Mybatis 的文章,所以,一些参数使用细节略掉了,我们的目标是介绍 Mybatis 的技术架构和重要组成部分,以及基本运行原理。
领取专属 10元无门槛券
手把手带您无忧上云