ybatis가 int 또는 Integer 유형의 오류를 반환하는 해결 방법

2284 단어 mybatisint유형
다음과 같은 오류가 발생합니다.
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Mapper method 'com.bill.springMybatis.dao.UserDao.getUserIdByName attempted to return null from a method with a primitive return type (int).
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:894)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
반환 형식을 봉인 형식 Integer 또는 기본 형식 int로 설정하면 오류가 발생할 수 있습니다.
예:

<select id="queryPaySum" resultType="java.lang.Integer" parameterType="map" > 
  select sum(p.CASH_FEE) from PAY_INFO p 
  where 1=1 
     and p.TRADE_RESULT_CODE = #{traderesultcode} 
</select>
제가 사용하는 Oracle은 nvl() 함수를 이용하여 문제를 해결합니다.

<select id="queryPaySum" resultType="java.lang.Integer" parameterType="map" > 
  select nvl(sum(p.CASH_FEE), 0) from PAY_INFO p 
  where 1=1 
     and p.TRADE_RESULT_CODE = #{traderesultcode} 
</select> 
보충:
다음 항목은 빈 값을 ISNULL(), NVL(), IFNULL() and COALESCE() 함수로 대체합니다.
데이터베이스 작업에서 함수 SUM () 과 같이 검색된 빈 값을 대체하는 경우가 많습니다. 이 함수는 값이 없으면 NULL로 되돌아옵니다. 이것은 우리가 원하지 않는 것입니다.
MySQL에서는 다음과 같이 쓸 수 있습니다.

select IFNULL(sum(data),0) ...
SQLSERVER에서는 다음과 같이 쓸 수 있습니다.

select ISNULL(sum(data),0) ...
Oracle에서는 다음과 같이 쓸 수 있습니다.

select NVL(sum(data),0) ...
모든 데이터베이스에 적용되는 방법은 다음과 같습니다.

select COALESCE(sum(data),0) ...
COALESCE() 사용법:
 COALESCE(value,...)
첫 번째는null이 아닌 값을 되돌려줍니다. 매개 변수 목록이 모두null이면null을 되돌려줍니다.

sSELECT COALESCE(NULL,1);
    -> 1
SELECT COALESCE(NULL,NULL,NULL);
    -> NULL

좋은 웹페이지 즐겨찾기