package com.imyeyu.spring.util; import com.imyeyu.java.bean.timi.TimiException; import com.imyeyu.spring.bean.Logic; import com.imyeyu.spring.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; 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(@Param("entity") Object entity, @Param("logic") Logic logic) { return selectAllByExample(entity, logic) + BaseMapper.LIMIT_1; } @Override public String selectAllByExample(@Param("entity") Object entity, @Param("logic") Logic logic) { EntityMeta meta = getEntityMeta(entity.getClass()); String conditionClause = meta.fieldColumnList.stream() .filter(fc -> fc.isNotEmpty(entity)) .map(fc -> "`%s` = #{entity.%s}".formatted(fc.columnName, fc.fieldName)) .collect(Collectors.joining(" %s ".formatted(logic))); return "SELECT %s FROM `%s` WHERE %s".formatted(meta.selectAllClause, meta.table, conditionClause); } }