Skip to content

可扩展点

黑铁V edited this page Jul 27, 2019 · 8 revisions

如下可扩展点都是以接口interface形式提供,你可以自行实现,或者修改默认实现类的功能。

ExceptionTranslator

异常处理器,将SQLException转换成RuntimeException的处理器

如果spring-jdbc在Classpath中是SpringExceptionTranslator(利用spring-jdbc的SQLExceptionTranslator)否则是DefaultExceptionTranslator。
通过继承Norm类,重写initExceptionTranslator方法实现扩展。例如:

    public class MyNorm extends Norm{
        @Override
        protected ExceptionTranslator initExceptionTranslator() {
            
        }
    }

该方法的默认实现参考如下:

    protected ExceptionTranslator initExceptionTranslator() {
        if (SpringExceptionTranslator.valid()) {
            return new SpringExceptionTranslator(this);
        } else {
            return new DefaultExceptionTranslator();
        }
    }

NameStrategy

列和表的命名策略,通过 norm.setTableNameStrategynorm.setColumnNameStrategy扩展

扩展CrudDao

CrudDao是通过动态代理实现的,一般你无需直接扩展动态代理的相关代码

我们提供了CrudProxy接口,其中包含了代理时用到的所有方法,(其默认实现为CrudProxyImpl)。

通过继承Norm类,重写createCrudProxy实现:

    public class MyNorm extends Norm{
        @Override
        protected CrudProxy createCrudProxy(QueryGenerator generator) {
            
        }
    }

该方法的实现参考如下:

    protected CrudProxy createCrudProxy(QueryGenerator generator){
        return new CrudProxyImpl(this, generator);
    }

Executor

执行器,接收Connection连接和query,执行请求,通过ExecutorFactory工厂模式创建。

默认实现类为DefaultExecutor,ExecutorFactory的默认实现类为DefaultExecutorFactory。

通过norm.setExecutorFactory扩展

QueryGenerator

生成器,生成query,通过QueryGeneratorFactory工厂模式创建

默认实现类为CrudGenerator,QueryGeneratorFactory的默认实现类为DefaultGeneratorFactory。

通过norm.setGeneratorFactory方法扩展

ResultSetHandler

ResultSetHandler参考了dbutils的设计,将java.sql.ResultSet转换成实体对象的处理器,默认实现类为CrudResultSetHandler。

ResultSetHandler是属于QueryGenerator的,你需要扩展QueryGenerator,调用其setResultSetHandler方法。

        norm.setGeneratorFactory(new DefaultGeneratorFactory(norm){
            @Override
            public CrudGenerator getGenerator(Class<?> type) {
                CrudGenerator generator = super.getGenerator(type);
                generator.setResultSetHandler();
                return generator;
            }
        });
Clone this wiki locally