ABOUT ME

Today
Yesterday
Total
  • Spring - Config파일을 통하여 DB연결 및 흐름도
    Spring/전자정부프레임워크 2024. 12. 23. 14:31
    반응형

     

    1. 흐름 설명

    1. context-datasource.xml에서 DataSource 정의:

    • XML 파일에서 데이터베이스별 DataSource 빈을 정의합니다.
    • 각 DataSource 빈은 고유한 id를 가집니다. 예를 들어
        <!-- MySQL DataSource -->
    	<bean id="mysqlDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    	    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    	    <property name="url" value="jdbc:mysql://localhost:3306/{datbasename}" />
    	    <property name="username" value="{username}" />
    	    <property name="password" value="{password}" />
    	</bean>

     

     

    2. Java Config에서 XML의 빈 사용:

    • Java Config에서 @Qualifier를 통해 XML에서 정의된 DataSource 빈을 참조합니다.
    • 예를 들어, mysqlSqlSessionFactory를 생성할 때 mysqlDataSource라는 DataSource 빈을 사용하도록 설정
    @Bean(name = "mysqlSqlSessionFactory")
    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource mysqlDataSource) throws Exception {
        return createSqlSessionFactory(mysqlDataSource, "classpath:/egovframework/sqlmap/example/mappers/{userpath}/*.xml");
    }

     

     

    3. MyBatis와의 연결:

    • Java Config에서 생성된 SqlSessionFactory는 MyBatis 매퍼와 연결됩니다.
    • @MapperScan을 통해 특정 패키지의 매퍼들이 올바른 SqlSessionFactory를 참조하도록 설정:
    @MapperScan(
        basePackages = "{packagepath}",
        sqlSessionFactoryRef = "mysqlSqlSessionFactory"
    )

     

     

     

    2. 일치시켜야 할 부분

    2.1 XML의 bean id와 Java Config의 @Qualifier 이름

    XML에서 정의한 DataSource의 id와 Java Config에서 사용한 @Qualifier 이름은 반드시 일치해야 합니다.

    예시: MySQLConfig와 mysqlDataSource의 매칭

        <!-- MySQL DataSource -->
    	<bean id="mysqlDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    	    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    	    <property name="url" value="jdbc:mysql://localhost:3306/{datbasename}" />
    	    <property name="username" value="{username}" />
    	    <property name="password" value="{password}" />
    	</bean>

     

    JavaConfig

    @Bean(name = "mysqlSqlSessionFactory")
    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource mysqlDataSource) throws Exception {
        return createSqlSessionFactory(mysqlDataSource, "classpath:/egovframework/sqlmap/example/mappers/{userpath}/*.xml");
    }

    일치해야 할 부분:

    • XML의 <bean id="mysqlDataSource">와
    • Java Config의 @Qualifier("mysqlDataSource")의 이름이 동일해야 합니다.

     

    2.2 SqlSessionFactory와 MyBatis 매퍼의 연결

    SqlSessionFactory와 MyBatis 매퍼는 @MapperScan 어노테이션으로 연결됩니다.

    예시: mysqlSqlSessionFactory와 매퍼 연결

    @MapperScan(
        basePackages = "{userpath}", // 매퍼 패키지 경로
        sqlSessionFactoryRef = "mysqlSqlSessionFactory"         // 매퍼가 참조할 SqlSessionFactory
    )

    매퍼 패키지와 SqlSessionFactory 연결:

    • 매퍼 패키지: {userpath}
    • SqlSessionFactory 이름: mysqlSqlSessionFactory

    매퍼 XML 파일의 namespace 확인:

    • 매퍼 인터페이스와 XML 매퍼의 namespace는 반드시 일치해야 합니다.
    • 매퍼 인터페이스
    @Mapper
    public interface MySQLMapper {
        Integer testQuery();
    }

     

    매퍼 XML:

    <mapper namespace="{userpath}">
        <select id="testQuery" resultType="int">
            SELECT 1
        </select>
    </mapper>

     

     


    3. 요약

    1. XML에서 정의한 bean id와 Java Config에서 사용한 @Qualifier 이름이 일치해야 합니다.
    2. MyBatis 매퍼와 SqlSessionFactory는 @MapperScan으로 명확히 연결해야 합니다.
    3. 매퍼 인터페이스와 매퍼 XML 파일의 namespace가 동일해야 합니다.
    4. 트랜잭션 매니저는 @Qualifier로 올바른 DataSource를 참조하도록 설정해야 합니다.
    반응형

    댓글

Designed by Tistory.