# 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
参考:
上一篇: 下一篇:
本章目录