sql server row_number over order by 와 mybatis selectList
- 작성자 :
- 홍*동
- 작성일 :
- 2019-09-17 15:46:09
- 조회수 :
- 2,083
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
안녕하세요.. 기본적인 것 같은데.. 웹에서 아무리 구글링 해보아도 확인이 되지 않아서 여줘봅니다.
현재환경은 egovframework 3.6.0
스프링 4.3.4.RELEASE 입니다
다름이 아니라
sql xml 에서 아래와 같이 sql을 정의하고
<select id="getList" parameterType="SearchVO" resultType="myVO">
SELECT row_number over (order by a.컬럼명), a.* FROM Tbl_List a
</select>
DAO에서 불러오는 LIST 목록을 보면 정렬 순서가 row_number over( order by 컬럼명) 과 전혀 상이하게 넘어옵니다
SQL 결과집합 자체에 order by 주는 것은 동일하게 순서가 넘어오는데..
분석함수인 row_number over (order by 컬럼명)을 적용하면 Mybatis 를 타고 넘어오는 리스트의 순서가 실제 sql을 돌렸을때 나오는
순서와 상이합니다
public List<myVO> getReqLoanList(SearchVO paramVO) throws Exception{
return selectList("getList", paramVO);
}
예를 들어 DB는 홍길동, 김길동, 삼길동 순으로 결과집합이 뿌려진다면
자바쪽 List객체에는 김길동, 삼길동, 홍길동 이런 식으로
row_number over 에서 지정한 order by 와 상관없이 목록의 순서가 넘어와서
1. 원인이 무엇인지
2. 해결방법은 무엇인지
PS) LinkedHashMap으로 resultType을 지정하면 된다고 하는데...
저희 프로젝트에서는 resultType으로 VO 타입을 쓰고 있어서...
LinkedHashMap 방법으로 가능한지도 알고 싶습니다
감사합니다
현재환경은 egovframework 3.6.0
스프링 4.3.4.RELEASE 입니다
다름이 아니라
sql xml 에서 아래와 같이 sql을 정의하고
<select id="getList" parameterType="SearchVO" resultType="myVO">
SELECT row_number over (order by a.컬럼명), a.* FROM Tbl_List a
</select>
DAO에서 불러오는 LIST 목록을 보면 정렬 순서가 row_number over( order by 컬럼명) 과 전혀 상이하게 넘어옵니다
SQL 결과집합 자체에 order by 주는 것은 동일하게 순서가 넘어오는데..
분석함수인 row_number over (order by 컬럼명)을 적용하면 Mybatis 를 타고 넘어오는 리스트의 순서가 실제 sql을 돌렸을때 나오는
순서와 상이합니다
public List<myVO> getReqLoanList(SearchVO paramVO) throws Exception{
return selectList("getList", paramVO);
}
예를 들어 DB는 홍길동, 김길동, 삼길동 순으로 결과집합이 뿌려진다면
자바쪽 List객체에는 김길동, 삼길동, 홍길동 이런 식으로
row_number over 에서 지정한 order by 와 상관없이 목록의 순서가 넘어와서
1. 원인이 무엇인지
2. 해결방법은 무엇인지
PS) LinkedHashMap으로 resultType을 지정하면 된다고 하는데...
저희 프로젝트에서는 resultType으로 VO 타입을 쓰고 있어서...
LinkedHashMap 방법으로 가능한지도 알고 싶습니다
감사합니다
A
안녕하세요.
표준프레임워크센터 입니다.
기재하신 내용으로 보아
일반적인 표준 SQL문은 정상적으로 출력이 되나
MSSQL에서 자체적으로 사용하는
함수에서의 문제가 되는듯 합니다.
해당 부분은
표준프레임워크와 직접적인 관계 없어 보입니다.
MSSQL을 지원하는 JDBC 드라이버를
SQL Server와 호환되는 가장 최신버전을 사용해 보셔야 할듯 합니다.
JDBC드라이버가 표준 드라이버라고 볼수 있는데
해당 기능을 지원하지 않는게 아닌가 추측이 됩니다.
관련하여 MS사에서 배포하는 안정화 버전이 있을듯 합니다.
Mybatis API와 JDBC 드라이버의 간의
데이타 객체 전달에 있어서
문제일수도 있지 않을까 예상 합니다.
Mybatis API의 버전도 가급적 최신 버전을 사용하여
테스트를 시도해 보셔야 할듯 합니다.
표준프레임워크 v3.6에 기본적으로
추가되어 있는 mybatis버전은
3.3.0입니다.
다음 페이지를 참고하실수 있습니다.
https://www.egovframe.go.kr/EgovOSS.jsp?menu=1&submenu=2&leftsub=3
LinkedHashMap으로 처리하는 방법에 대해서는
센터에서 확인된바가 없습니다.
해당 자료형으로 수정하여도
Row의 순서가 바뀌는 부분이라 효과는 없을것으로 예상됩니다.
감사합니다.
표준프레임워크센터 입니다.
기재하신 내용으로 보아
일반적인 표준 SQL문은 정상적으로 출력이 되나
MSSQL에서 자체적으로 사용하는
함수에서의 문제가 되는듯 합니다.
해당 부분은
표준프레임워크와 직접적인 관계 없어 보입니다.
MSSQL을 지원하는 JDBC 드라이버를
SQL Server와 호환되는 가장 최신버전을 사용해 보셔야 할듯 합니다.
JDBC드라이버가 표준 드라이버라고 볼수 있는데
해당 기능을 지원하지 않는게 아닌가 추측이 됩니다.
관련하여 MS사에서 배포하는 안정화 버전이 있을듯 합니다.
Mybatis API와 JDBC 드라이버의 간의
데이타 객체 전달에 있어서
문제일수도 있지 않을까 예상 합니다.
Mybatis API의 버전도 가급적 최신 버전을 사용하여
테스트를 시도해 보셔야 할듯 합니다.
표준프레임워크 v3.6에 기본적으로
추가되어 있는 mybatis버전은
3.3.0입니다.
다음 페이지를 참고하실수 있습니다.
https://www.egovframe.go.kr/EgovOSS.jsp?menu=1&submenu=2&leftsub=3
LinkedHashMap으로 처리하는 방법에 대해서는
센터에서 확인된바가 없습니다.
해당 자료형으로 수정하여도
Row의 순서가 바뀌는 부분이라 효과는 없을것으로 예상됩니다.
감사합니다.