Java Spring:带有动态参数的SimpleJdbcCall
我有一个用于调用postgres函数的dao:Java Spring:带有动态参数的SimpleJdbcCall,java,spring,spring-jdbc,Java,Spring,Spring Jdbc,我有一个用于调用postgres函数的dao: public final class AuthDAO extends UntypedActor { private final ActorRef manager; private final JdbcTemplate jdbcTemplate; private final SimpleJdbcCall jdbcCall; public AuthDAO(ActorRef manager) { t
public final class AuthDAO extends UntypedActor {
private final ActorRef manager;
private final JdbcTemplate jdbcTemplate;
private final SimpleJdbcCall jdbcCall;
public AuthDAO(ActorRef manager) {
this.manager = manager;
jdbcTemplate = DBConfig.jdbcTemplate();
jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withSchemaName("auth")
.withCatalogName("public")
.withoutProcedureColumnMetaDataAccess();
}
public static Props create(ActorRef manager) {
return Props.create(AuthDAO.class, manager);
}
@Override
public void onReceive(Object o) throws Throwable {
if (o instanceof DBMessage) {
DBMessage message = (DBMessage) o;
jdbcCall.declareParameters(new SqlParameter("login", Types.VARCHAR));
Map<String, Object> response = jdbcCall
.withProcedureName(message.getProcedure())
.execute(message.getParams());
System.out.println(response.toString());
}
}
}
public final类AuthDAO扩展了UntypedActor{
私人最终代理基金经理;
私有最终JdbcTemplate JdbcTemplate;
私有最终SimpleJdbcCall;
公共授权DAO(ActorRef管理器){
this.manager=经理;
jdbcTemplate=DBConfig.jdbcTemplate();
jdbcall=newsimplejdbccall(jdbcTemplate)
.withSchemaName(“auth”)
.withCatalogName(“公共”)
.withoutProcedureRecolumnMetadataAccess();
}
创建公共静态道具(ActorRef管理器){
返回Props.create(AuthDAO.class,manager);
}
@凌驾
公共void onReceive(对象o)抛出可丢弃{
if(o DBMessage的instanceof){
DBMessage message=(DBMessage)o;
declareParameters(新的SqlParameter(“login”,Types.VARCHAR));
Map response=jdbcCall
.withProcedureName(message.getProcedure())
.execute(message.getParams());
System.out.println(response.toString());
}
}
}
但现在我必须通过调用jdbcCall.declareParameters()
在函数的参数中显式声明,否则代码将无法工作
那么,有没有一种方法可以动态检测函数参数的名称和类型,并使用这种dao调用只传递函数名称的不同函数呢?I
如果您使用的数据库不是数据库,则需要显式声明
Spring支持的数据库。目前Spring支持元数据查找
以下数据库的存储过程调用数:ApacheDerby,
DB2、MySQL、Microsoft SQL Server、Oracle和Sybase。我们也支持
MySQL、Microsoft SQL Server、,
和Oracle
而且,天哪,我用Postgres