# MybatisPlus-常用代码

# 1. select

// 根据 ID 查询
T selectById(Serializable id);

// 根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 查询(根据ID 批量查询)
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

// 根据 entity 条件,查询全部记录
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 查询(根据 columnMap 条件)
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

// 根据 Wrapper 条件,查询全部记录
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 根据 entity 条件,查询全部记录(并翻页)
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 根据 Wrapper 条件,查询全部记录(并翻页)
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

# 2. QueryWrapper

# 2.1. 实例

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", id);

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getId, id);

# 2.2. 操作符

// eq(等于)
queryWrapper.eq("id", id);

// ne(不等于)
queryWrapper.ne("id", id);

// gt(大于)
queryWrapper.gt("age", age);

// ge(大于等于)
queryWrapper.ge("age", age);

// lt(小于)
queryWrapper.lt("age", age);

// le(小于等于)
queryWrapper.le("age", age);

// like(模糊查询) => column LIKE '%value%'
queryWrapper.like("name", namePart);

// leftLike(左模糊查询) => column LIKE '%value'
queryWrapper.leftLike("name", nameStart);

// rightLike(右模糊查询) => column LIKE 'value%'
queryWrapper.rightLike("name", nameEnd);

// in(包含在指定集合中) => column IN (value1, value2,...)
queryWrapper.in("id", ids); // List<Integer> ids

// notIn(不包含在指定集合中) => column NOT IN (value1, value2,...)
queryWrapper.notIn("id", ids); // List<Integer> ids

// orderByAsc(升序排序) => ORDER BY column ASC
queryWrapper.orderByAsc("age");

// orderByDesc(降序排序) => ORDER BY column DESC
queryWrapper.orderByDesc("age");

// groupBy(分组) => GROUP BY column
queryWrapper.select("department", "count(*) as count");
queryWrapper.groupBy("department");

// having(分组后筛选) => HAVING condition
queryWrapper.select("department", "count(*) as count");
queryWrapper.groupBy("department");
queryWrapper.having("count > 3");

# 2.3. And / Or

// name = "张三" AND age = 18
queryWrapper.eq("name", "张三").eq("age", 18)

// name = "张三" OR age = 18
queryWrapper.eq("name", "张三").or().eq("age", 18)

// (name = "张三" AND age = 18) or (name = "李四" OR age = 19)
queryWrapper
    .or(wq -> wq.eq("name", "张三").eq("age", 18))
    .or(wq -> wq.eq("name", "李四").eq("age", 19))

# 2.4. 参考

# 3. @TableField

说明:

  • 自动注入 创建人、创建时间、更新人、更新时间

示例:

@Data
public abstract class BaseEntity {
    /**
     * 创建者
     */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新者
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}


@Component
public class MybatisPlusHandler implements MetaObjectHandler {
    private final static String CREATE_TIME = "createTime";
    private final static String CREATE_BY = "createBy";
    private final static String UPDATE_TIME = "updateTime";
    private final static String UPDATE_BY = "updateBy";
    private final static String ADMIN = "admin";
    
    @Override
    public void insertFill(MetaObject metaObject) {
        // 新增数据时若对应字段没有值(空串或null)时,以下代码会对该字段进行自动填充
        // 时间的自动填充,时间默认填充当前时区系统时间
        LocalDateTime localDateTime = LocalDateTime.now();
        Date now = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        this.strictInsertFill(metaObject, CREATE_TIME, Date.class, now);
        this.strictInsertFill(metaObject, UPDATE_TIME, Date.class, now);

        // 操作用户名填充
        this.strictInsertFill(metaObject, CREATE_BY, String.class, ADMIN);
        this.strictInsertFill(metaObject, UPDATE_BY, String.class, ADMIN);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 修改数据时无论字段是否有值,都会对该字段进行自动填充,时间默认填充当前时区系统时间
        // 时间的自动填充,时间默认填充当前时区系统时间
        LocalDateTime localDateTime = LocalDateTime.now();
        Date now = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        this.setFieldValByName(UPDATE_TIME, now, metaObject);

        // 操作用户名填充
        this.setFieldValByName(UPDATE_BY, adminName, metaObject);
	
        this.strictUpdateFill(metaObject, "updateBy", String.class, ADMIN);
    }
}

参考:

# 4. @TableLogic

说明:

  • 标记软删除的字段
  • 默认值: '0' - 未删除; '1' - 已删除。

参考:

# 5. 关闭日志

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl

参考:

本章目录