어쨌든 다시 돌아와서 insert 등등을 테스트 하는 중에 예전에는 insert 후에 아무것도 받지 않았었다. 그런데 그렇게 하면 안되겠더라. 지금 사용자를 추가하면서 id를 자동으로 생성되도록 해놨으니 새로 생성한 id가 뭔지는 알아야 하겠기에 방법을 찾아봤다.
mapper xml에 있는 insert 태그 안에서 쓰는 몇 가지 태그가 있는데 그 중 selectKey 태그를 쓰면 가볍게 가져올 수 있다.
내가 ibatis를 사용할 때는 이 기능을 한 번인가 써본 것 같아서 잘 기억은 안나고... 하여간 그 당시와 방법이 다르다. Mybatis에서는 이런식으로 리턴을 받게 되면 최초 insert할 때 전달했던 parameter에 그대로 다시 객체의 값들 전체가 바인딩이 된다.
그러므로 id만 달랑 받아오는게 아닌 User라면 user 전체를 받아오고 거기서 getId()와 같은 식으로 특정 키만 가져와야 한다. 어쨌든 코드를 보면
우선 dao에서 이런 식으로 실행한다.
@Override public String addUser(User user) throws Exception { this.sqlSession.insert("mapper.UserMapper.addUser", user); String id = String.valueOf(user.getId()); this.sqlSession.commit(); return id; }
주목할 부분은 String 타입의 id를 매핑하는 부분이다. insert 쿼리 후에 처음 전달했던 user에 객체의 내용 전체가 들어있다. 그중에서 나한테 필요한 것은 id뿐이니 그것만 getId() 메소드를 이용해 가져와서 id에 매핑한다. 그리고 그걸 return.
그리고 mapper xml 파일의 insert 태그 부분은 아래와 같다.
SELECT LAST_INSERT_ID();
위의 xml에서 selectKey 부분에 주목. 설명할 능력도 없으니 설명은 안한다. 코드 보면 대충 무슨 얘기인지 알테니.
댓글 없음:
댓글 쓰기