2013/06/18 17:48

myBatis를 이용한 다중 DB 접속 설정시 DAO 클래스 생성. ORM/myBatis

myBatis를 이용한 다중 DB 접속 설정시,
DAO 구성에 관한 정보... 

프로젝트에서 문의가 들어와 좀 팠더니,
답이 나왔다..
유후,, 기분 좋은데?? ㅋ;;


-------------------------------------------------------------------------

생성한 클래스 EzAbstractACARSDao SqlSessionDaoSupport 를 상속하고 있고,

SqlSessionDaoSupport DaoSupport 를 상속하고 있습니다.

 

DaoSupport 에 보면afterPropertiesSet 이라는 메서드가 있는데

이는 beanFactorybean을 생성하고 난 뒤에 실행하는 메서드 입니다.

 

이 메서드 안에를 보면 checkDaoConfig(); 라는 메서드를호출하고 있는데,

이것은 abstract 메서드로서,SqlSessionDaoSupport 에 구현되어 있고,

그 내용을 보면 아래와 같습니다.

protected void checkDaoConfig() {

    notNull(this.sqlSession, "Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required");

}

 

위에서 this.sqlSession 이라는게 notNull 이어야 하고, null 이라면

"Property 'sqlSessionFactory' or'sqlSessionTemplate' are required" 메시지로 Exception이떨어지게 되어 있습니다.

(제게 보여준 에러메시지와 동일합니다. )

참고

public static void notNull(Object object, String message) {

           if (object == null) {

                     throw new IllegalArgumentException(message);

           }

}

 

 

따라서,

SqlSessionDaoSupport를 상속해서 DAO를 만드신다면

sqlSession 이 꼭 생성되어야 하고, 이는 EzAbstractACARSDao에서 직접 DI를 통해 생성하는게 아니라,

@Resource(name = "sqlSessionTemplateForACARS")

public SqlSessionTemplate sqlSessionTemplateForACARS;

   

@Resource(name = "sqlSessionFactoryForACARS")

public SqlSessionFactory sqlSessionFactoryForACARS;

 

 

아래와 같이 SqlSessionDaoSupport setter injection을 이용해 생성해야 합니다..

@Resource(name = "sqlSessionFactoryForACARS")

public void setSuperSqlSessionFactory(SqlSessionFactory sqlSessionFactoryForACARS) {

        super.setSqlSessionFactory(sqlSessionFactoryForACARS);

}

위를 통해 sqlSession 에 객체가 setter Inject 되는거죠.. (NOT NULL)


그리고 SqlSessionDaoSupport 에서 객체를 받아오는함수인 getSqlSession() 를 통해서

list, add 등을 구현하면 됩니다.



또 하나 배워간다~~~ㅋ




덧글

댓글 입력 영역