Spring 호출 저장 프로시저 반환 결과 집합
4809 단어 spring
그러나 결과 집합, sqlServer (ResultSet), Oracle (커서) 을 직접 구성 하 는 방식
많은 경우 에 우 리 는 이 정 보 를 List < Map > 으로 봉 하거나 List < Bean > 의 형식 으로 응용 층 에 되 돌려 주어 야 한다.
구현 방식:
@Override
public List<Map<String, Object>> callProcedure(String spName,Object[] paramValues) throws SQLException {
List<Map<String, Object>> rows = null;
CommonStoredProcedure sp = new CommonStoredProcedure(this.getJdbcTemplate(),spName);
rows = sp.queryList(Arrays.asList(paramValues));
return rows==null?new ArrayList(0):rows;
}
CommonStoredProcedure
Stored Procedure 추상 클래스 계승
public List queryList(List inParams){
List result = null;
Map<String,Object> paramMap =
new HashMap<String,Object>();
for(int i=0;i<inParams.size();i++){
Object paramValue = inParams.get(i);
//
String paramName = "In_"+String.valueOf(i);
int paramType = getSqlType(paramValue);
setParameter(paramName,paramType); paramMap.put(paramName, paramValue);
}
setInParam(paramMap);
//
declareParameter(new SqlReturnResultSet("Out",rowMapper));
Map<String,Object> map = execute();
result = (List)map.get("Out");
return result == null?new ArrayList(0):result;
}
위의 코드 는 DB2 와 SQLSERVER 에 모두 사용 할 수 있 지만,
Oacle 은 좀 달라 요.
그 는 SqlOutParameter 를 사용 해 야 한다 고 설정 했다.
인용 하 다.
Oracle 의 버 전 은 매우 비슷 하 다. 다만 Oracle 은 정규 출력 매개 변 수 를 사용 하여 결과 집합 을 전송 할 뿐이다.이 매개 변 수 는 Oracle. jdbc. Oracle Types. CURSOR 형식 전에 설명 해 야 하 며, Row Mapper 를 세 번 째 매개 변수 로 전송 해 야 합 니 다.이것 은 정규 SqlOutParameter 출력 매개 변수 이기 때문에 다른 유형의 출력 매개 변수 와 같은 순서 로 설명 해 야 합 니 다.
declareParameter(new SqlOutParameter("genre", oracle.jdbc.OracleTypes.CURSOR, new MapGenre()));
전체 코드
public class CommonStoredProcedure extends StoredProcedure {
private Map<String,?> inParam;
private RowMapper rowMapper = new ColumnMapRowMapper();
public CommonStoredProcedure(DataSource ds, String spName){
super(ds,spName);
}
public CommonStoredProcedure(JdbcTemplate jdbcTemplate, String name) {
super(jdbcTemplate,name);
}
public void setMapperBean(Class mappedClass){
rowMapper = new HeipBeanPropertyRowMapper(mappedClass);
}
public List queryList(List inParams){
List result = null;
Map<String,Object> paramMap =
new HashMap<String,Object>();
for(int i=0;i<inParams.size();i++){
Object paramValue = inParams.get(i);
String paramName = "In_"+String.valueOf(i);
int paramType = getSqlType(paramValue);
setParameter(paramName,paramType); paramMap.put(paramName, paramValue);
}
setInParam(paramMap);
declareParameter(new SqlReturnResultSet("Out",rowMapper));
Map<String,Object> map = execute();
result = (List)map.get("Out");
return result == null?new ArrayList(0):result;
}
public Map<String,Object> execute(){
compile();
return execute(inParam);
}
public void setInParam(Map<String,?> inParam){
this.inParam = inParam;
}
public void setOutParameter(String column,int type,RowMapper rowMapper){
declareParameter(new SqlOutParameter(column,type,rowMapper));
}
public void setParameter(String column,int type){
declareParameter(new SqlParameter(column,type));
}
public void setParameters(String[] columns, int[] types) {
for (int i = 0; i < columns.length; i++) {
setParameter(columns[i],types[i]);
}
}
private static int getSqlType(Object obj){
if (obj instanceof String) {
return Types.VARCHAR;
}
if (obj instanceof Long
||obj instanceof BigDecimal
||obj instanceof Double
||obj instanceof Integer) {
return Types.NUMERIC;
}
if (obj instanceof Date) {
return Types.DATE;
}
/*if (obj instanceof Boolean) {
return Types.NUMERIC;
}*/
return Types.OTHER;
}
}
발췌:
Spring DAO 의 저장 과정의 고급 용법
http://westzq.blog.hexun.com/6353026_d.html
Spring DAO 의 저장 과정의 고급 용법
http://blog.163.com/z278440337@126/blog/static/186995032008420102635244/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.