Skip to content

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.entity

3. 定义实体

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>

下一步

Released under the Apache License 2.0