MyBatis 조회된 Row가 없을때 VO에서 받기

서현서현·2022년 9월 1일
0

Spring

목록 보기
26/31

부적합한 열유형:1111이 떴다.

뭘 하고 있었냐면

위와같은 정산금을 계산하는 화면에서 ajax를 통해 내부 내용을 바꿔주고 있었다.
근데 이상하게도 이전달로가는 버튼을 두번 누르면!! 7월에 해당하는 검색이 안되고 오류가 터져버리는것이다!! 구글링해본 결과 ajax 사용시 value값이 null이면 이런 오류가 뜰 수 있다고 한다.

일단 dao가 잘 되는지,.. 콘솔에 찍어봤다

위와같이 vo에 값이 잘 바인딩되어야한다. 8월과 9월은 잘된다

그런데 7월... 엥? 예상과 전혀달랐다. VO는 아예 온데간데없이 사라지고 null만 나와버렸다. 각 필드=null이 아니라 vo 자체가 생성이 안됐다!! 더헉

이유는 다음과같다. 오라클에서 쿼리를 실행했을때

위와같이 특정필드만 null이라면 nvl을 사용하든 해서 결국 row를 얻게된다
그러나 나의 경우...


걍 조회된 행이 없다

내가 고민하자 팀원이 찾아준 내용.... MyBatis 구조상 Row가 없을땐 받을 수 없다!

그렇다면 어떻게 해결해야하는가?

https://wanna-b.tistory.com/104

은인같은 포스팅을 발견^^💕 따로 null처리를 해주면 된다

-- 이전 쿼리
select fee_id, fee_sdate, fee_fruse, fee_royal, fee_cost, fee_tplus, fee_tminus, fee_overdue, fee_cpn
from fee
where fran_id= 'CB2022901'
        and fee_sdate = '2022/07/01'
        
        

-- 변경한 쿼리
select fee_id, fee_sdate, fee_fruse, fee_royal, fee_cost, fee_tplus, fee_tminus, fee_overdue, fee_cpn
from fee
where fran_id= 'CB2022901'
        and fee_sdate = '2022/07/01'

union all 

select null,null,null,null,null,null,null,null,null
from dual
where not exists (
                    select fee_id, fee_sdate, fee_fruse, fee_royal, fee_cost, fee_tplus, fee_tminus, fee_overdue, fee_cpn
                    from fee
                    where fran_id= 'CB2022901'
                            and fee_sdate = '2022/07/01'
                    )

근데... 또 muBatis에선 안된다


참나 어쩌라고

해결은... 그냥 분기문으로 했다
생각해보니.... null이 되면 안넘겨주면 되는거임

	@Override
	public FrFeeVO feeList(FrFeeVO vo) {
		
		if(dao.feeList(vo) != null) {
			vo = dao.feeList(vo);
		}
		// 만약 fee테이블에 정보가 없을경우 pay테이블에서 fee기본키로 조회가 불가능 하므로
		if(vo.getFeeId() != null) {
			vo.setFeepayDate(dao.feePay(vo));			
		}
		
		return vo;
	}

첫번쨰 if에 들어있는 dao.feeList가 자꾸 null이 나오던 그녀석이다. 걍 null이 아닐때만 vo에 반영해주도록 하고, getFeeId()또한 위 feeList가 없으면 또 아무것도 없는 Row인놈이라 똑같이 if 걸어주고... 넘겼다 그럼 다음과같이 나온다


값이 있는애들은 잘 나오고


값이 없는애들은 걍 0됨

0개의 댓글