support equals or like Example for page
This commit is contained in:
@ -50,25 +50,34 @@ public class SQLProvider {
|
||||
* @param page 分页参数
|
||||
* @return SQL
|
||||
*/
|
||||
public String listByPage(ProviderContext context, @Param("page") Page page) {
|
||||
public String listByPage(ProviderContext context, @Param("page") Page<?> page) {
|
||||
EntityMeta meta = getEntityMeta(context);
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT %s FROM `%s` WHERE 1 = 1".formatted(meta.selectAllClause, meta.table));
|
||||
|
||||
// 处理软删除
|
||||
if (meta.canDelete) {
|
||||
sql.append(" AND (`deleted_at` IS NULL OR %s < `deleted_at`)".formatted(Time.now()));
|
||||
}
|
||||
// 处理模糊查询
|
||||
if (TimiJava.isNotEmpty(page.getLikeMap())) {
|
||||
for (Map.Entry<String, String> item : page.getLikeMap().entrySet()) {
|
||||
sql.append(" AND `%s` LIKE CONCAT('%%', #{likeMap.%s}, '%%')".formatted(
|
||||
Text.camelCase2underscore(item.getKey()),
|
||||
item.getKey()
|
||||
));
|
||||
}
|
||||
if (TimiJava.isNotEmpty(page.getEqualsExample())) {
|
||||
// 精准查询
|
||||
Object obj = page.getEqualsExample();
|
||||
EntityMeta metaExample = getEntityMeta(obj.getClass());
|
||||
String conditionClause = metaExample.fieldColumnList.stream()
|
||||
.filter(fc -> fc.isNotNull(obj))
|
||||
.map(fc -> "`%s` = '%s'".formatted(fc.columnName, fc.getAsString(obj)))
|
||||
.collect(Collectors.joining(" AND "));
|
||||
sql.append(conditionClause);
|
||||
}
|
||||
// 处理排序
|
||||
if (TimiJava.isNotEmpty(page.getLikeExample())) {
|
||||
// 模糊查询
|
||||
Object obj = page.getLikeExample();
|
||||
EntityMeta metaExample = getEntityMeta(obj.getClass());
|
||||
String conditionClause = metaExample.fieldColumnList.stream()
|
||||
.filter(fc -> fc.isNotNull(obj))
|
||||
.map(fc -> "`%s` LIKE CONCAT('%%', '%s', '%%')".formatted(fc.columnName, fc.getAsString(obj)))
|
||||
.collect(Collectors.joining(" AND "));
|
||||
sql.append(conditionClause);
|
||||
}
|
||||
// 排序
|
||||
if (TimiJava.isNotEmpty(page.getOrderMap())) {
|
||||
sql.append(" ORDER BY ");
|
||||
for (Map.Entry<String, BaseMapper.OrderType> item : page.getOrderMap().entrySet()) {
|
||||
@ -99,22 +108,32 @@ public class SQLProvider {
|
||||
* @param page 分页参数
|
||||
* @return SQL
|
||||
*/
|
||||
public String countByPage(ProviderContext context, @Param("page") com.imyeyu.spring.bean.Page page) {
|
||||
public String countByPage(ProviderContext context, @Param("page") Page<?> page) {
|
||||
EntityMeta meta = getEntityMeta(context);
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT COUNT(*) FROM `%s` WHERE 1 = 1".formatted(meta.table));
|
||||
// 处理软删除
|
||||
if (meta.canDelete) {
|
||||
sql.append(" AND (`deleted_at` IS NULL OR %s < `deleted_at`)".formatted(Time.now()));
|
||||
}
|
||||
// 处理模糊查询
|
||||
if (TimiJava.isNotEmpty(page.getLikeMap())) {
|
||||
for (Map.Entry<String, String> item : page.getLikeMap().entrySet()) {
|
||||
sql.append(" AND `%s` LIKE CONCAT('%%', #{likeMap.%s}, '%%')".formatted(
|
||||
Text.camelCase2underscore(item.getKey()),
|
||||
item.getKey()
|
||||
));
|
||||
}
|
||||
if (TimiJava.isNotEmpty(page.getEqualsExample())) {
|
||||
// 精准查询
|
||||
Object obj = page.getEqualsExample();
|
||||
EntityMeta metaExample = getEntityMeta(obj.getClass());
|
||||
String conditionClause = metaExample.fieldColumnList.stream()
|
||||
.filter(fc -> fc.isNotNull(obj))
|
||||
.map(fc -> "`%s` = '%s'".formatted(fc.columnName, fc.getAsString(obj)))
|
||||
.collect(Collectors.joining(" AND "));
|
||||
sql.append(conditionClause);
|
||||
}
|
||||
if (TimiJava.isNotEmpty(page.getLikeExample())) {
|
||||
// 模糊查询
|
||||
Object obj = page.getLikeExample();
|
||||
EntityMeta metaExample = getEntityMeta(obj.getClass());
|
||||
String conditionClause = metaExample.fieldColumnList.stream()
|
||||
.filter(fc -> fc.isNotNull(obj))
|
||||
.map(fc -> "`%s` LIKE CONCAT('%%', '%s', '%%')".formatted(fc.columnName, fc.getAsString(obj)))
|
||||
.collect(Collectors.joining(" AND "));
|
||||
sql.append(conditionClause);
|
||||
}
|
||||
return sql.toString();
|
||||
}
|
||||
@ -528,6 +547,14 @@ public class SQLProvider {
|
||||
return !isNull(entity);
|
||||
}
|
||||
|
||||
public String getAsString(Object obj) {
|
||||
try {
|
||||
return field.get(obj).toString();
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public Field getField() {
|
||||
return field;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user