第八章 Mybatis及MybatisPlus

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 本文介绍了MyBatis系统架构流程、结果集映射、Mapper传参、XML常用配置、缓存机制及分页插件等内容,涵盖SqlSessionFactory构建、Executor执行器、一级与二级缓存原理,并对比PageHelper与MyBatis Plus分页使用方式,同时介绍MyBatis Plus常用API,助力高效开发。

1、系统架构流程

执行过程:

  1. mybatis配置

mybatis-config.xml,名称可变,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在mybatis-config.xml中加载;

  1. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂;
  2. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行;
  3. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器;
  4. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id;
  5. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数;
  6. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

2、结果集映射

在 MyBatis 中,结果集映射是指将查询数据库得到的结果集映射到 Java 对象的过程。MyBatis 提供了 XML 配置和注解两种方式来进行结果集映射。

1)使用xml的方式;则可以使用 resultTyperesultMap ;其中 resultType可以直接指定类名即可。而 resultMap可以映射更加复杂的映射关系;包括 一对一(可以使用 association )、一对多(可以使用 collection )等复杂的关联关系。

2)使用注解的方式;可以使用 @Select@Result 配合使用。

3、mapper传参

在 MyBatis 中,Mapper 接口中定义的方法可以接受参数来进行数据库操作。Mapper 方法可以接受多种类型的参数,包括基本数据类型、Java 对象、Map 等。

1、在mapper接口中的方法形参前面使用 @Param 指定名称;然后在映射文件或者@Select 注解内直接使用 #{} 或者 ${} 获取;

2、不使用 @Param ;那么直接在需要使用的sql语句中,参数的名称要写成 param1,param2。。。

3、如果传递的是一个对象或者map类型;那么在sql也可以直接使用对象或map的属性或key名称

4、xml常用配置

MyBatis 的 XML 配置文件中包含了许多常用的配置项,这些配置项可以帮助你定义映射关系、SQL 查询、参数传递等。以下是一些 MyBatis XML 配置中常用的配置:

1)数据源配置:配置连接数据库的信息,包括驱动类、URL、用户名和密码等。

2)映射器配置:指定映射器文件或映射器接口的位置。

3)类型别名配置:为 Java 类型指定别名,简化映射器文件中的使用。

4)结果映射配置:定义 SQL 查询结果与 Java 对象之间的映射关系。

5)SQL 查询配置:编写 SQL 查询语句,并指定参数类型、返回结果类型等。

6)参数传递配置:定义方法参数传递方式,可以使用基本类型、Java 对象、Map 等作为参数。

5、缓存机制

MyBatis 提供了两级缓存(Local Cache 和 Second Level Cache)来满足不同的需求。

1、Local Cache(本地缓存、一级缓存)

  • Local Cache 是指在 SqlSession 范围内的缓存,它默认开启并且无法关闭。
  • 在同一个 SqlSession 中,当执行相同的查询语句(包括参数相同)时,如果之前已经查询过相同的结果,那么会直接从本地缓存中获取数据,而不会再发送 SQL 查询到数据库。
  • Local Cache 是基于 HashMap 实现的,它仅在当前 SqlSession 中有效,并且对于不同的 SqlSession 是隔离的。

2、Second Level Cache(二级缓存)

  • Second Level Cache 是指在 Mapper 范围内的缓存,它可以跨 SqlSession 共享数据。
  • 如果开发者需要使用 Second Level Cache,需要在映射文件中进行配置。
  • 当开启了 Second Level Cache 后,同一个 namespace 下的查询结果会被缓存起来,其他 SqlSession 也可以共享这部分数据,从而减少数据库查询次数。
  • Second Level Cache 默认是关闭的,需要手动在映射文件中配置开启。

6、分页插件

MyBatis 中常见的分页插件有: PageHelperMyBatis Plus 都是用于简化分页查询操作的工具,它们能够大大简化分页查询的代码编写,并提供了丰富的分页功能。两类插件都是基于Mybatis的拦截器实现;所以需要在使用之前添加对应的拦截器。而在使用的时候:

  • PageHelper中使用的参考: `
PageHelper.startPage(页号, 页大小);
  • MybatisPlus中的使用参考:
IPage<User> userPage = userService.page(new Page<>(页号, 页大小));

7、Mybatis-Plus常用API

MyBatis Plus 是在 MyBatis 的基础上进行增强的工具,提供了丰富的 API 来简化数据访问层的开发。常见的api有如下图:

相关文章
|
11天前
|
NoSQL Java 数据库连接
第七章 SpringBoot框架
SpringBoot简化了Spring开发,核心功能包括starter起步依赖、自动配置和内嵌服务器支持。通过条件注解实现Bean的自动化加载,支持自定义starter,并提供多种外部配置方式,提升开发效率与项目可维护性。(238字)
|
11天前
|
缓存 安全 Java
第五章 Spring框架
Spring的IOC(控制反转)指将对象创建交给容器管理,DI(依赖注入)则实现对象间的依赖关系自动注入。Bean默认单例非线程安全,作用域可设为singleton、prototype等,通过@Scope注解配置。Bean生命周期包括实例化、初始化、销毁等阶段,循环依赖通过三级缓存解决,但构造函数循环依赖需@Lazy解决。AOP基于动态代理实现日志、事务等横切关注点,事务通过@Transactional注解管理,支持传播行为如REQUIRED、REQUIRES_NEW。常用注解涵盖声明、注入、配置及AOP等方面。
|
11天前
|
Java 关系型数据库 MySQL
[MES]数据库改造H2到MySQL(☆☆)
本文介绍如何运行并改造一个SpringBoot项目,包括从Gitee克隆代码、环境配置(JDK/Maven)、数据库从H2切换至MySQL等步骤,强调新人如何应对技术栈不熟、环境配置难等问题,并引导思考如何高效请教同事、快速融入团队开发。
|
11天前
|
Java 关系型数据库 MySQL
低代码平台芋道:代码本地运行(☆)
简介:本任务面向Java新人,要求掌握SpringBoot、MySQL、Maven技术栈,用2小时完成Gitee项目本地运行,并录制8分钟以上视频,结构化阐述对项目技术架构、核心功能与表关系的理解,同时提出入职困惑,提升入职适应效率。
|
11天前
|
SQL 数据库连接 数据库
03-Activity代码实现
本文介绍了基于Activiti工作流引擎的入门实践,涵盖BPMN流程创建、部署、启动实例、任务查询与完成等核心操作。通过代码示例演示了流程定义部署、运行时实例管理及任务处理全过程,并结合数据库表变化说明执行效果,帮助开发者快速掌握工作流基本开发流程。
 03-Activity代码实现
|
11天前
|
Java Maven 数据库
02-Activiti工程搭建
本教程介绍如何在Idea中创建Maven工程并安装ActiBPM插件,包含插件下载、版本兼容性修复、手动修改JAR配置及验证安装等步骤,同时引入Activiti相关依赖,完成Spring Boot项目集成流程引擎的初步搭建。
02-Activiti工程搭建
|
11天前
|
缓存
QLExpress使用及源码分析
QLExpress是阿里巴巴开源的轻量级规则引擎,支持通过注解与YAML配置实现业务逻辑与代码解耦。提供AST语法树解析、上下文构建及高效执行机制,适用于动态规则场景。GitHub地址:https://github.com/alibaba/QLExpress
|
11天前
|
Java 关系型数据库 网络安全
低代码平台RuoYi:代码本地运行(☆☆)
简介:本任务要求新入职员工掌握SpringCloud、MySQL、Maven等技术栈,通过SSH方式拉取若依(RuoYi)项目代码并本地运行。需观看文档、解决常见Git权限问题,录制不少于8分钟的视频,结构化输出对项目技术栈、核心功能、数据库关系的理解,并提出困惑,助力快速融入团队开发。
低代码平台RuoYi:代码本地运行(☆☆)
|
11天前
|
Java 开发工具 数据安全/隐私保护
项目《中州养老》
《中州养老》是一个为养老院打造的单体后台管理系统,涵盖预约、入住、健康监测等核心功能,包含员工管理端与家属小程序端。项目采用SpringBoot+Vue3技术栈,集成Redis缓存、阿里云IoT及OSS存储,实现护理等级、床位管理、智能设备监测等模块,并通过RBAC权限控制、定时任务与WebSocket报警推送,提升系统安全性与实时性。
 项目《中州养老》
|
11天前
|
数据可视化 Java 关系型数据库
01-认识Activiti
工作流指具有审批流程的业务(如请假、报销等),通过流程引擎实现可视化管理。它支持单/多节点审批,广泛应用于CRM、TMS、WMS等系统。主流技术包括BPMN、Activiti、Flowable等,推动了泛微、金蝶、用友等企业的发展。