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

文章目录

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

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



1. 引言

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

2. 项目搭建与依赖配置

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

2.1 添加MyBatis Plus依赖

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

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的相关配置:

yaml 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: your_username
    password: your_password

mybatis-plus:
  mapper-locations: classpath:mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
  configuration:
    map-underscore-to-camel-case: true

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

3. 实现基本CRUD功能

3.1 创建实体类

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

java 复制代码
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;

    @TableLogic
    private Integer deleted;
}

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

3.2 创建Mapper接口

java 复制代码
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层

java 复制代码
import com.baomidou.mybatisplus.extension.service.IService;

public interface UserService extends IService<User> {
}

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

java 复制代码
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 控制器实现

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getById(id);
    }

    @GetMapping("/list")
    public List<User> listUsers() {
        return userService.list();
    }

    @PostMapping
    public void addUser(@RequestBody User user) {
        userService.save(user);
    }

    @PutMapping
    public 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

java 复制代码
@TableField(fill = FieldFill.INSERT)
private Date createTime;

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

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

4.2 乐观锁功能

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

java 复制代码
@Version
private Integer version;

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

4.3 逻辑删除功能

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

java 复制代码
@TableLogic
private Integer deleted;

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

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

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

5.1 条件构造器

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

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

5.2 分页查询

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

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

5.3 性能分析

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

yaml 复制代码
# 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进行项目开发。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏

📜您可能感兴趣的内容:

相关推荐
wn53118 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
bjzhang7528 分钟前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
flying jiang33 分钟前
Spring Boot 入门面试五道题
spring boot
小菜yh34 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
ggdpzhk40 分钟前
Mybatis 快速入门(maven)
oracle·maven·mybatis
希冀12342 分钟前
【操作系统】1.2操作系统的发展与分类
后端
GoppViper1 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
荆州克莱2 小时前
springcloud整合nacos、sentinal、springcloud-gateway,springboot security、oauth2总结
spring boot·spring·spring cloud·css3·技术
serve the people2 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端