Spring Boot整合MyBatis-Plus实现CRUD操作教程

本文将演示如何在Spring Boot项目中整合MyBatis-Plus框架,快速实现数据库的增删改查操作。相较于原生MyBatis,MyBatis-Plus提供了更简洁的API和自动化功能。


环境准备

  • JDK 1.8+
  • MySQL 5.7+
  • Spring Boot 2.7.x
  • MyBatis-Plus 3.5.x

实现步骤

1. 创建项目并添加依赖

通过Spring Initializr创建项目时勾选:

  • Spring Web
  • MySQL Driver

手动添加MyBatis-Plus依赖(pom.xml):

xml 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

2. 配置数据库连接(application.yml)

yaml 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp_demo?useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志
  global-config:
    db-config:
      id-type: assign_id # 主键生成策略(使用雪花算法)

3. 创建实体类

java 复制代码
@Data
@TableName("t_user") // 指定表名
public class User {
    @TableId(type = IdType.ASSIGN_ID) // 雪花算法生成ID
    private Long id;
    private String username;
    private Integer age;
    private String email;
}

4. 创建Mapper接口

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 继承BaseMapper后已包含基础CRUD方法
}

5. 实现Service层(可选增强)

java 复制代码
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    // 插入
    public int addUser(User user) {
        return userMapper.insert(user);
    }

    // 查询全部
    public List<User> getAllUsers() {
        return userMapper.selectList(null);
    }

    // 条件查询
    public User getUserById(Long id) {
        return userMapper.selectById(id);
    }

    // 更新
    public int updateUser(User user) {
        return userMapper.updateById(user);
    }

    // 删除
    public int deleteUser(Long id) {
        return userMapper.deleteById(id);
    }
}

6. 添加分页插件配置

java 复制代码
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

7. 创建Controller

java 复制代码
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping
    public String add(@RequestBody User user) {
        userService.addUser(user);
        return "插入成功";
    }

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

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

    @PutMapping
    public String update(@RequestBody User user) {
        userService.updateUser(user);
        return "更新成功";
    }

    @DeleteMapping("/{id}")
    public String delete(@PathVariable Long id) {
        userService.deleteUser(id);
        return "删除成功";
    }
}

测试示例

插入数据(POST /user)

json 复制代码
{
    "username": "张三",
    "age": 25,
    "email": "zhangsan@example.com"
}

分页查询(需自定义方法)

java 复制代码
// 在Mapper中添加:
@Select("SELECT * FROM t_user WHERE age > #{age}")
Page<User> selectPageByAge(Page<User> page, @Param("age") Integer age);

// Controller调用:
@GetMapping("/page")
public Page<User> page(@RequestParam(defaultValue = "1") Integer pageNum,
                      @RequestParam(defaultValue = "10") Integer pageSize) {
    Page<User> page = new Page<>(pageNum, pageSize);
    return userMapper.selectPage(page, null);
}

关键特性说明

  1. 自动生成SQL:无需编写XML文件,基础CRUD自动实现

  2. 主键策略 :支持AUTO(数据库自增)、ASSIGN_ID(雪花算法)、UUID

  3. 条件构造器 :通过QueryWrapper构建复杂查询条件

    java 复制代码
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.like("username", "张").lt("age", 30);
    userMapper.selectList(wrapper);

常见问题排查

  1. 启动时报错找不到Mapper

    • 确保启动类添加@MapperScan("com.example.mapper")
    • 检查Mapper接口是否标注@Mapper注解
  2. 字段映射失败

    • 检查数据库字段名是否符合驼峰转下划线规则
    • 使用@TableField(value = "db_column")指定字段映射
  3. 分页失效

    • 确认已添加分页插件配置
    • 查询方法参数必须为Page对象

扩展建议

  • 使用代码生成器快速生成Entity/Mapper/Service代码
  • 结合LambdaQueryWrapper实现类型安全的查询条件
  • 通过@Version实现乐观锁功能

相关推荐
陌殇殇20 分钟前
001 Spring AI Alibaba框架整合百炼大模型平台 — 快速入门
人工智能·spring boot·ai
zzzzls~27 分钟前
Python 工程化: 用 Copier 打造“自我进化“的项目脚手架
开发语言·python·copier
言慢行善34 分钟前
sqlserver模糊查询问题
java·数据库·sqlserver
韶博雅38 分钟前
emcc24ai
开发语言·数据库·python
专吃海绵宝宝菠萝屋的派大星40 分钟前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟1 小时前
操作系统之虚拟内存
java·服务器·网络
Tong Z1 小时前
常见的限流算法和实现原理
java·开发语言
喵了几个咪1 小时前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
凭君语未可1 小时前
Java 中的实现类是什么
java·开发语言