티스토리 뷰
문제의 코드
<select id="getMemberId" resultType="int">
select
member_id
from
member
where
member_id = 1
</select>
현재 member테이블은 아무런 값이 없어 row가 하나도 없어 쿼리를 실행시 아무값도 안나온다.
위의 쿼리로 테스트
@Test
public void getMemberId() {
int memberId = MemberMapper.selectCount();
assertEquals(“memberId의 값은? ", 0, memberId);
}
결과
2016-10-04 14:21:55 [DEBUG] [BaseJdbcLogger.java:139] - ==> Preparing: SELECT member_id FROM member WHERE member_id = 1
2016-10-04 14:21:55 [DEBUG] [BaseJdbcLogger.java:139] - ==> Parameters:
2016-10-04 14:21:55 [DEBUG] [BaseJdbcLogger.java:139] - <== Total: 0
org.apache.ibatis.binding.BindingException: Mapper method ‘com.member.MemberMapper.selectCount attempted to return null from a method with a primitive return type (int).
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:74)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
at com.sun.proxy.$Proxy29.selectCount(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
결과에서 보듯이 attempted to return null from a method with a primitive return type (int). 오류를 표출한다.
문제는 int형인대 왜 result가 null을 반환을 하는것인가???
이문제는 Mybatis에서 제공하는 TypeHandler의 코드를 확인해보자.
public T getResult(ResultSet rs, int columnIndex) throws SQLException {
Object result = this.getNullableResult(rs, columnIndex);
return rs.wasNull()?null:result;
}
위 코드를 보면 ResultSet가 null이면 null을 반환하고 null이 아니면 조회해온 값을 반환하게 되어 있다.
이와 같은 문제를 해결 할 방법은 resultType를 int = Integer, long = Long로 변경을 하고 소스코드에서 Null처리를 해야 할거 같다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 마이바티스
- Letsencrypt wildcard
- SSL
- letsencrypt
- 마이바티스CamelCase
- camelcase
- Letsencrypt+nginx
- Intellj들여쓰기
- Letsencrypt wildcard auto renew
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함