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-servicedatasource:driver-class-name: org.postgresql.Driverurl: jdbc:postgresql://127.0.0.1:31789/test-dev?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=trueusername: testpassword: 123druid:# 连接池 初始连接数量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+8date-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*/@TableIdprivate 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 {@Overridepublic 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">selectid,name,create_timefrom sys_testwhere 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>