본문 바로가기

DB

Mybatis에서 DAO 구현체를 자동으로 생성하기

728x90

방법1 - Mapper XML 파일을 기준으로 설정하기

1. pms/mapper/XxxMapper.xml 파일 변경

<mapper namespace="com.eomcs.pms.dao.MemberDao">
</mapper>

2. mybatis-config.xml 파일 변경

    <mapper resource="com/eomcs/pms/mapper/BoardMapper.xml"/>
    <mapper resource="com/eomcs/pms/mapper/MemberMapper.xml"/>
    <mapper resource="com/eomcs/pms/mapper/ProjectMapper.xml"/>
    <mapper resource="com/eomcs/pms/mapper/TaskMapper.xml"/>

 

3. pms.ClientApp 클래스 변경

- DAO 객체를 만들 때 SqlSession.getMapper()를 호출한다.

 

MemberDao memberDao = sqlSession.getMapper(MemberDao.class);
// XxxDao xxxDao = sqlSession.getMapper(XxxDao.class);

 

방법2 - DAO 인터페이스를 기준으로 설정하기

1. pms/conf/mybatis-config.xml 파일 변경

<package name="com.eomcs.pms.dao"/>

2. <mappers> 태그에 매퍼 XML 파일을 등록하는 대신에 DAO 인터페이스의 패키지를 등록

기존의 매퍼 파일을 DAO 인터페이스의 패키지 폴더로 옮긴다.

3. 매퍼 파일의 이름을 인터페이스 이름과 일치시킨다.

 

=> 주소를 같게 하면 코드를 간단하게 줄일 수 있다.

 

 

추가 작업1 - 트랜잭션을 다루는 일을 핸들러가 맡는다.

insert/update/delete 한 후 DAO에서 commit()을 호출 -> commit()/rollback()의 호출을 핸들러가 담당

 

1. .XxxHandler 클래스 변경

- insert/update/delete 을 실행한 경우 commit() 또는 rollback()을 호출

 

    try {
      projectDao.insert(project);
      for (Member m : project.getMembers()) {
        projectDao.insertMember(project.getNo(), m.getNo());
      }
      sqlSession.commit();
    } catch (Exception e) {
      // 예외가 발생하기 전에 성공한 작업이 있으면 모두 취소한다.
      // 그래야 다음 작업에 영향을 끼치지 않는다.
      sqlSession.rollback();
    }