前言
SpringBoot系列Demo代码,使用 SpringBoot 快速整合 MyBatis-Plus
一、MyBatis-Plus简介
MyBatis-Plus 是一个 Mybatis 增强版工具(简称MP),在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。
官网地址:https://baomidou.com/
二、整合MyBatis-Plus
1.创建项目
创建一个 SpringBoot 项目:https://www.jianshu.com/p/94e02f060f13
2.添加pom引用
在pom.xml文件中添加MyBatis-Plus依赖和mysql 相关依赖。
com.baomidou
mybatis-plus-boot-starter
3.4.0
mysql
mysql-connector-java
3.配置
在 application.yml 文件中配置 mysql 数据源信息和MyBatis-Plus相关配置。
#mysql
spring:
datasource:
url: jdbc:mysql://localhost:3306/local_develop?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
#mybatis-plus
mybatis-plus:
global-config:
db-config:
#主键策略
id-type: auto
field-strategy: not_empty
#驼峰下划线转换
column-underline: true
#逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1
db-type: mysql
#声明全局默认类名的对应的表的前缀
table-prefix: t_
refresh: false
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
#打印出sql语句
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
表名和实体类名要对应,可以采用全局配置table-prefix: t_
,也可以在实体类上加上@TableName("表名")
三、简单示例
1.代码示例
(1)配置分页插件
编写一个 配置类,内部使用 @Bean 注解将 PaginationInterceptor 交给 Spring 容器管理。
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
idea提示PaginationInterceptor被弃用,尽管不影响使用,但总感觉不舒服。
所以又换成了如下代码:
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
// @Bean
// public PaginationInterceptor paginationInterceptor() {
// return new PaginationInterceptor();
// }
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,
* 需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
}
(2)编写代码
Mapper继承BaseMapper ,Service继承IService,其中的方法能实现大部分功能。
SysUserMapper.java
@Mapper
public interface SysUserMapper extends BaseMapper {
}
SysUserService.java,在Service自定义两个方法
public interface SysUserService extends IService {
/**
* 通过手机号或openId查询用户信息
*
* @param param
* @return
*/
SysUser getByPhoneOrOpenId(String param);
/**
* 查询分页列表数据
*
* @return
*/
Page selectPage(JSONObject params);
}
SysUserServiceImpl.java
@Service
public class SysUserServiceImpl extends ServiceImpl implements SysUserService {
@Override
public SysUser getByPhoneOrOpenId(String param) {
// 参数设置
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getPhone, param);
wrapper.or();
wrapper.eq(SysUser::getOpenId, param);
// 查询用户信息
SysUser user = baseMapper.selectOne(wrapper);
return user;
}
@Override
public Page selectPage(JSONObject params) {
// 参数设置
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
// 逻辑存在
wrapper.eq(SysUser::getLogicDel, 1);
// 模糊查询条件
if (params.containsKey("phone") && StringUtils.isNotBlank(params.getString("phone"))) {
wrapper.like(SysUser::getPhone, params.get("phone"));
}
if (params.containsKey("userName") && StringUtils.isNotBlank(params.getString("userName"))) {
wrapper.like(SysUser::getPhone, params.get("userName"));
}
// 当前页
int pageNumber = params.getIntValue("pageNumber");
// 每页条数
int pageSize = params.getIntValue("pageSize");
// 创建一个Page对象
Page page = new Page(pageNumber, pageSize);
return baseMapper.selectPage(page, wrapper);
}
}
SysUserController.java
@RestController
@RequestMapping("/user")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@PostMapping("/getUserByCondition")
public ApiResponse getUserByCondition(@RequestBody String jsonStr) {
JSONObject object = JSON.parseObject(jsonStr);
String param = object.getString("param");
SysUser user = sysUserService.getByPhoneOrOpenId(param);
return ApiResponse.ok(user);
}
@PostMapping("/list")
public ApiResponse list(@RequestBody String jsonStr) {
JSONObject object = JSON.parseObject(jsonStr);
Page page = sysUserService.selectPage(object);
return ApiResponse.ok(page);
}
}
2.测试结果
http://localhost:8080/user/list
总结
以上就是今天要讲的内容,本文仅仅简单介绍了MyBatis-Plus的使用,而MyBatis-Plus提供了大量能使我们快速便捷地处理数据的函数和方法。
其中MyBatis-Plus也提供了代码生成器(与mybatis 中的 mybatis-generator-core 类似),参考https://baomidou.com/guide/generator.html
« 上一章:SpringBoot —— 搭建SpringBoot+Maven项目
» 下一章:SpringBoot —— Swagger UI、Swagger-Bootstrap-UI,API实时接口文档
创作不易,关注、点赞就是对作者最大的鼓励,欢迎在下方评论留言
求关注,定期分享Java知识,一起学习,共同成长。