SpringBoot使用Mybatis Plus详解含示例代码(值得珍藏)

1. 前言

本文将详细介绍如何在Spring Boot项目中集成和使用MyBatis Plus。我们将从环境准备、依赖管理、配置文件、实体映射、CRUD操作等方面进行阐述,并附有完整的示例代码和注释。通过阅读本文,你将能够了解如何在Spring Boot项目中使用MyBatis Plus进行高效的数据操作。

2. Mybatis Plus介绍

MyBatis Plus是一个强大而易于使用的MyBatis扩展工具,它提供了丰富的功能和工具,帮助开发者简化数据库操作,提高开发效率。如果你正在使用MyBatis或Spring Boot,那么MyBatis Plus是一个值得考虑的选择。它在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它有以下特性:

1. 简化CRUD操作

MyBatis Plus为数据库操作提供了强大的CRUD(创建、读取、更新、删除)功能。它自动为你处理了大部分的底层实现,让你能够专注于业务逻辑。

  • 创建(Create):你可以通过实体类对象创建数据库记录。
  • 读取(Read):提供了多种读取数据的方法,如根据ID读取、根据条件查询、分页查询等。
  • 更新(Update):可以更新数据库中的现有记录。
  • 删除(Delete):通过ID或条件删除数据库中的记录。

2. 条件构造器

MyBatis Plus提供了强大的条件构造器,使得构建查询条件变得非常简单。你可以使用链式调用或XML方式来构建复杂的查询条件,而无需编写大量的SQL代码。

3. 分页插件

MyBatis Plus的PaginationInterceptor插件可以帮助你轻松实现分页功能。你只需在Service层调用分页方法,而无需编写复杂的SQL语句。

4. 代码生成器

MyBatis Plus提供了一个代码生成器,可以根据数据库表结构自动生成实体类、Mapper接口以及XML文件。这大大减少了手写代码的工作量,提高了开发效率。

5. 灵活的SQL自定义

虽然MyBatis Plus提供了大量的内置功能,但它也支持自定义SQL。你可以使用@SelectProvider@UpdateProvider@InsertProvider等注解来自定义SQL语句,满足更复杂的需求。

6. 性能考虑

MyBatis Plus在性能方面做了很多优化。它使用了一些性能优化的策略,如缓存机制、预编译SQL等,确保了高效的数据库操作。

7. 易于集成与使用

MyBatis Plus与Spring Boot集成良好,只需添加相应的依赖,即可快速在Spring Boot项目中启用MyBatis Plus的功能。此外,MyBatis Plus的文档和社区都非常活跃,为开发者提供了丰富的资源和支持。

3. Mybatis Plus使用

3.1 环境准备与依赖管理

首先,确保你的开发环境已经安装了Java和Spring Boot。然后,在Spring Boot项目中添加MyBatis Plus的依赖。在pom.xml文件中添加以下内容:

<dependency>  <groupId>com.baomidou</groupId>  <artifactId>mybatis-plus-boot-starter</artifactId>  <version>最新版本</version>  
</dependency>

请注意替换<version>标签中的"最新版本"为实际的最新版本号。

3.2 配置文件

application.propertiesapplication.yml文件中,配置MyBatis Plus的相关属性,例如数据源信息、Mapper扫描路径等。以下是一个示例配置:

mybatis-plus.configuration.mapper-locations=classpath:mapper/*.xml  
mybatis-plus.configuration.type-aliases-package=com.example.demo.entity

其中,mapper/*.xml表示Mapper XML文件的路径,type-aliases-package指定了实体类的包路径。

3.3 实体映射与Mapper接口

在实体类中,使用MyBatis Plus提供的注解进行属性映射和关联关系定义。例如:

@Data  
public class User {  @TableId  private Long id;  private String name;  private Integer age;  
}

然后,创建一个对应的Mapper接口,并使用MyBatis Plus提供的注解进行方法映射和SQL语句定义。例如:

@Mapper  
public interface UserMapper extends BaseMapper<User> {  
}

3.4 CRUD操作示例

在Service类中注入Mapper接口,然后进行CRUD操作。例如:

@Service  
public class UserService {  @Autowired  private UserMapper userMapper;  public List<User> getUsers() {  return userMapper.selectList(null);  }  public void addUser(User user) {  userMapper.insert(user);  }  public void updateUser(User user) {  userMapper.updateById(user);  }  public void deleteUser(Long id) {  userMapper.deleteById(id);  }  
}

3.5 Controller示例

// 引入MyBatis Plus相关依赖  
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;  
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;  
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;  
import com.baomidou.mybatisplus.core.toolkit.Wrappers;  
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;  import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;  // Controller类  
@RestController  
@RequestMapping("/users")  
public class UserController {  @Autowired  private UserService userService;  // 分页查询示例  @GetMapping("/list")  public Page<User> getUsers(@RequestParam(defaultValue = "1") Integer pageNum,   @RequestParam(defaultValue = "10") Integer pageSize) {  // 创建分页插件实例,并配置分页参数  PaginationInterceptor paginationInterceptor = new PaginationInterceptor();  paginationInterceptor.setPageNum(pageNum); // 设置当前页码  paginationInterceptor.setPageSize(pageSize); // 设置每页显示的数量  // 在Service层注入分页插件,并调用分页查询方法  return userService.list(paginationInterceptor);  }  // 条件构造器示例 - 查询条件构造器QueryWrapper  @GetMapping("/find")  public List<User> findUsers(@RequestParam String name, @RequestParam(defaultValue = "true") Boolean active) {  // 创建查询条件构造器QueryWrapper,并设置查询条件  QueryWrapper<User> queryWrapper = Wrappers.query(); // 默认就是查询条件构造器,用于新增SQL条件的地方。  queryWrapper.eq("name", name); // 等于条件查询,name字段等于传入的值。  queryWrapper.eq(active); // 等于条件查询,active字段等于true。如果active为空则查询active字段是否为true。  // 在Service层注入Mapper,并调用查询方法,传入查询条件构造器对象。  return userService.list(queryWrapper);  }  // 条件构造器示例 - 更新条件构造器UpdateWrapper  @GetMapping("/update")  public void updateUser(@RequestParam Long id, @RequestParam String name) {  // 创建更新条件构造器UpdateWrapper,并设置更新条件和更新字段值。  UpdateWrapper<User> updateWrapper = Wrappers.update(); // 默认就是更新条件构造器,用于新增SQL条件的地方。  updateWrapper.eq("id", id); // 等于条件更新,id字段等于传入的值。如果id为空则不更新。  updateWrapper.set("name", name); // 设置要更新的字段值。如果name为空则不更新。  // 在Service层注入Mapper,并调用更新方法,传入更新条件构造器对象。  userService.update(updateWrapper); // 注意:这里没有返回值,因为直接更新了数据库。  }  
}

4. 总结

MyBatis Plus是一个功能强大的MyBatis扩展插件,它简化了MyBatis的使用,提供了丰富的功能和注解,使得在Spring Boot项目中进行数据操作更加方便快捷。通过本文的介绍,你可以了解到如何在Spring Boot中使用MyBatis Plus进行实体映射、CRUD操作以及常用功能的实现。希望对你有所帮助。

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

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

相关文章

STM32F407移植OpenHarmony笔记9

继上一篇笔记&#xff0c;已经完成liteos内核的基本功能适配。 今天尝试启动OHOS和XTS兼容性测试。 如何启动OHOS&#xff1f; OHOS系统初始化接口是OHOS_SystemInit(void)&#xff0c;在内核初始化完成后&#xff0c;就能调用。 extern void OHOS_SystemInit(void); OHOS_Sys…

JupyterLab 更换内核 使用 conda 虚拟环境

未有conda虚拟环境default先创建环境 conda create -n default python3.8 ipykernel已有conda虚拟环境default激活后安装ipykernel conda activate defaultpip install ipykernel将虚拟环境写入 jupyter notebook 的 kernel 中 python -m ipykernel install --user --name 虚…

C语言小游戏:贪吃蛇(游戏开发的环境和功能介绍)

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 生命不停&#xff0c;学习不止。铁汁们&#xff0c;我是大伟&#xff0c;欢迎来到大伟的游戏时间&#xff0c…

使用idea连接SQL Server数据库出错TLS10 is not accepted

使用idea连接数据库时&#xff0c;发现提示错误&#xff1a; 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。等等出错提示。 可能有两个…

基础算法bfs -剪枝问题

问题描述:一个迷宫有 NXM 格,有一些格子是地板,能走;有一些格子是障碍,不能走。给一个起点S和一个终点D。一只小狗从 S出发,每步走一块地板&#xff0c;在每块地员不能停留&#xff0c;而且走过的地板都不能再走。给定一个 T,问小狗能正好走 T步到达D吗?输入:有很多测试样例。…

一次Kubernetes Pod内存异常导致的测试环境耗时异常问题排查过程

概述 在使用公司内部后台系统测试环境时发现一个请求加载慢的问题&#xff0c;简简单单的列表&#xff0c;查询MongoDB数据库&#xff0c;测试环境不过几百上千条数据而已&#xff0c;请求耗时居然高达5~6秒&#xff1a; 作为对比&#xff0c;生产环境的请求响应截图如下&…

【Java程序设计】【C00194】基于SSM的高校财务处理管理系统(论文+PPT)

基于SSM的高校财务处理管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的高校从财务处理系统 本系统分为财务和管理员2个功能模块。 财务&#xff1a;财务登录高校财务处理系统后&#xff0c;能对首页、个人中心…

链表经典算法(+OJ刷题)

文章目录 前言一、移除链表元素二、链表的中间节点三.反转链表四.合并两个有序链表五.分割链表六.环形链表的约瑟夫问题总结 创作不易&#xff0c;点赞收藏一下呗&#xff01;&#xff01;&#xff01; 前言 在上一节&#xff0c;我们介绍了单链表的增&#xff0c;删&#xff…

thinkphp6入门(18)-- 中间件中除了handle函数,还可以有其它函数吗

在ThinkPHP 6的中间件中&#xff0c;除了 handle 方法外&#xff0c;还可以定义其他方法。这些额外的方法可以用于执行中间件中的不同逻辑&#xff0c;但是只有 handle 方法是中间件的入口点&#xff0c;其他方法则需要在 handle 方法中手动调用。 以下是一个简单的示例&#…

docker手动迁移镜像

1&#xff0c;将镜像保存在本地 docker save 镜像名称:版本号 > 镜像名称.tar 2&#xff0c;下载镜像 通过 ftp 工具或者命令&#xff0c;下载到本地 3&#xff0c;上传镜像到目标 docker 所在服务器 4&#xff0c;导入镜像 docker load < 镜像名称.tar

Electron实战(一):环境搭建/Hello World/打包exe

文章目录 Electron安装Node.jsNodeJs推荐配置开始Electron项目创建index.js文件创建src目录运行打包生成exe生成安装包踩坑 下一篇Electron实战(二)&#xff1a;将Node.js和UI能力&#xff08;app/BrowserWindow/dialog)等注入html Electron Electron是一个使用JavaScript, HT…

Iceberg从入门到精通系列之二十二:Spark DDL

Iceberg从入门到精通系列之二十二&#xff1a;Spark DDL 一、Spark DDL二、Spark DDL-创建表三、Spark DDL-PARTITIONED BY四、Spark DDL-CREATE TABLE ... AS SELECT五、Spark DDL-REPLACE TABLE ... AS SELECT六、Spark DDL-DROP TABLE七、Spark DDL-ALTER TABLE1.ALTER TABL…

AI-数学-高中-22-tanx的图像与性质

原作者视频&#xff1a;三角函数】9tanx的图像与性质&#xff08;易中档&#xff09;_哔哩哔哩_bilibili 做题时注意先画图&#xff0c;再计算。

RabbitMQ(保姆级教程)

RabbitMQ学习 基础 1. 同步通信和异步通信 同步调用 下一步动作必须依赖上一步 异步调用 通知到位就行&#xff0c;不对消费者做强制要求&#xff0c;只要求最终一致性就行 2. MQ技术选项 消息先进先出&#xff0c;RabbitMQ默认有序 Erlang 是面向并发&#xff0c…

Allegro如何把Symbols,shapes,vias,Clines,Cline segs等多种元素一起移动

Allegro如何把Symbols,shapes,vias,Clines,Cline segs等多种元素一起移动 在用Allegro进行PCB设计时,有时候需要同时移动某个区域的所有元素,如:Symbols,shapes,vias,Clines,Cline segs等元素。那么如何操作呢? 首先就是把Symbols,shapes,vias,Clines,Cline …

【实训】网络规划与部署实训

一 实训目的及意义 本周实训主要是了解网络规划与部署&#xff0c;熟悉三大厂商华为、思科、锐捷交换机路由器以及相关协议的原理和配置&#xff0c;提高学生的动手能力和分析规划部署能力。 实训主要针对计算机网络系统集成的设计与实现的实际训练&#xff0c;着重锻炼学生熟练…

可视化特效汇总-2023年

基于threejs可视化效果展示、基于mapbox白膜展示、基于cesium模型加载、磁场专题图绘制

【Redis】字符串原理--简单动态字符串SDS

一.SDS定义 free 属性值为0&#xff0c;标识SDS没有分配任何未使用空间。len 属性值为5&#xff0c;标识SDS保存了一个5字节长度的字符串。buf 属性是一个char类型数组&#xff0c;数组的前5个字节保存了&#xff0c;R e d i s 五个字符&#xff0c;最后一个保存空字符串 \0…

架构篇33:传统的可扩展架构模式-分层架构和SOA

文章目录 分层架构SOA小结相比于高性能、高可用架构模式在最近几十年的迅猛发展来说,可扩展架构模式的发展可以说是步履蹒跚,最近几年火热的微服务模式算是可扩展模式发展历史中为数不多的亮点,但这也导致了现在谈可扩展的时候必谈微服务,甚至微服务架构都成了架构设计的银…

JAVA建造者模式详解

建造者模式 1 建造者模式介绍 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式. 定义: 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 **建造者模式要解决的问题 ** 建造者模式可以将部件和其组装过程分开…