1) Создание класса bean-компонента Config базы данных, в котором вы можете хранить все связанные с базой данных (Oracle) свойства
DatabaseConfigClass
@Configuration
public class DataBaseConfig {
private static final Log LOGGER = LogFactory.getLog(DataBaseConfig.class);
@Autowired
private Environment environment;
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() throws SQLException {
OracleDataSource dataSource = new OracleDataSource();
String url = environment.getProperty("spring.db.jdbc.url");
String userName = environment.getProperty("spring.db.username");
String password = environment.getProperty("spring.db.password");
String driver = environment.getProperty("spring.db.driver-classname");
dataSource.setUser(userName);
dataSource.setPassword(password);
dataSource.setURL(url);
dataSource.setDriverType(driver);
return new JdbcTemplate(dataSource);
}
}
2) Существует многоспособы вызова хранимой процедуры.Один из лучших способов - использовать простой вызов jdbc
ServiceClass
public class getOrders(ApprovalAction approvalActionObj){
List<Orders> orderList= approvalActionObj.getApprovalQsType();
SimpleJdbcCall jdbcCall = new
SimpleJdbcCall(jdbcTemplate).withProcedureName("XX_PROCEDURE")
.withCatalogName("XX_PACKAGE").withoutProcedureColumnMetaDataAccess()
.declareParameters(
new SqlParameter("P_ORDER_ROLLUP", Types.ARRAY,"ALG_ORDER_TAB"),
new SqlOutParameter("O_ERROR_MESSAGE", Types.NUMBER));
Object[][] orderArray = new Object[ordersList.size()][2];
for(int actionIndex = 0; actionIndex < ordersList.size(); actionIndex++)
{
ordersArray[actionIndex][0] = orderList.get(actionIndex).getId();
ordersArray[actionIndex][1] = orderList.get(actionIndex).getType();
}
Map<String, Object> orderResult=jdbcCall.execute(new
MapSqlParameterSource().addValue("P_ORDER_ROLLUP", new
SqlArrayValue(orderArray)));
Integer errorMsg = (String) orderResult.get("O_ERROR_MESSAGE");
}
Примечание: В вашем случае вы можете передать все пользовательские объектыкак массив.