34.Mybatis-plus延续

news/2025/2/6 8:43:04/

一、Mybatis-Plus。

(1)ActiveRecord。

简介:ActiveRecord 是一种常见的设计模式之一。ActiveRecord 是一种面向对象的数据库操作模式,它将数据库表映射为类,将表中的行映射为对象。在 ActiveRecord 模式中,每个类都对应了数据库中的一张表,而每个实例则代表了该表中的一行数据。通过这种方式,可以直接在实例上调用增删改查方法,来完成与数据库的交互。 

注意:虽然在使用 Model 类中的方法时不需要显式地调用 UserMapper 接口或其他 Mapper 接口的方法,但是这些接口仍然是 Model 类方法底层实现所必需的,不能删除。

@Testpublic void testSelectById() {User user = new User();user.setId(2L);User user1 = user.selectById();System.out.println(user1);}@Testpublic void testInsert() {User user = new User();user.setUserName("liubei");user.setPassword("123456");user.setAge(30);user.setName("刘备");user.setMail("liubei@itcast.cn");//调用AR的insert方法进行插入数据boolean insert = user.insert();System.out.println("result => "+insert);}@Testpublic void testUpdateById() {User user = new User();user.setId(13L);//查询条件user.setAge(31);//更新数据boolean result = user.updateById();System.out.println("result => "+result);}@Testpublic void testDelete() {User user = new User();user.setId(13L);boolean delete = user.deleteById();System.out.println("result => "+delete);}@Testpublic void testSelect() {User user = new User();QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.ge("age",30);//大于等于30岁的用户查询出来List<User> userList = user.selectList(wrapper);for (User user1 : userList) {System.out.println(user1);}}

(2)Oracle 主键Sequence。( 没学过oracle,了解即可)

(3)插件。

(3.1) MybatisPlusInterceptor插件主体。

(3.2)mybatis的插件机制。

如果默认支持的拦截器无法满足特定的需求时,也可以在 Executor、ParameterHandler、ResultSetHandler 和 StatementHandler 接口的实现类中编写自定义的方法,并通过拦截器进行拦截和增强。但是这样做需要开发者具备较高的 MyBatis 以及 Java 技术水平以及对 SQL 执行细节的理解。 

package mp.plugins;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import java.util.Properties;
@Intercepts({@Signature(type= Executor.class,method = "update",args = {MappedStatement.class,Object.class})})
public class MyInterceptor implements Interceptor {@Override//执行1次public Object intercept(Invocation invocation) throws Throwable {//拦截方法,具体业务逻辑编写的位置return invocation.proceed();}@Override//执行了四次,分别拦截了:Executor、ParameterHandler、ResultSetHandler、StatementHandler这四个对象public Object plugin(Object target) {//创建target对象的代理对象,目的是将当前拦截器加入到该对象中return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {//属性设置}
}

(3.3)防全表更新与删除插件。

注意:该插件仅适用于开发环境,不 适用于生产环境。 

注意!

  • 多个插件使用的情况,请将分页插件放到 插件执行链 最后面。如在租户插件前面,会出现 COUNT 执行 SQL 不准确问题。
@Configuration
@MapperScan("mp.mapper") //设置mapper接口的扫描包
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//这里是添加分页查询的拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//这里是添加阻止恶意的全表更新删除的拦截器interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());return interceptor;}//注入自定义的拦截器(插件)@Beanpublic MyInterceptor myInterceptor(){return new MyInterceptor();}
}

(3.4)性能插件(在 Mybatis-Plus 3.4.0 版本中被官方废弃)。

注意:该插件只用于开发环境,不建议生产环境使用。 

1、PerformanceInterceptor 类在 Mybatis-Plus 3.4.0 版本中被官方废弃。原因是该拦截器会在每次 SQL 执行时都输出一些日志信息,对性能会有一定的消耗。

2、官方建议使用 p6spy 或者其他 SQL 监控工具来监控 SQL 执行效率,以替代 PerformanceInterceptor

3、如果您仍然希望在项目中使用 PerformanceInterceptor,可以将其版本锁定在 Mybatis-Plus 3.3.2 及以下版本。

(3.5)乐观锁插件。

mybatis的核心xml: 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><plugins><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor"><property name="@page" value="com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor"/></plugin></plugins>
</configuration>

 springboot:

@Configuration
@MapperScan("mp.mapper") //设置mapper接口的扫描包
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//这里是添加分页查询的拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//这里是添加阻止恶意的全表更新删除的拦截器interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());//配置乐观锁interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;}//注入自定义的拦截器(插件)@Beanpublic MyInterceptor myInterceptor(){return new MyInterceptor();}
}

<bean class="com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor" id="optimisticLockerInnerInterceptor"/><bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor"><property name="interceptors"><list><ref bean="optimisticLockerInnerInterceptor"/></list></property>
</bean>


http://www.ppmy.cn/news/100520.html

相关文章

WiFi 6 vs WiFi 5

在现代无线通信领域&#xff0c;WiFi已经成为人们日常生活中不可或缺的一部分。随着技术的不断发展&#xff0c;WiFi标准也在不断更新和演进。WiFi 6&#xff08;802.11ax&#xff09;和WiFi 5&#xff08;802.11ac&#xff09;是当前两个主要的WiFi标准。 本文将详细介绍WiFi …

VMware Workstation17下载安装、环境搭建、网络配置最小化安装操作步骤

一、VMware Workstation17下载安装 1、官网下载 官网网址&#xff1a;https://www.vmware.com/cn/products/workstation-pro.html 安装Workstation 17 Pro for Windows版本 2、进行安装 点击下一步&#xff0c;进入最终用户许可协议界面后&#xff0c;点击接受&#xff0c;继…

前端项目搭建以及项目配置

前端项目搭建 - vitevue3.0ant vite比起webpack速度更快 vite搭建项目 https://cn.vitejs.dev/ 步骤&#xff1a; 1.打开cmd 2.找到项目应该建的文件夹 比如直接建到桌面上 cd desktop3.创建项目 使用创建项目命令&#xff0c;然后根据提示填写项目名称&#xff0c;以及要…

Lucene基础学习

一、基础知识 1.Lucene简介 2.入门实例 3.内建Query对象 4.分析器Analyzer 5.Query Parser 6.索引 7.排序 8.过滤 9.概念简介 10.Lucene入门实例 二、Lucene的基础 三、索引建立 1.lucene索引_创建_域选项 2.lucene索引_的删除和更新 3.lucene索引_加权操作和Luke的简单演示…

Maven学习笔记(单一架构案例)22版

第一节 创建工程&#xff0c;引入依赖 1 架构 ①架构的概念 『架构』其实就是『项目的结构』&#xff0c;只是因为架构是一个更大的词&#xff0c;通常用来形容比较大规模事物的结构。 ②单一架构 单一架构也叫『all-in-one』结构&#xff0c;就是所有代码、配置文件、各种…

Python列表推导

列表推导式 列表推导式创建列表的方式更简洁。常见的用法为&#xff0c;对序列或可迭代对象中的每个元素应用某种操作&#xff0c;用生成的结果创建新的列表&#xff1b;或用满足特定条件的元素创建子序列。 例如&#xff0c;创建平方值的列表&#xff1a; squares [] for …

【C++】函数 - 定义,调用,值传递,常见样式,声明,分文件编写

文章目录 1. 函数的定义2. 函数的调用3. 值传递4. 常见的样式5. 函数的声明6. 函数的分文件编写 所谓数组&#xff0c;就是一个集合&#xff0c;里边存放了相同类型的数据元素。 特点1&#xff1a;数组中的每个数据元素都是相同的数据类型 特点2&#xff1a;数组是由连续的内存…

sql的各种排序(order by加asc或者desc、order by加field()加asc或者desc)

sql的各种排序&#xff08;order by加asc或者desc、order by加field()加asc或者desc&#xff09; 1.单字段排序&#xff1b; 【order by】排序&#xff1a;order by后面跟着的字段就是数据的排序字段&#xff1b; &#xff08;1&#xff09;升序排序&#xff1b; 举例&#x…