SpringBoot3与MyBatis-Plus

4.1 介绍

MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,提供通用 CRUD 操作、代码生成器、条件构造器、分页插件等功能,简化开发流程,提升效率。

4.2 特点

  • 无侵入:只做增强不做修改,与 MyBatis 完全兼容。

  • CRUD 简化:内置通用 Mapper 和 Service,减少 SQL 编写。

  • 代码生成器:自动生成 Entity、Mapper、Service、Controller 代码。

  • 条件构造器:通过 QueryWrapperLambdaQueryWrapper 动态构建查询条件。

  • 分页插件:支持物理分页,自动优化 COUNT 语句。

4.3 如何使用

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.10.1</version>
</dependency>

application.yml 配置文件中添加 H2 数据库的相关配置:

# DataSource Config
spring:datasource:driver-class-name: org.h2.Driverusername: rootpassword: 123456sql:init:schema-locations: classpath:db/schema-h2.sqldata-locations: classpath:db/data-h2.sql

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {
​public static void main(String[] args) {SpringApplication.run(Application.class, args);}
​
}

编码

编写实体类 User.java:

@Data
@TableName("`user`")
public class User {private Long id;private String name;private Integer age;private String email;
}

编写 Mapper 接口类 UserMapper.java

public interface UserMapper extends BaseMapper<User> {
​
}

5. mp-增加

// 插入单条记录
User user = new User();
user.setName("张三");
user.setAge(25);
userMapper.insert(user);
​
// 批量插入
List<User> userList = Arrays.asList(new User("李四", 30), new User("王五", 28));
userMapper.insertBatchSomeColumn(userList);

6. mp-删除

  // 根据 ID 删除
userMapper.deleteById(1L);
​
// 根据条件删除(删除年龄大于 30 的用户)
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 30);
userMapper.delete(wrapper);

7. mp-修改

// 根据 ID 更新
User user = userMapper.selectById(2L);
user.setName("赵六");
userMapper.updateById(user);
​
// 条件更新(将年龄小于 20 的用户设为无效)
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.lt("age", 20).set("status", 0);
userMapper.update(null, wrapper);

8. mp-查询

8.1 根据主键查询---省略

User user = userMapper.selectById(1L);

8.2 根据各种条件查询

// 查询年龄在 20-30 之间的用户
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age", 20, 30);
List<User> users = userMapper.selectList(wrapper);
​
// 使用 Lambda 表达式(查询名字包含 "张" 的用户)
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.like(User::getName, "张");
List<User> users = userMapper.selectList(lambdaWrapper);

8.3 根据条件查询一条记录

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "刘德华");
User user = userMapper.selectOne(wrapper);

8.4 分页查询

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-jsqlparser</artifactId><version>3.5.10.1</version> <!-- 确保版本和 MyBatis Plus 主包一致 -->
</dependency>
属性名类型默认值描述
overflowbooleanfalse溢出总页数后是否进行处理
maxLimitLong单页分页条数限制
dbTypeDbType数据库类型
dialectIDialect方言实现类

配置类

@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
​/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbTypereturn interceptor;}
}

Page<User> page = new Page<>(1, 10); // 第 1 页,每页 10 条
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("create_time");
IPage<User> userPage = userMapper.selectPage(page, wrapper);
​
System.out.println("总页数:" + userPage.getPages());
System.out.println("总记录数:" + userPage.getTotal());

8.5 联表查询也使用mp的分页。

 /*** 联表查询 使用mp的分页功能。*/@Testpublic void testLianbiao(){// @Param("ew") Wrapper<T> queryWrapperPage<User>  page=new Page<>(1,3);QueryWrapper<User> wrapper=new QueryWrapper<>();wrapper.eq("name","刘德华");IPage<User> users=userMapper.selectUserWithDept(page,wrapper);System.out.println("总页码:"+page.getPages());System.out.println("总条数:"+page.getTotal());System.out.println("当前页记录:"+page.getRecords());}

​<resultMap id="baseMaper" type="com.ykq.entity.User" autoMapping="true"><id property="id" column="id"/><association property="dept" javaType="com.ykq.entity.Dept" autoMapping="true"><id column="did" property="did"/></association></resultMap><select id="selectUserWithDept" resultMap="baseMaper">select * from user u join tbl_dept d on u.did=d.did  where isdeleted=0
​<if test="ew!=null">and ${ew.sqlSegment}</if>
​</select>

注意事项

  1. 联表查询需自定义 SQL,MP 分页插件会自动处理分页逻辑。

  2. 使用 QueryWrapper 时,条件字段名需与数据库列名一致。

  3. 分页参数 Pagecurrentsize 需明确指定。

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

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

相关文章

【Spring相关知识】Spring应用如何优雅使用消息队列

文章目录 概述**核心概念****使用场景****快速入门**1. 添加依赖2. 配置 Binder3. 定义消息通道4. 发送和接收消息5. 运行应用 **高级特性****优点****适用场景** 概述 Spring Cloud Stream 是一个用于构建消息驱动微服务的框架&#xff0c;它基于 Spring Boot 和 Spring Inte…

人工智能与低代码如何重新定义企业数字化转型?

引言&#xff1a;数字化转型的挑战与机遇 在全球化和信息化的浪潮中&#xff0c;数字化转型已经成为企业保持竞争力和创新能力的必经之路。然而&#xff0c;尽管“数字化”听上去是一个充满未来感的词汇&#xff0c;落地的过程却往往充满困难。 首先&#xff0c;传统开发方式…

axios 发起 post请求 json 需要传入数据格式

• 1. axios 发起 post请求 json 传入数据格式 • 2. axios get请求 1. axios 发起 post请求 json 传入数据格式 使用 axios 发起 POST 请求并以 JSON 格式传递数据是前端开发中常见的操作。 下面是一个简单的示例&#xff0c;展示如何使用 axios 向服务器发送包含 JSON 数…

2025年南软考研复试,进!

复试 22年是线上复试&#xff0c;23年回归线下了24年也是线下&#xff0c;估计以后没什么Big events都是线下吧。。。线下的话&#xff0c;机考和笔试肯定得安排&#xff0c;面试等主观因素占比更低&#xff0c;这就更需要过硬的专业水平。而形式是否和22年一样那都是后话了。…

单细胞分析(10)——scRNA-seq 双细胞(Doublet)筛选

scRNA-seq 双细胞&#xff08;Doublet&#xff09;筛选 1. 背景介绍 1.1 什么是双细胞&#xff1f; 在单细胞转录组测序&#xff08;scRNA-seq&#xff09;过程中&#xff0c;实验技术的不完美可能会导致两个或多个细胞共享相同的条形码&#xff08;barcode&#xff09;&…

第二节 docker基础之---镜像构建及挂载

查看当前镜像&#xff1a; [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [rootdocker ~]#很明显docker是咱们新搭建的所以目前还没有镜像 1&#xff0c;搜索镜像&#xff1a; [rootdocker ~]# docker search centos 搜索镜像并过滤是官…

在 Vue 中实现图表数据的动态展示

随着数据可视化技术的蓬勃发展&#xff0c;图表在前端开发领域的地位愈发重要。Vue.js 作为一款备受欢迎的前端框架&#xff0c;凭借其出色的灵活性与易用性&#xff0c;成为实现图表动态展示的绝佳之选。在本篇博客中&#xff0c;将详细介绍如何在 Vue 3 中借助 Composition A…

人工智能:从概念到未来

人工智能&#xff1a;从概念到未来 一、引言 在当今数字化时代&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;已从科幻小说和电影中的幻想逐渐走进现实&#xff0c;成为推动社会进步和经济发展的关键力量。它正在深刻地改变着我们的生活…

GitHub Pages + Jekyll 博客搭建指南(静态网站)

目录 &#x1f680; 静态网站及其生成工具指南&#x1f30d; 什么是静态网站&#xff1f;&#x1f4cc; 静态网站的优势⚖️ 静态网站 VS 动态网站 &#x1f680; 常见的静态网站生成器对比&#x1f6e0;️ 使用 GitHub Pages Jekyll 搭建个人博客&#x1f4cc; 1. 创建 GitHu…

字符设备驱动开发

驱动就是获取外设、传感器数据和控制外设。数据会提交给应用程序。 Linux 驱动编译既要编写一个驱动&#xff0c;还要编写一个简单的测试应用程序。 而单片机下驱动和应用都是放在一个文件里&#xff0c;也就是杂在一块。而 Linux 则是分开了。 一、字符设备驱动开发流程 Lin…

参数映射服务完整解决方案

参数映射服务完整解决方案 1. 背景说明 在复杂的工作流程中&#xff0c;后续程序需要动态构造输入参数&#xff0c;这些参数源自多个前序程序的 JSON 数据输出。为了增强系统的灵活性和可扩展性&#xff0c;需要一个通用的参数映射服务来处理这种复杂的数据转换需求。 1.1 主…

SpringCloud - Nacos注册/配置中心

前言 该博客为Nacos学习笔记&#xff0c;主要目的是为了帮助后期快速复习使用 学习视频&#xff1a;7小快速通关SpringCloud 辅助文档&#xff1a;SpringCloud快速通关 一、简介 Nacos官网&#xff1a;https://nacos.io/docs/next/quickstart/quick-start/ Nacos /nɑ:kəʊ…

IDEA安装离线插件(目前提供了MavenHelper安装包)

目录 1、离线安装方式2、Maven Helper 1、离线安装方式 首先访问 IDEA插件网站 下载离线插件安装包&#xff0c;操作如下&#xff1a; 然后打开IDEA的Settings配置&#xff0c;点击Plugins&#xff0c;点击右侧设置按钮&#xff08;齿轮&#xff09;&#xff0c;选择Install P…

科技赋能数字内容体验的核心技术探索

内容概要 在数字化时代&#xff0c;科技的迅猛发展为我们的生活和工作带来了深刻的变革。数字内容体验已经成为人们获取信息和娱乐的重要途径&#xff0c;而这背后的技术支持则扮演着至关重要的角色。尤其是在人工智能、虚拟现实和区块链等新兴技术的推动下&#xff0c;数字内…

【LeetCode 刷题】贪心算法(2)-进阶

此博客为《代码随想录》贪心算法章节的学习笔记&#xff0c;主要内容为贪心算法进阶的相关题目解析。 文章目录 135. 分发糖果406. 根据身高重建队列134. 加油站968. 监控二叉树 135. 分发糖果 题目链接 class Solution:def candy(self, ratings: List[int]) -> int:n l…

工业相机,镜头的选型及实战

工业相机和镜头的选型是机器视觉系统中的关键步骤&#xff0c;选型不当可能导致成像质量差或系统性能不达标。&#xff08;用于个人的学习和记录&#xff09; 一、工业相机选型方法 确定分辨率 分辨率需求&#xff1a;根据被测物体的尺寸和检测精度要求计算所需分辨率。 公式…

探索robots.txt:网站管理者的搜索引擎指南

在数字时代&#xff0c;网站如同企业的在线名片&#xff0c;其内容和结构对搜索引擎的可见性至关重要。而在这背后&#xff0c;有一个默默工作的文件——robots.txt&#xff0c;它扮演着搜索引擎与网站之间沟通桥梁的角色。本文将深入探讨robots.txt的功能、编写方法及其在现代…

使用WebUI访问本地Deepseek(Ollama集成Open WebUI)

在《deepseek本地部署和使用&#xff08;Linux虚拟机&#xff09;》中&#xff0c;我们使用Ollama部署了Deepseek-r1&#xff0c;但是只能通过命令行方式交互&#xff0c;默认Ollama启动后&#xff0c;会启动一个监听到127.0.0.1&#xff0c;用以接收POST 请求&#xff0c;服务…

windows蓝牙驱动开发-蓝牙 LE 邻近感应配置文件

邻近感应检测是蓝牙低功耗 (LE) 的常见用途。 本部分提供了创建可用于开发 UWP 设备应用的邻近感应配置文件的设备实现的指南。 在开发此应用之前&#xff0c;应熟悉蓝牙 LE 函数和蓝牙 LE 邻近感应配置文件规范。 示例服务声明 蓝牙低功耗引入了一个新的物理层&#xff0c;…

模型 冗余系统(系统科学)

系列文章分享模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。为防故障、保运行的备份机制。 1 冗余系统的应用 1.1 冗余系统在企业管理中的应用-金融行业信息安全的二倍冗余技术 在金融行业&#xff0c;信息安全是保障业务连续性和客户资产安全的关键。随着数字化…