11.框架MyBatis-Plus

news/2024/11/29 7:53:18/

一、基本概念

        MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

        导入依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.2</version>
</dependency>

二、配置

        MP配置需要覆盖MyBatis配置,具体配置查看使用配置 | MyBatis-Plus:

@Bean//MP配置
public SqlSessionFactory mybatisSqlSessionFactory(DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean factory=new MybatisSqlSessionFactoryBean();factory.setConfiguration(new MybatisConfiguration());factory.setGlobalConfig(new GlobalConfig());factory.setDataSource(dataSource);return factory.getObject();
}

三、CRUD接口

        通用 CRUD 封装 BaseMapper 接口,为 MP 启动时自动解析实体表关系映射转换为 MyBatis 内部对象注入容器。

@Mapper
public interface BookMapper extends BaseMapper<Book> {}

        通用 Service CRUD 封装 IService 接口,进一步封装 CRUD 采用 get 查询单行、list 查询集合、page 分页、remove 删除、save 添加、update 更新前缀命名方式区分 Mapper 层避免混淆。

public interface BookService extends IService<Book> {}@Service
public class BookServiceImp extends ServiceImpl<BookMapper,Book> implements BookService {}

        实体类只需继承 Model 类即可进行强大的 CRUD 操作,需要项目中已注入对应实体的BaseMapper。

@Component
public class Book extends Model<Book> {}

四、注解

        @TableName:实体类标注,标识实体类对应的表。

        @TableId:属性标注,标识主键属性。

        @TableField:属性标注,标识字段属性。

        @TableLogic:属性标注,标识逻辑删除属性。

        其他注解查看:注解 | MyBatis-Plus

五、条件构造器

        AbstractWrapper:QueryWrapper(LambdaQueryWrapper) 和UpdateWrapper (LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件。

        QueryWrapper:继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取。

        UpdateWrapper:承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取。

        具体构造方法查看:条件构造器 | MyBatis-Plus

六、插件

        MybatisPlusInterceptor:该插件是核心插件,目前代理了 Executor#query、Executor#update 和 StatementHandler#prepare 方法。

目前已有的功能:

  • 自动分页: PaginationInnerInterceptor
  • 多租户: TenantLineInnerInterceptor
  • 动态表名: DynamicTableNameInnerInterceptor
  • 乐观锁: OptimisticLockerInnerInterceptor
  • sql 性能规范: IllegalSQLInnerInterceptor
  • 防止全表更新与删除: BlockAttackInnerInterceptor
@Bean//插件
public MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;
}

        具体插件使用查看:插件主体 | MyBatis-Plus


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

相关文章

LeetCode刷题笔记 - JavaScript(四)

文章目录1.剑指 Offer 37. 序列化二叉树1.剑指 Offer 19. 正则表达式匹配剑指 Offer 37. 序列化二叉树 剑指 Offer 19. 正则表达式匹配 LCOF 1.剑指 Offer 37. 序列化二叉树 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列…

【Ajax】了解Ajax与jQuery中的Ajax

一、了解Ajax什么是AjaxAjax 的全称是 Asynchronous Javascript And XML&#xff08;异步 JavaScript 和 XML&#xff09;。通俗的理解&#xff1a;在网页中利用 XMLHttpRequest 对象和服务器进行数据交互的方式&#xff0c;就是Ajax。2. 为什么要学Ajax之前所学的技术&#xf…

Python机器学习数据建模与分析——Numpy和Pandas综合应用案例:空气质量监测数据的预处理和基本分析

本篇文章主要以北京市空气质量监测数据为例子&#xff0c;聚集数据建模中的数据预处理和基本分析环节&#xff0c;说明Numpy和Pandas的数据读取、数据分组、数据重编码、分类汇总等数据加工处理功能。同时在实现案例的过程中对用到的Numpy和Pandas相关函数进行讲解。 文章目录数…

【数据结构——顺序表的实现】

前言&#xff1a; 在之前我们已经对复杂度进行的相关了解&#xff0c;因此现在我们将直接进入数据结构的顺序表的相关知识的学习。 目录1.线性表2.顺序表2.1概念及结构2.2 接口实现2.2.1.打印顺序表2.2.2初始化顺序表2.2.3.容量的检查2.2.4.销毁顺序表2.2.5.尾插操作2.2.6.尾删…

bfs入门教程(广度优先搜索)(含图解)

源自《啊哈算法》 目录 bfs正文 题目 思路 完整代码1 完整代码2 再解炸弹人 题目 思路 完整代码1 完整代码2 总结 bfs正文 第四章--深度优先搜索中&#xff0c;我们用dfs找到了寻找小哈的最短路径 接下来&#xff0c;我们要用bfs&#xff08;Breadth First Sear…

DPU网络开发SDK——DPDK(九)

rte_eal_remote_launch() 在过去的几篇文章中&#xff0c;我们重点分析了DPDK初始化过程rte_eal_init()的主要流程&#xff0c;了解了其内存分配&#xff0c;primary和secondary之间如何实现数据共享。Hello world例子中&#xff0c;在DPDK初始化完成之后&#xff0c;调用rte_…

软件测试复习10:测试文档

专栏&#xff1a;《软件测试》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 测试大纲&#xff1a;招标用&#xff0c;总体策略&#xff0c;对软件的了解&#xff0c;测试人员&#xff0c;资质等。 测试计划&#…

Python基础学习一

注释 单行注释 # 注释 # 后面直到行尾。 #!/usr/bin/python3# 第一个注释 print ("Hi, I love Python!") # 第二个注释执行以上的代码&#xff0c;结果输出如下&#xff1a; Hi, I love Python!多行注释 以 3 个单引号开头(‘’‘)&#xff0c;并在注释结束的位置…