Skip to content

SQL 拦截器

Bean Searcher 支持配置 多个 SQL 拦截器 来自定义修改 SQL 的生成规则。

SqlInterceptor

java
/**
 * Sql 拦截器
 * @author Troy.Zhou @ 2021-11-03
 * @since v3.0.0
 */
public interface SqlInterceptor {

    /**
     * Sql 拦截
     * @param <T> 泛型
     * @param searchSql 检索 SQL 信息(非空)
     * @param paraMap 原始检索参数(非空)
     * @param fetchType 检索类型(v3.6.0 新增参数)
     * @return 新的检索 SQL(非空)
     */
    <T> SearchSql<T> intercept(SearchSql<T> searchSql, Map<String, Object> paraMap, FetchType fetchType);

}

在 SQL 拦截器中,我们可以对 SearchSql 进行修改,来实现我们自定义的逻辑。

配置(SpringBoot / Grails)

在 SpringBoot / Grails 项目中,使用 bean-searcher-boot-starter 依赖时,只需要把定义好的 SqlInterceptor 声明为一个 Bean 即可:

java
@Bean
public SqlInterceptor myFitstSqlInterceptor() {
    return new MyFitstSqlInterceptor();
}

@Bean
public SqlInterceptor mySecondSqlInterceptor() {
    return new MySecondSqlInterceptor();
}

配置(非 Boot 的 Spring 项目)

xml
<bean id="mapSearcher" class="cn.zhxu.bs.implement.DefaultMapSearcher">
    <!-- 省略其它属性配置,BeanSearcher 检索器也同此配置 -->
    <property name="interceptors">
        <list>
            <bean class="com.example.MyFitstSqlInterceptor" />
            <bean class="com.example.MySecondSqlInterceptor" />
        </list>
    </property>
</bean>

配置(Others)

java
MapSearcher mapSearcher = SearcherBuilder.mapSearcher()
        // 省略其它属性配置,BeanSearcher 检索器也同此配置
        .addInterceptor(new MyFitstSqlInterceptor())
        .addInterceptor(new MySecondSqlInterceptor())
        .build();

基于 Apache 许可发布