QueryCondition
# 条件查询构造器
功能:部分方法
TypeHandler
,支持safe-mode
,部分方法支持短路执行,传参为空时不再查询。
# 用到的实体类
@Data
@TableName(value = "user_info", autoResultMap = true)
static class UserInfoWithJsonName {
private Long id;
@TableField(typeHandler = JsonFieldHandler.class)
private Name name;
}
@Data
static class Name implements Serializable{
private String username;
private String nickname;
}
# 用到的TypeHandler(供参考)
public static class JsonFieldHandler extends AbstractJsonFieldHandler<Object> {
ObjectMapper objectMapper = new ObjectMapper();
@Override
public Object parse(String json, TableInfo tableInfo, TableFieldInfo fieldInfo) {
Class<?> fieldType = fieldInfo.getField().getType();
return ((SerSupp<Object>) (() -> objectMapper.readValue(json, fieldType))).get();
}
@Override
@SneakyThrows public String toJson(Object obj, TableInfo tableInfo, TableFieldInfo fieldInfo) {
return objectMapper.writeValueAsString(obj);
}
}
注意
- 以下提到的方法是支持了`TypeHandler`的,其他方法暂未适配
# query
用于初始化条件构造器(QueryCondition)
QueryCondition<UserInfoWithJsonName> wrapper = QueryCondition.query(UserInfoWithJsonName.class)
// 传入实体类的类对象
QueryCondition<UserInfoWithJsonName> wrapper = QueryCondition.query(user);
// 传入实体类的对象
# eq
拼接条件:等于
QueryCondition<UserInfoWithJsonName> wrapper =
QueryCondition.query(UserInfoWithJsonName.class).eq(UserInfoWithJsonName::getName, name);
val list = Database.list(wrapper);
# in
拼接条件:限定范围
QueryCondition<UserInfoWithJsonName> wrapper =
QueryCondition.query(UserInfoWithJsonName.class)
.activeIn(UserInfoWithJsonName::getName, Lists.of(name1, name3));
val list = Database.list(wrapper);
# or
复杂查询:多条件逻辑或
QueryCondition<UserInfoWithJsonName> wrapper =
QueryCondition.query(UserInfoWithJsonName.class)
.in(UserInfoWithJsonName::getName, Lists.of(name1, name3))
.or(i -> i.eq(UserInfoWithJsonName::getName, user2.getName()));
# and
复杂查询:多条件逻辑与
QueryCondition<UserInfoWithJsonName> wrapper =
QueryCondition.query(UserInfoWithJsonName.class)
.eq(UserInfoWithJsonName::getId, 1L)
.and(i -> i.eq(UserInfoWithJsonName::getName, user2.getName()));
# activeEq
场景:当传参为空时,不进行查询,避免阻塞。 拼接条件:等于
注意
- 该方法标记为废弃,自愿选择使用
QueryCondition<UserInfoWithJsonName> wrapper =
QueryCondition.query(UserInfoWithJsonName.class)
.activeEq(UserInfoWithJsonName::getName, null);
val list = Database.list(wrapper);
# activeIn
场景:当传参为空时,不进行查询,避免阻塞。 拼接条件:限定范围
注意
- 该方法标记为废弃,自愿选择使用
QueryCondition<UserInfoWithJsonName> wrapper =
QueryCondition.query(UserInfoWithJsonName.class)
.activeIn(UserInfoWithJsonName::getName, new ArrayList<>());
val list = Database.list(wrapper);
# 支持safe-mode
# 测试用例地址
上次更新: 2024/03/29, 09:17:32