Spring Boot整合MyBatis Plus实现基本CRUD与高级功能

文章目录

    • 1. 引言
    • 2. 项目搭建与依赖配置
      • 2.1 添加MyBatis Plus依赖
      • 2.2 配置数据源与MyBatis Plus
    • 3. 实现基本CRUD功能
      • 3.1 创建实体类
      • 3.2 创建Mapper接口
      • 3.3 实现Service层
      • 3.4 控制器实现
    • 4. 高级功能实现
      • 4.1 自动填充功能
      • 4.2 乐观锁功能
      • 4.3 逻辑删除功能
    • 5. 拓展:MyBatis Plus的其他功能
      • 5.1 条件构造器
      • 5.2 分页查询
      • 5.3 性能分析
    • 6. 总结

在这里插入图片描述

🎉欢迎来到SpringBoot框架学习专栏~


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:SpringBoot
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

1. 引言

Spring Boot是一款用于快速构建Spring应用程序的框架,而MyBatis Plus是MyBatis的增强工具,提供了许多方便实用的功能,包括基本CRUD操作、自动填充、乐观锁、逻辑删除等。本文将详细介绍如何在Spring Boot项目中整合MyBatis Plus,并展示其基本CRUD功能以及高级功能的实现方式。
在这里插入图片描述

2. 项目搭建与依赖配置

首先,确保你已经搭建好了Spring Boot项目。接下来,我们需要添加MyBatis Plus的依赖。

2.1 添加MyBatis Plus依赖

pom.xml文件中添加以下依赖:

<!-- MyBatis Plus -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version>
</dependency>

2.2 配置数据源与MyBatis Plus

application.propertiesapplication.yml中配置数据库连接信息和MyBatis Plus的相关配置:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCusername: your_usernamepassword: your_passwordmybatis-plus:mapper-locations: classpath:mapper/**/*.xmlglobal-config:db-config:id-type: autoconfiguration:map-underscore-to-camel-case: true

以上配置中,mapper-locations指定了MyBatis Plus的XML映射文件路径,map-underscore-to-camel-case表示数据库字段采用下划线命名,而Java实体类采用驼峰命名。

3. 实现基本CRUD功能

3.1 创建实体类

假设我们有一个实体类User,对应数据库中的user表:

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;import java.util.Date;@Data
@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private Integer age;@TableField(fill = FieldFill.INSERT)private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;@TableLogicprivate Integer deleted;
}

在上述实体类中,使用了@TableName注解指定了对应的数据库表名,@TableId表示主键,@TableField用于自动填充,@TableLogic表示逻辑删除字段。

3.2 创建Mapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {
}

MyBatis Plus提供了BaseMapper接口,通过继承该接口,即可获得常见的CRUD功能,无需手动编写SQL。

3.3 实现Service层

import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {
}

创建一个UserService接口,继承自IService,该接口提供了常用的Service层方法。

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

创建UserServiceImpl类,实现UserService接口,并继承自ServiceImpl,实现了其中的方法。

3.4 控制器实现

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return userService.getById(id);}@GetMapping("/list")public List<User> listUsers() {return userService.list();}@PostMappingpublic void addUser(@RequestBody User user) {userService.save(user);}@PutMappingpublic void updateUser(@RequestBody User user) {userService.updateById(user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable Long id) {userService.removeById(id);}
}

以上代码中,通过注入UserService实现了基本的CRUD操作的接口。

4. 高级功能实现

4.1 自动填充功能

MyBatis Plus提供了自动填充功能,通过@TableField注解的fill属性来指定填充的时机,常用的值有FieldFill.INSERTFieldFill.INSERT_UPDATE

@TableField(fill = FieldFill.INSERT)
private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

上述代码中,createTime字段在插入时自动填充,updateTime字段在插入和更新时自动填充。

4.2 乐观锁功能

MyBatis Plus支持乐观锁的实现,通过@Version注解在实体类的版本字段上添加乐观锁。

@Version
private Integer version;

在更新时,MyBatis Plus会自动检测版本字段,如果版本号不匹配,则更新失败。

4.3 逻辑删除功能

MyBatis Plus提供了逻辑删除的功能,通过@TableLogic注解在实体类的逻辑删除字段上添加逻辑删除标记。

@TableLogic
private Integer deleted;

在进行逻辑删除操作时,MyBatis Plus会更新这个字段的值,而不是物理删除记录。

5. 拓展:MyBatis Plus的其他功能

除了上述介绍的功能外,MyBatis Plus还提供了许多其他强大的功能,如条件构造器、分页查询、性能分析、多租户支持等。以下简单介绍一些常用的功能:

5.1 条件构造器

MyBatis Plus的条件构造器可以轻松构建复杂的查询条件:

LambdaQueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery().eq(User::getUsername, "admin").like(User::getPassword, "pass");
List<User> userList = userService.list(wrapper);

5.2 分页查询

MyBatis Plus支持简单的分页查询:

IPage<User> page = new Page<>(1, 10);
IPage<User> userPage = userService.page(page, null);
List<User> userList = userPage.getRecords();

5.3 性能分析

MyBatis Plus提供了性能分析插件,可以方便地查看SQL执行情况:

# application.yml
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

通过配置log-impl属性,可以将SQL输出到控制台,方便调试与优化。

6. 总结

通过本文的介绍,我们学习了如何在Spring Boot项目中整合MyBatis Plus,并实现了基本的CRUD功能以及高级功能如自动填充、乐观锁、逻辑删除等。MyBatis Plus的强大功能极大地简化了数据库操作,提高了开发效率。在实际项目中,根据具体需求,我们可以更深入地了解MyBatis Plus提供的各种功能,以更好地应对复杂的业务场景。希望通过本文的学习,读者能够更加熟练地使用Spring Boot和MyBatis Plus进行项目开发。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

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

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

相关文章

数据结构高级算法

目录 最小生成树 Kruskal(克鲁斯卡尔)(以边为核心) 9) 不相交集合(并查集合) 基础 Union By Size 图-相关题目 4.2 Greedy Algorithm 1) 贪心例子 Dijkstra Prim Kruskal 最优解(零钱兑换)- 穷举法 Leetcode 322 最优解(零钱兑换)- 贪心法 Leetcode 322 3)…

在Linux下搭建自己的私有maven库并部署和发布自定义jar依赖和自定义maven插件(三)开发和发布自己开发的maven插件

系列文章目录 在Linux下搭建自己的私有maven库并部署和发布自定义jar依赖和自定义maven插件(二)发布自己开发的jar包 文章目录 系列文章目录在Linux下搭建自己的私有maven库并部署和发布自定义jar依赖和自定义maven插件(二)发布自己开发的jar包 前言一、插件需求二、maven自定…

neo4j查询id为null

今天在neo4j里执行一条查询语句时&#xff0c;发现id属性查询不出来显示为null 后来了解到&#xff0c;Neo4j 默认情况下并不提供一个名为 id 的属性。通常情况下&#xff0c;Neo4j 中的节点都有一个内部的唯一标识符&#xff0c;但是这个标识符并不以 id 的形式暴露给用户。 …

LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略

LLMs之miqu-1-70b&#xff1a;miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略 目录 miqu-1-70b的简介 miqu-1-70b的安装和使用方法 1、安装 2、使用方法 miqu-1-70b的案例应用 miqu-1-70b的简介 2024年1月28日&#xff0c;发布了miqu 70b&#xff0c;潜在系列中的…

Google MobileDiffusion: 移动端设备上的快速文字到图片生成技术

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

多线程生命周期与通信(二)通信

线程自启动时&#xff0c;就拥有了自己的栈空间。然后会一直运行直到结束。多线程的目的是多条线程执行不同的逻辑业务从而能够提升业务整体的响应速度&#xff0c;如果线程仅仅是孤零零的执行&#xff0c;不同的逻辑业务就不能最终汇聚成一个完整的业务那么多线程也就失去了意…

02-Web应用_架构构建_漏洞_HTTP数据包_代理服务器

Web应用_架构构建_漏洞_HTTP数据包_代理服务器 一、网站搭建前置知识1.1 域名1.2、子域名1.3、DNS二、web应用环境架构类三、web应用安全漏洞分类四、web请求返回过程数据包 五、演示案例5.1、架构-Web应用搭建-域名源码解析5.2、请求包-新闻回帖点赞-重放数据包5.3、请求包-移…

2024.2.4 awd总结

防御阶段 感觉打了几次awd&#xff0c;前面阶段还算比较熟练 1.ssh连接 靶机登录 修改密码 [root8 ~]# passwd Changing password for user root. New password: Retype new password: 2.xftp连接 备份网站源码 我觉得这步还是非常重要的&#xff0c;万一后面被删站。。…

Java-并发高频面试题-2

接着之前的Java-并发高频面试题 7. synchronized的实现原理是怎么样的&#xff1f; 首先我们要知道synchronized它是解决线程安全问题的一种方式&#xff0c;而具体是怎么解决的呢&#xff1f;主要是通过加锁的方式来解决 在底层实现上来看 是通过 monitorenter、monitorexit…

零售新业态,让老牧区焕发新生命

敦煌老马一声魔性“浇给”勾起了无数人对羊肉的食欲&#xff0c;而当大家集体涌入餐厅或者在网上下单&#xff0c;都想要尝一尝网红同款的时候&#xff0c;可能并没有想过这样一个问题——为什么在今天&#xff0c;即便是远离牧区的现代大城市&#xff0c;草原羊肉却一样能触手…

2、ChatGPT 在数据科学中的应用

ChatGPT 在数据科学中的应用 ChatGPT 可以成为数据科学家的绝佳工具。以下是我所了解到的关于它擅长的地方和不那么擅长的地方。 我从使用 ChatGPT 中学到了一个教训。它在数据科学中非常有帮助,但你必须仔细检查它输出的所有内容。它非常适合某些任务,并且可以非常快速准确…

【Iceberg学习二】Branch和Tag在Iceberg中的应用

Iceberg 表元数据保持一个快照日志&#xff0c;记录了对表所做的更改。快照在 Iceberg 中至关重要&#xff0c;因为它们是读者隔离和时间旅行查询的基础。为了控制元数据大小和存储成本&#xff0c;Iceberg 提供了快照生命周期管理程序&#xff0c;如 expire_snapshots&#xf…