MyBatis-Plus 是 MyBatis 的一个增强工具包,它在原有的 MyBatis 框架之上提供了更多便捷的功能和增强,有助于简化开发流程、提高开发效率。以下是 MyBatis-Plus 的一些主要特点和功能:
-
CRUD 操作增强: MyBatis-Plus 提供了一套强大的 CRUD 方法,可以帮助开发者快速完成常见的数据库操作,无需编写繁琐的 SQL 语句,从而简化了数据访问的操作。
-
条件构造器: MyBatis-Plus 提供了灵活的条件构造器,可以方便地动态拼接 SQL 条件,支持链式调用,使得条件构造更加简单和灵活。
-
代码生成器: MyBatis-Plus 提供了代码生成器工具,能够根据数据库表结构自动生成 Entity、Mapper、Service、Controller 等代码,大大减少了开发者的工作量。
-
性能优化: MyBatis-Plus 对 MyBatis 进行了一系列的性能优化,提升了查询的效率和性能,使得系统更加稳定和高效。
-
自动填充: MyBatis-Plus 支持实体类字段的自动填充功能,可以在插入或更新数据时自动填充指定的字段,例如创建时间、更新时间等。
-
乐观锁和逻辑删除: MyBatis-Plus 提供了乐观锁和逻辑删除的功能,开发者可以通过简单的配置,在实体类中实现乐观锁和逻辑删除的功能,提高数据安全性和稳定性。
总的来说,MyBatis-Plus 是一个功能丰富、易用的 MyBatis 增强工具包,可以帮助开发者更加便捷地进行数据库操作和开发工作。
1、引用Maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2、YAML配置
spring:
application:
name: test-service
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://127.0.0.1:31789/test-dev?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: test
password: 123
druid:
# 连接池 初始连接数量
initial-size: 10
# 连接池 最大连接数量
max-active: 200
# 获取连接时最大等待时间,60秒。
max-wait: 60000
# Destory线程中如果检测到当前连接闲置时间大于 5分钟,则关闭当前连接。
min-evictable-idle-time-millis: 300000
# 最小连接数量
min-idle: 10
#时区转换
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
#mybatis配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDelete # 全局逻辑删除的实体字段名
logic-delete-value: true # 逻辑已删除值
logic-not-delete-value: false # 逻辑未删除值
configuration:
map-underscore-to-camel-case: true #下划线命名转换为驼峰命名
auto-mapping-behavior: full #自动映射所有字段
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #日志输出
mapper-locations: classpath*:mappers/**/*Mapper.xml #指定 Mapper XML 文件位置
3、entity实体类
/**
* @author Lucas
* date 2024/4/8 11:40
* description 测试表
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_test")
public class SysTest {
/**
* ID
*/
@TableId
private Integer id;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* 创建时间
*/
private Date createTime;
/**
* 逻辑删除(false:未删除、true:删除)
*/
private Boolean isDelete;
}
3、分页DTO
/**
* @author Lucas
* date 2024/4/1 19:02
* description 分页DTO
*/
@Data
public class PageDto {
/**
* 页码
*/
@NotNull(message = "page不允许为空")
private Integer page;
/**
* 条数
*/
@NotNull(message = "size不允许为空")
private Integer size;
}
4、测试Service
/**
* @author Lucas
* date 2024/4/8 11:49
* description 测试Service
*/
public interface TestService extends IService<SysTest> {
/**
* 测试分页
* @param testPageDto
* @return
*/
CommonPage<TestVo> testListPage(TestPageDto testPageDto);
}
5、测试ServiceImpl
/**
* @author Lucas
* date 2024/4/8 11:50
* description 测试ServiceImpl
*/
@Service
public class TestServiceImpl extends ServiceImpl<SysTestMapper, SysTest> implements TestService {
@Override
public CommonPage<TestVo> testListPage(TestPageDto dto) {
PageHelper.startPage(dto.getPage(), dto.getSize());
LambdaQueryWrapper<SysTest> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysTest::getIsDelete, Boolean.FALSE);
queryWrapper.eq(StrUtil.isNotBlank(dto.getName()), SysTest::getName, dto.getName());
List<SysTest> sysTests = this.list(queryWrapper);
return new CommonPage<>().restPage(sysTests, TestVo.class);
}
}
6、测试Mapper
/**
* @author Lucas
* date 2024/4/8 11:46
* description 测试Mapper
*/
@Mapper
public interface SysTestMapper extends BaseMapper<SysTest> {
/**
* 测试接口
* @param dto
* @param userId
* @return
*/
List<TestVo> testList(@Param("dto") TestDto dto, @Param("userId") String userId);
}
7、resources/mappers目录文件下SysTestMapper.xml(自定义SQL操作)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.test.service.mapper.SysTestMapper">
<select id="testList" resultType="com.test.service.model.vo.TestVo">
select
id,
name,
create_time
from sys_test
where user_id = #{userId}
<if test="dto.name != null and dto.name != '' ">
AND name = #{dto.name}
</if>
<if test="dto.startTime != null">
AND create_time >= #{dto.startTime}
</if>
<if test="dto.endTime != null">
AND create_time <= #{dto.endTime}
</if>
</select>
</mapper>