SQL/iBatis, MyBatis
[ibatis] insert(), update(), delete() return 값, 실행 후 성공 여부 확인 / insert() 후 PK값 받아오는 방법 / insert() 후 return값 사용 꼼수
도미노&
2017. 3. 18. 15:39
# ibatis insert(), update(), delete() return 값, 실행 후 성공 여부 확인
# insert() 후 PK값 받아오는 방법
# insert() 후 return값 사용 꼼수
# ibatis에서 insert(), update(), delete() 를 실행한 후 return되는 값
| 성공 | 실패 |
insert() | null | e 에러 |
update() | 1 | 0 |
delete() | 삭제된 row수 | 0 |
# insert return값 사용 꼼수TIP!
insert 성공 여부 받아와서 그 다음 로직을 처리해야 되는 경우 꼼수TIP !
1. insert 후 PK값 가져오기
1 2 3 4 5 6 | <insert id="insert" parameterClass="kr.co.tocsg.vo.Bean"> INSERT INTO ~~ <selectKey keyProperty="id" resultClass="int"> SELECT ID() </selectKey> </insert> |
예)
** 참고:DB 오라클
1 2 3 4 5 6 7 8 | <insert id="insertUser" parameterClass="kr.co.tocsg.vo.UserBean"> insert into INFO_USER ("USER_SEQ", "USER_ID", "USER_NAME", "REG_DT") values (USER_SEQ.nextval, #USER_ID#, #USER_NAME#, #REG_DT#) <selectKey keyProperty="user_seq" resultClass="int"> SELECT USER_SEQ.CURRVAL FROM DUAL </selectKey> </insert> |
2. update() 사용하기
ibatis에서 insert()하게 되면 성공 시 null을 리턴하고 실패 시 에러를 리턴하기 때문에
오브젝트 객체형으로 리턴 값을 받아와야한다.
(아~ 번거롭고 귀찮고 일관성 없음)
그래서 내가 써본 방법.
insert() 대신에 update()를 사용한다.
(검증된 방법인지 모르겠으나...)
Query.xml
1 2 3 4 | <insert id="insertUser" parameterClass="kr.co.tocsg.vo.UserBean"> INSERT INTO "INFO_USER"(user_id,user_nm) VALUES (#user_id#, #user_nm#) </insert> |
DAO.java
1 2 3 4 5 6 7 8 9 | public int insertUser(UserBean user) { int rst = 0; try { rst = DbManager.getSqlMapInstance().update("insertUser", user); } catch (SQLException e) { e.printStackTrace(); } return rst; } |
Proc.java
1 2 3 4 5 6 7 | int rst = userDao.insertUser(bean); if(rst > 0){ //성공 }else{ //실패 } |
이렇게 update() 함수를 사용해 insert쿼리를 날려주면
return 값으로 1을 반환한다.
출처: http://blog.naver.com/PostView.nhn?blogId=elren&logNo=220796602129