【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus

文章目录

  • 一、什么是 Mybatis Plus
    • 特性
  • 二、Spring Boot 3.0 集成 Mybatis Plus
  • 三、Mybatis Plus 查询示例
    • 1、普通查询
    • 2、分页查询
  • 参考

一、什么是 Mybatis Plus

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

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

二、Spring Boot 3.0 集成 Mybatis Plus

1、 添加依赖

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.6</version>
</dependency>
<!-- mybatis plus -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.3</version>
</dependency>

注意: SpringBoot 3.0 需要 mybatis-spring 3.0.X 版本,否则会报如下错误:
Invalid value type for attribute 'factoryBeanObjectType'‘': java.lang.String

2、配置数据源

# druid 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.maxActive=20
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.stat-view-servlet.allow=true
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/druid/*
spring.datasource.druid.filters=stat,wall,slf4j
spring.datasource.druid.connectionProperties=druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000# --- mybatis-plus start
mybatis-plus.mapper-locations=classpath:/org/shi9/module/**/xml/*Mapper.xml
# 关闭MP3.0自带的banner
mybatis-plus.global-config.banner=false
# 主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
mybatis-plus.global-config.db-config.id-type=ASSIGN_ID
# 返回类型为Map,显示null对应的字段
mybatis-plus.configuration.call-setters-on-nulls=true
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# --- mybatis-plus end

3、创建实体类和 Mapper

创建你的实体类和对应的 Mapper 接口。MyBatis Plus 会自动扫描这些类并为你生成相应的 Mapper 和 SQL 语句。你也可以使用 MyBatis Plus 的 CRUD 操作来简化开发。

这里以SysLog为例

SysLogMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.shi9.module.system.mapper.SysLogMapper">
</mapper>

SysLogMapper.java

@Mapper
public interface SysLogMapper extends BaseMapper<SysLog> {}

4、编写 Service 类

public interface ISysLogService extends IService<SysLog> {}@Service
public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> implements ISysLogService {}

5、编写测试类

@Slf4j
@SpringBootTest
public class SysLogServiceTest {@Autowiredprivate ISysLogService sysLogService;@Testpublic void findTotal(){Long total = sysLogService.count();System.out.println(total);}
}

三、Mybatis Plus 查询示例

1、普通查询

以下是使用 MyBatis Plus 进行查询的示例:

  1. 根据主键查询单个结果

使用 selectById 方法查询单个结果:

User user = userMapper.selectById(1L);
  1. 查询多条记录

使用 selectList 方法查询多条记录:

List<User> users = userMapper.selectList(null);
  1. 使用 QueryWrapper 进行查询

可以使用 QueryWrapper 对查询条件进行组装:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John").lt("age", 30);
List<User> userList = userMapper.selectList(queryWrapper);
  1. 分页查询

使用 Page 类进行分页查询:

Page<User> page = new Page<>(1, 10); // 第1页,每页显示10条记录
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John");
page.setFilter(queryWrapper);
Page<User> result = userMapper.selectPage(page, null);
  1. 模糊查询

使用 like 方法进行模糊查询:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "Jo");
List<User> userList = userMapper.selectList(queryWrapper);
  1. 排序查询

使用 orderBy 方法进行排序查询:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("age");
List<User> userList = userMapper.selectList(queryWrapper);
  1. 聚合查询

使用 groupBysumcount 等方法进行聚合查询:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.groupBy("age");
Long totalCount = userMapper.selectSum(queryWrapper, "age");
  1. 自定义 SQL

使用 @Select 注解自定义 SQL 语句:

@Select("SELECT * FROM user WHERE age > #{age}")
List<User> selectUsersByAge(@Param("age") Integer age);

这些示例只是 MyBatis Plus 提供的一些常见查询方法的冰山一角。MyBatis Plus 还提供了很多其他功能和扩展,可以根据需要进行配置和使用。同时,MyBatis Plus 还支持与其他组件的集成,例如分页插件、乐观锁插件等,可以帮助你更加高效地进行数据库操作。

2、分页查询

MyBatis Plus 支持分页功能,可以通过配置分页插件来实现。分页插件可以帮助我们自动处理分页相关的 SQL 语句,简化分页逻辑。以下是使用分页插件的步骤:

1、配置分页插件

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 配置分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor());// 增加@Version乐观锁支持interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;
}

2. 使用分页插件

在 Mapper 接口或 XML 映射文件中使用分页插件提供的查询方法进行分页查询。例如:

@Select("SELECT * FROM user WHERE 1=1")
Page<User> selectUserPage(Page<User> page);

在查询方法上使用 Page 参数,MyBatis Plus 会自动处理分页相关的 SQL 语句,返回包含分页信息的 Page 对象。你可以根据需要配置查询条件、排序规则等。

3. 处理分页结果

根据返回的 Page 对象,你可以获取当前页的数据、总记录数、总页数等信息,进行相应的业务处理。例如:

Page<User> page = userMapper.selectUserPage(new Page<>(1, 10)); // 第1页,每页显示10条记录
List<User> userList = page.getRecords(); // 当前页的数据列表
int totalCount = page.getTotal(); // 总记录数
int totalPage = page.getPages(); // 总页数

通过这些步骤,你可以在 MyBatis Plus 中配置和使用分页插件,简化分页逻辑,提高开发效率。

参考

  • Mybatis Plus

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Allegro如何导入芯片的Pin Delay?

Allegro在做等长时,需要导入芯片的Pin Delay才能做真正的等长。因为有些芯片内部的引脚本身就是不等长的,例如海思的部分芯片。 那么如何导入芯片的Pin Delay呢? 1、打开约束管理器,点击Properties(属性)→Component(器件)→Pin Properties→General。 在右栏找到芯片U1,…

实时嵌入式Linux设备基准测试快速入门4测试和测量

本章将介绍主要测试方案及其具体配置和结果。在介绍实际测量结果之前&#xff0c;将尽可能总结被测设备的特性。最后&#xff0c;将对结果进行分析&#xff0c;并概述由于高速缓存一致性问题造成的延迟方面的主要瓶颈&#xff0c;提出减少延迟的解决方案&#xff0c;并解释用于…

JavaSE核心基础-一维数组-笔记

1.数组概念 相同类型数据的集合&#xff0c;它在内存空间的存储是连续的。数组其实也是一个容器,用来存储固定个数相同类型的数据&#xff0c;数组中存储的数据叫做元素。 2.数组定义 方式1&#xff1a; 数据类型[] 数组名 new 数据类型[数组长度]; 数据类型 数组…

Duplicate object key json(520)

亲爱的码友&#xff0c;当你看到这个错误 请查看一下你的json文件内容的关键词是不是重复了 举个栗子&#x1f330; 往下翻翻&#xff1a; 删一个就行&#xff01;&#xff01;&#xff01; 被自己傻哭了吧&#x1f923;&#x1f923;&#x1f923;

js实现九九乘法表

效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><script type"text/javascript">// 输出乘法口诀表// document.write () 空格 " " 换行…

Flowable 生成流程图

/*** 生成流程图** param processId 任务ID*/ RequestMapping("/diagram/{processId}") public void genProcessDiagram(HttpServletResponse response,PathVariable("processId") String processId) {InputStream inputStream flowTaskService.diagram(p…

HubSpot整合小红书,MessageBox助力多系统融合

在当今数字化潮流中&#xff0c;HubSpot与小红书的强大联盟成为了数字化市场的亮点。今天运营坛将深入解析它们的合作策略&#xff0c;聚焦于MessageBox在整合中的关键角色&#xff0c;以及它在推动HubSpot和小红书整合方面的关键作用。 HubSpot与小红书&#xff1a;数字化市场…

用C语言验证“三门定理”

#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h>// 一个源自博弈论的数学游戏问题&#xff1a; // 参赛者会看见三扇门&#xff0c; // 其中一扇门的里面有一辆汽车&#xff0c; // 选中里面是汽车的那扇门&#xff0…

Shiro实战详解(4)--JWT生成token以及解析token

JWT生成token以及解析token 06 SpringbootShiroJwt前后端分离鉴权1、前后端分离会话问题【1】问题追踪【2】解决方案 2、JWT概述1.Header2.payload3.Signature JWT生成Token及解析 06 SpringbootShiroJwt前后端分离鉴权 1、前后端分离会话问题 【1】问题追踪 前面我们实现分…

【Linux驱动】休眠与唤醒 | POLL机制 | 异步通知 | 阻塞与非阻塞 | 软件定时器

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3d3;休眠与唤醒&#x1f3f8;内核函数&#x1f3f8;驱动框架及编程 &#x1f3d3;…

代码随想录算法训练DAY25|回溯2

算法训练DAY25|回溯2 216.组合总和III 力扣题目链接 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n …

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

Linux操作系统——理解软硬链接

1.引言 通过我们前面理解文件系统的基础上&#xff0c;我们来理解软硬链接&#xff0c;在我们学习文件的时候我们会见到各种链接文件&#xff0c;其中链接文件分为两种&#xff0c;一种叫软连接&#xff0c;一种叫硬链接。 下面我们新建一个log文件&#xff0c;要对log这个文…

【SpringCloud Alibaba】 介绍及微服务模块搭建

文章目录 SpringCloud Alibaba 介绍主要功能组件 微服务环境搭建案例准备技术选型模块设计微服务调用 创建父工程创建基础模块1、创建 shop-common 模块2、创建实体类 创建用户微服务1、创建pom.xml2、编写主类3、创建配置文件 创建商品微服务1、创建一个名为 shop-product 的模…

理解PCIE设备透传

PCIE设备透传解决的是使虚拟机直接访问PCIE设备的技术&#xff0c;通常情况下&#xff0c;为了使虚拟机能够访问Hypervisor上的资源&#xff0c;QEMU&#xff0c;KVMTOOL等虚拟机工具提供了"trap and emulate"&#xff0c; Virtio半虚拟化等机制实现。但是这些实现都…

leetcode 151反转字符串如何原地去除多余空格

题目&#xff1a;https://leetcode.cn/problems/reverse-words-in-a-string/description/ 完整题解:https://leetcode.cn/problems/reverse-words-in-a-string/solutions/2611893/chu-li-kong-ge-ku-han-shu-reversefan-zhu-bioo 思路来自代码随想录&#xff0c;对其中的除去多…

websocket实现聊天室(vue2 + node)

通过websocket实现简单的聊天室功能 需求分析如图&#xff1a; 搭建的项目结构如图&#xff1a; 前端步骤&#xff1a; vue create socket_demo (创建项目)views下面建立Home , Login组件路由里面配置路径Home组件内部开启websocket连接 前端相关组件代码&#xff1a; Login…

【操作系统】实验二 Proc文件系统

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Docker基础使用

Docker基础使用 1.查看容器挂载文件夹一定要放开权限&#xff0c;否则后面启动nexus时会无法启动1.查询远程镜像重启docker服务容器自启动关闭容器自启动查看docker容器是否挂载容器挂载解释保存和加载本地镜像创建mysql容器容器转换为镜像创建dockerfile容器相互通讯查看容器的…

使用Rancher管理Kubernetes集群

部署前规划 整个部署包括2个部分&#xff0c;一是管理集群部署&#xff0c;二是k8s集群部署。管理集群功能主要提供web界面方式管理k8s集群。正常情况&#xff0c;管理集群3个节点即可&#xff0c;k8s集群至少3个。本文以3节点管理集群&#xff0c;3节点k8s集群为例 说明部署过…