Many
# 多条数据查询Many
场景:通过某些条件查询出多条数据,然后对这些数据进行处理,比如:高亮、转换、脱敏等等一系列操作
# 所用到的实体类
@Data
public class UserInfo implements IGenerateMapper {
private static final long serialVersionUID = -7219188882388819210L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@Version
private Integer version;
@TableLogic(value = "'2001-01-01 00:00:00'", delval = "NOW()")
private LocalDateTime gmtDeleted;
}
# of
场景: 在进行数据查询之前需要构造的查询条件使用Many.of()进行构造 注: 排除复杂条件查询之外的条件都会通过SFunction返回值进行匹配
final Many<UserInfo, Long, UserInfo> manyQuery = Many.of(UserInfo::getId);
// 代表后续的查询条件除去复杂条件查询之外 都会通过id进行匹配
# eq
场景 拼接条件:等于
List<UserInfo> userInfoList = Many.of(UserInfo::getId).eq(1L).query();
// 将UserInfo实体对应表中的id属性所对应的字段等于1的数据全部查询出来放到一个集合中
# value
场景:映射返回字段,只需要返回指定的字段 注: 底层执行sql时只会查询对应的字段,并不是select * from xxx然后再map指定字段
List<String> nameList = Many.of(UserInfo::getId).eq(1L).value(UserInfo::getName).query();
// 将UserInfo实体对应表中的id属性所对应的字段等于1的数据全都查询出来,并且只返回name字段
# condition
场景:复杂查询自定义拼接
List<String> leAgeNameList =
Many.of(UserInfo::getId)
.eq(1L)
.value(UserInfo::getName)
.condition(w -> w.le(UserInfo::getAge, 20))
.query();
// 将UserInfo实体对应表中的id属性所对应的字段等于1的数据全都查询出来,并且只返回name字段,且age小于等于20
# like
场景: 拼接条件:模糊查询
Many.of(UserInfo::getEmail).value(UserInfo::getName).like("test3").query();
// 将UserInfo实体对应表中的email属性所对应的字段包含test3的数据全都查询出来,并且只返回name字段
# in
场景:拼接条件:in查询
List<String> inNotEmptyNameList = Many.of(UserInfo::getId).in(Arrays.asList(1L, 2L)).value(UserInfo::getName).query();
// 将UserInfo实体对应表中的id属性所对应的字段等于1或者2的数据全都查询出来,并且只返回name字段
# query
场景:拼接完条件之后,执行查询 注:
- 可以传入一个Function函数,用于对查询出来的数据进行处理,参数类型固定为将查询结果保存在Steam中的Steam对象,可以进行一系列处理操作
- 如果query之前没有进行条件构造,那么query()方法会查询出表中所有的数据
final Optional<String> optional = Many.of(UserInfo::getId)
.eq(1L)
.value(UserInfo::getName)
.condition(w -> w.le(UserInfo::getAge, 20))
.query(Steam::findLast);
// 将UserInfo实体对应表中的id属性所对应的字段等于1的数据全都查询出来,并且只返回name字段,且age小于等于20 最后使用Steam.findLast()方法获取最后一个元素
# 测试用例地址
上次更新: 2024/03/29, 09:17:32