MyBatis 插件
lcgyl-mybatis-plugin 提供 MyBatis-Plus ORM 集成,支持 Lambda 查询、逻辑删除、自动填充等功能。
特性
- ✅ MyBatis-Plus 3.5.x 支持
- ✅ 实体基类(BaseEntity)
- ✅ Lambda 表达式查询
- ✅ 逻辑删除
- ✅ 自动填充
- ✅ 分页插件
快速开始
1. 添加依赖
gradle
dependencies {
implementation project(':plugins:data-access:lcgyl-mybatis-plugin')
runtimeOnly 'com.mysql:mysql-connector-j' // 或其他数据库驱动
}2. 配置数据源
yaml
lcgyl:
mybatis:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username: root
password: root
mapper-locations: classpath*:mapper/**/*.xml
type-aliases-package: com.example.entity3. 定义实体
java
import com.baomidou.mybatisplus.annotation.*;
import com.lcgyl.data.mybatis.entity.BaseEntity;
@TableName("users")
public class User extends BaseEntity {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private String email;
@TableLogic
private Integer deleted;
// getters/setters
}4. 创建 Mapper
java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 自定义方法
List<User> selectByStatus(@Param("status") String status);
}5. 创建 Service
java
import com.lcgyl.data.mybatis.service.BaseService;
import org.springframework.stereotype.Service;
@Service
public class UserService extends BaseService<UserMapper, User> {
public User findByEmail(String email) {
return lambdaQuery()
.eq(User::getEmail, email)
.one();
}
public List<User> findByName(String name) {
return lambdaQuery()
.like(User::getName, name)
.list();
}
}Lambda 查询
MyBatis-Plus 提供了强大的 Lambda 查询能力:
java
// 条件查询
List<User> users = userService.lambdaQuery()
.eq(User::getStatus, "active")
.like(User::getName, "张")
.ge(User::getAge, 18)
.orderByDesc(User::getCreatedAt)
.list();
// 更新
userService.lambdaUpdate()
.eq(User::getId, 1L)
.set(User::getStatus, "inactive")
.update();
// 删除
userService.lambdaUpdate()
.eq(User::getId, 1L)
.remove();分页查询
java
// 创建分页对象
Page<User> page = new Page<>(1, 10);
// 分页查询
Page<User> result = userService.lambdaQuery()
.eq(User::getStatus, "active")
.page(page);
// 获取结果
List<User> records = result.getRecords();
long total = result.getTotal();
long pages = result.getPages();逻辑删除
实体类中添加 @TableLogic 注解:
java
@TableName("users")
public class User extends BaseEntity {
@TableLogic
@TableField("is_deleted")
private Integer deleted;
}配置逻辑删除值:
yaml
lcgyl:
mybatis:
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0自动填充
java
@TableName("users")
public class User extends BaseEntity {
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createdAt;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updatedAt;
}配置填充处理器:
java
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createdAt", LocalDateTime::now, LocalDateTime.class);
this.strictInsertFill(metaObject, "updatedAt", LocalDateTime::now, LocalDateTime.class);
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime::now, LocalDateTime.class);
}
}XML Mapper
对于复杂查询,可以使用 XML 映射:
xml
<!-- resources/mapper/UserMapper.xml -->
<?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.example.mapper.UserMapper">
<select id="selectByStatus" resultType="User">
SELECT * FROM users
WHERE status = #{status}
AND is_deleted = 0
</select>
</mapper>