-
Notifications
You must be signed in to change notification settings - Fork 1
可扩展点
如下可扩展点都是以接口interface形式提供,你可以自行实现,或者修改默认实现类的功能。
异常处理器,将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();
}
}
列和表的命名策略,通过 norm.setTableNameStrategy
和 norm.setColumnNameStrategy
扩展
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);
}
执行器,接收Connection连接和query,执行请求,通过ExecutorFactory工厂模式创建。
默认实现类为DefaultExecutor,ExecutorFactory的默认实现类为DefaultExecutorFactory。
通过norm.setExecutorFactory扩展
生成器,生成query,通过QueryGeneratorFactory工厂模式创建
默认实现类为CrudGenerator,QueryGeneratorFactory的默认实现类为DefaultGeneratorFactory。
通过norm.setGeneratorFactory方法扩展
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;
}
});