当前位置: 首页 > news >正文

38. 如何在Spring Boot项目中集成MyBatis-Plus?

在Spring Boot项目中集成MyBatis-Plus相对简单,MyBatis-Plus是基于MyBatis的增强工具,提供了很多实用功能,如CRUD操作的自动生成、分页查询、条件构造器等。下面是详细的集成步骤:

1. 添加MyBatis-Plus依赖

首先,在Spring Boot项目的pom.xml中添加MyBatis-Plus的依赖。

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version> <!-- 使用最新版 -->
</dependency>

2. 配置数据源和MyBatis-Plus

Spring Boot通常通过application.ymlapplication.properties来配置数据源和MyBatis-Plus。

  • application.yml 示例

spring:datasource:url: jdbc:mysql://localhost:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=utf8username: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driver
​
mybatis-plus:mapper-locations: classpath:/mapper/*.xmltype-aliases-package: com.example.entity
  • application.properties 示例

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
​
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.type-aliases-package=com.example.entity

3. 创建实体类和Mapper接口

在MyBatis-Plus中,实体类对应数据库中的表,而Mapper接口提供了对数据库的操作方法。

  • 实体类

创建一个与数据库表对应的实体类,如User类。

package com.example.entity;
​
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
​
@TableName("users")  // 对应数据库表名
public class User {
​@TableId(value = "id")  // 主键private Long id;private String username;private String email;
​// Getters and Setters
}
  • Mapper接口

创建一个Mapper接口,继承BaseMapper接口即可自动具备基本的CRUD操作。

package com.example.mapper;
​
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
​
@Mapper
public interface UserMapper extends BaseMapper<User> {// 其他自定义的查询方法可以在这里添加
}

4. 启动类配置

在Spring Boot的启动类上添加@MapperScan注解,用于指定Mapper接口所在的包路径。

package com.example;
​
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
@MapperScan("com.example.mapper")  // 扫描Mapper接口
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

5. 使用MyBatis-Plus的CRUD功能

现在可以在Service类中使用MyBatis-Plus提供的CRUD功能了。

  • Service层示例

package com.example.service;
​
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.stereotype.Service;
​
import java.util.List;
​
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
​public List<User> getAllUsers() {return list();}
​public User getUserById(Long id) {return getById(id);}
​public boolean createUser(User user) {return save(user);}
​public boolean updateUser(User user) {return updateById(user);}
​public boolean deleteUser(Long id) {return removeById(id);}
}
  • Controller层示例

package com.example.controller;
​
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
​
import java.util.List;
​
@RestController
@RequestMapping("/users")
public class UserController {
​@Autowiredprivate UserService userService;
​@GetMappingpublic List<User> getAllUsers() {return userService.getAllUsers();}
​@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userService.getUserById(id);}
​@PostMappingpublic boolean createUser(@RequestBody User user) {return userService.createUser(user);}
​@PutMappingpublic boolean updateUser(@RequestBody User user) {return userService.updateUser(user);}
​@DeleteMapping("/{id}")public boolean deleteUser(@PathVariable Long id) {return userService.deleteUser(id);}
}

6. 使用条件构造器和分页

MyBatis-Plus 提供了强大的条件构造器和分页支持,可以方便地进行复杂的查询操作。

  • 条件构造器

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
​
public List<User> findUsersByCondition(String username, String email) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();if (username != null) {queryWrapper.like("username", username);}if (email != null) {queryWrapper.eq("email", email);}return list(queryWrapper);
}
  • 分页查询

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
​
public IPage<User> getUserPage(int pageNum, int pageSize) {Page<User> page = new Page<>(pageNum, pageSize);return page(page);
}

7. 其他配置和插件

MyBatis-Plus还支持分页插件、乐观锁插件、SQL性能分析插件等,具体使用方式可以参考官方文档。

  • 分页插件配置

在配置类中添加分页插件:

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
@Configuration
public class MyBatisPlusConfig {
​@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}
}

8. 总结

通过上述步骤,你可以在Spring Boot项目中集成MyBatis-Plus,并使用它提供的CRUD、条件构造器、分页等功能。MyBatis-Plus极大地简化了数据库操作,减少了代码量,同时保持了对SQL的灵活控制。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 读构建可扩展分布式系统:方法与实践04应用服务
  • 低功耗蓝牙模块在健身器材中的应用,让健身体验更智能
  • 【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline
  • vue3常见的bug 修复bug
  • 代码随想录算法训练营day36
  • 老古董Lisp实用主义入门教程(9): 小小先生学习Lisp表达式
  • 微信小程序中的模块化、组件化开发:完整指南
  • 【C++】——string(模拟实现)
  • 全国计算机二级考试C语言篇4——选择题
  • 汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)
  • 0910作业+思维导图
  • SMA2:代码实现详解——Image Encoder篇(Hiera章)
  • Proxyless Service Mesh:下一代微服务架构体系
  • 【HarmonyOS NEXT】实现网络图片保存到手机相册
  • 音视频直播应用场景探讨之RTMP推流还是GB28181接入?
  • JavaScript 如何正确处理 Unicode 编码问题!
  • Docker入门(二) - Dockerfile
  • express如何解决request entity too large问题
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript设计模式与开发实践系列之策略模式
  • Java比较器对数组,集合排序
  • JS 面试题总结
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js如何打印object对象
  • k个最大的数及变种小结
  • mysql常用命令汇总
  • Vue2.x学习三:事件处理生命周期钩子
  • Vultr 教程目录
  • 对超线程几个不同角度的解释
  • 简单易用的leetcode开发测试工具(npm)
  • 解析带emoji和链接的聊天系统消息
  • 看域名解析域名安全对SEO的影响
  • 手写一个CommonJS打包工具(一)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 1.Ext JS 建立web开发工程
  • 7行Python代码的人脸识别
  • AI算硅基生命吗,为什么?
  • k8s使用glusterfs实现动态持久化存储
  • ​secrets --- 生成管理密码的安全随机数​
  • ​VRRP 虚拟路由冗余协议(华为)
  • # Apache SeaTunnel 究竟是什么?
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #QT(TCP网络编程-服务端)
  • (3) cmake编译多个cpp文件
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (libusb) usb口自动刷新
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (黑马C++)L06 重载与继承
  • (回溯) LeetCode 46. 全排列
  • (剑指Offer)面试题34:丑数
  • (译)2019年前端性能优化清单 — 下篇
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...