45 lines
1.5 KiB
Java
45 lines
1.5 KiB
Java
package com.imyeyu.spring.util;
|
|
|
|
import com.imyeyu.java.bean.timi.TimiException;
|
|
import com.imyeyu.spring.mapper.BaseMapper;
|
|
import org.apache.ibatis.builder.annotation.ProviderContext;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* 原始 Mapper SQL 代理器
|
|
*
|
|
* @author 夜雨
|
|
* @since 2026-01-05 13:00
|
|
*/
|
|
public class RawSQLProvider extends SQLProvider {
|
|
|
|
@Override
|
|
public String selectAll(ProviderContext context) {
|
|
EntityMeta meta = getEntityMeta(context);
|
|
return "SELECT * FROM %s WHERE 1 = 1".formatted(meta.table);
|
|
}
|
|
|
|
@Override
|
|
public String select(ProviderContext context, Object id) {
|
|
EntityMeta meta = getEntityMeta(context);
|
|
TimiException.required(meta.idFieldColumn, "not found id field in %s".formatted(meta.entityClass));
|
|
return "SELECT %s FROM `%s` WHERE `%s` = #{%s}".formatted(meta.selectAllClause, meta.table, meta.idFieldColumn.columnName, id) + " LIMIT 1";
|
|
}
|
|
|
|
@Override
|
|
public String selectByExample(Object entity) {
|
|
return selectAllByExample(entity) + BaseMapper.LIMIT_1;
|
|
}
|
|
|
|
@Override
|
|
public String selectAllByExample(Object entity) {
|
|
EntityMeta meta = getEntityMeta(entity.getClass());
|
|
String conditionClause = meta.fieldColumnList.stream()
|
|
.filter(fc -> fc.isNotEmpty(entity))
|
|
.map(fc -> "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName))
|
|
.collect(Collectors.joining(" AND "));
|
|
return "SELECT %s FROM `%s` WHERE %s".formatted(meta.selectAllClause, meta.table, conditionClause);
|
|
}
|
|
}
|