Spring Boot整合MyBatis-Plus实现CRUD操作的示例代码

 更新时间:2025年04月09日 09:45:20   作者:小小鸭程序员  
本文主要介绍了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):

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

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

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. 创建实体类

@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接口

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

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

@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. 添加分页插件配置

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

7. 创建Controller

@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)

{
    "username": "张三",
    "age": 25,
    "email": "zhangsan@example.com"
}

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

// 在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);
}

关键特性说明

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

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

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

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

常见问题排查

启动时报错找不到Mapper

  • 确保启动类添加@MapperScan("com.example.mapper")
  • 检查Mapper接口是否标注@Mapper注解

字段映射失败

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

分页失效

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

扩展建议

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

到此这篇关于Spring Boot整合MyBatis-Plus实现CRUD操作的示例代码的文章就介绍到这了,更多相关SpringBoot MyBatis-Plus实现CRUD操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • json序列化时忽略值为null的字段2种方式实例

    json序列化时忽略值为null的字段2种方式实例

    这篇文章主要给大家介绍了关于json序列化时忽略值为null的字段的2种方式,当对象中某个字段为null时,我们希望将对象转换成json时为null的字段不会被转换到json字符串,里面需要的朋友可以参考下
    2023-10-10
  • java如何多线程批量更新10万级的数据

    java如何多线程批量更新10万级的数据

    在处理大数据量的批量更新时,直接使用mybatis的updateBatch可能导致效率低下甚至OOM,通过每次处理5000条数据的方式虽然安全但效率低,更优的解决方案是使用多线程处理,将数据分批并多线程执行,有效提高了处理速度并保证了系统稳定性
    2024-10-10
  • Java getParameter方法案例详解

    Java getParameter方法案例详解

    这篇文章主要介绍了Java getParameter方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java 9中的"菱形"语法详解

    Java 9中的"菱形"语法详解

    Java 9 再次增强了“菱形”语法,它甚至允许在创建匿名内部类时使用菱形语法,Java 可根据上下文来推断匿名内部类中泛型的类型,下面程序示范了在匿名内部类中使用菱形语法,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • Springboot如何获取yml、properties参数

    Springboot如何获取yml、properties参数

    这篇文章主要介绍了Springboot如何获取yml、properties参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • mybatis 查询返回Map<String,Object>类型

    mybatis 查询返回Map<String,Object>类型

    本文主要介绍了mybatis 查询返回Map<String,Object>类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 利用Java+Selenium+OpenCV模拟实现网页滑动验证

    利用Java+Selenium+OpenCV模拟实现网页滑动验证

    目前很多网页都有滑动验证,目的就是防止不良爬虫扒他们网站的数据。本文将介绍通过Java Selenium OpenCV解决网页滑块验证,需要的可以参考一下
    2022-01-01
  • spring boot注解方式使用redis缓存操作示例

    spring boot注解方式使用redis缓存操作示例

    这篇文章主要介绍了spring boot注解方式使用redis缓存操作,结合实例形式分析了spring boot注解方式使用redis缓存相关的依赖库引入、注解使用及redis缓存相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • Spring Cloud Alibaba Nacos服务治理平台服务注册、RestTemplate实现微服务之间访问负载均衡访问的问题

    Spring Cloud Alibaba Nacos服务治理平台服务注册、RestTemplate实现微服务之间访

    这篇文章主要介绍了Spring Cloud Alibaba:Nacos服务治理平台,服务注册、RestTemplate实现微服务之间访问,负载均衡访问,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Spring条件注解用法案例分析

    Spring条件注解用法案例分析

    这篇文章主要介绍了Spring条件注解用法,结合具体实例形式分析了Spring条件注解相关原理、使用方法及操作注意事项,需要的朋友可以参考下
    2019-11-11

最新评论