[SPRING] Transaction 기본 설정

수경·2025년 3월 25일

SpringFrameWork

목록 보기
15/24
post-thumbnail

1. pom.xml 수정

AOP, 마이바티스, 오라클 설정파일 가져오기

<!-- Spring AOP -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
		<version>${org.springframework-version}</version>
		<type>jar</type>
		<scope>compile</scope>
	</dependency>
	<dependency>
          <groupId>cglib</groupId>
          <artifactId>cglib</artifactId>
          <version>2.2</version>
          <type>jar</type>
          <scope>compile</scope>
	</dependency>
	<dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>${org.aspectj-version}</version>
	</dependency>
	<!--  오라클 드라이버 -->
	<dependency>
			<groupId>com.oracle.ojdbc</groupId>
			<artifactId>ojdbc8</artifactId>
			<version>19.3.0.0</version>
	</dependency>
		
	<!--  마이바티스 설정 파일 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.4.6</version>
	</dependency>
	<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
	</dependency>

2. src -> main -> wepapp -> WEP-INF ->spring -> action-mybatis.xml 생성

<transaction 설정을 위해 추가된 부분>

<!-- 어노테이션 기반 트랜잭션 활성화 -->
<tx:annotation-driven transaction-manager="transactionManager" />
 	
	<!-- 트랜잭션 매니저 설정 -->
  <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
		<property name="transactionManager" ref="transactionManager" />
		<property name="propagationBehavior" value="0" />
	</bean>
	
	<!-- 트랜잭션 템플릿 설정  --> 
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

<기존 코드>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
                        
 
 <!-- Property Placeholder 설정 -->
	<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<value>/WEB-INF/config/jdbc.properties</value>
		</property>
	</bean>
	
	<!-- DataSource 설정 -->
	<bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
		<property name="driver" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
	<!-- MyBatis SqlSessionFactory 설정 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
		<property name="mapperLocations" value="classpath:mybatis/mappers/*.xml" />	
	</bean>
	
	 <!-- MyBatis SqlSession 설정 -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />	
	</bean>
	
	<!-- 어노테이션 기반 트랜잭션 활성화 -->
 	<tx:annotation-driven transaction-manager="transactionManager" />
 	
	<!-- 트랜잭션 매니저 설정 -->
  <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
		<property name="transactionManager" ref="transactionManager" />
		<property name="propagationBehavior" value="0" />
	</bean>
	
	<!-- 트랜잭션 템플릿 설정  --> 
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	
   
</beans>

3. src -> main -> wepapp -> WEP-INF -> config -> jdbc.properties파일 생성

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:XE
jdbc.username=c##jsp_user
jdbc.password=1234


4. web.xml 부분 바꾸기


root-context을 *.xml로 바꾸기

5. src/main/resources -> mybatis 패키지 생성 -> mybatis안에 mappers 패키지 생성 -> 패키지 생성 후 xml파일 생성**

MyBatis 매퍼 XML 파일의 역할과 구성

MyBatis 패키지 안에 있는 XML 파일은 SQL 쿼리를 정의하고, 해당 SQL을 실행할 수 있도록 매핑해주는 역할을 한다.
이 파일을 매퍼 파일 (Mapper.XML) 이라고 한다.

🎈매퍼 XML 파일 기본 구조
<UserMapper.xml>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.test.pro10.mapper.UserMapper">
    
    <!-- 결과를 자동으로 매핑할 수 있도록 설정 -->
    <resultMap id="userResultMap" type="com.test.pro10.dto.UserDTO">
        <id property="id" column="id" />
        <result property="name" column="name" />
        <result property="email" column="email" />
    </resultMap>

    <!-- 사용자 정보 가져오기 -->
    <select id="getUserById" parameterType="int" resultMap="userResultMap">
        SELECT id, name, email 
        FROM users
        WHERE id = #{id}
    </select>

    <!-- 사용자 추가하기 -->
    <insert id="insertUser" parameterType="com.test.pro10.dto.UserDTO">
        INSERT INTO users (name, email)
        VALUES (#{name}, #{email})
    </insert>

    <!-- 사용자 정보 업데이트 -->
    <update id="updateUser" parameterType="com.test.pro10.dto.UserDTO">
        UPDATE users 
        SET name = #{name}, email = #{email}
        WHERE id = #{id}
    </update>

    <!-- 사용자 삭제 -->
    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>

</mapper>

➕ 각 요소 설명
1. <mapper namespace="com.test.pro10.mapper.UserMapper">

  • MyBatis 인터페이스와 연결되는 네임스페이스 (인터페이스와 일치해야 한다).

2. <resultMap>

  • SQL 결과를 DTO 객체와 매핑해주는 설정.

  • propertyDTO의 필드, column은 DB 컬럼명.

3. <select>

  • 데이터를 조회할 때 사용 (resultMap으로 결과를 매핑).

  • #{id} 같은 변수는 파라미터 값이 들어갈 자리.

4. <insert>

  • 데이터를 삽입할 때 사용 (parameterType으로 DTO를 지정).

5. <update>

  • 데이터를 수정할 때 사용 (WHERE 조건 필수!).

6. <delete>

  • 데이터를 삭제할 때 사용 (WHERE 조건 필수!).

6. sqlMapConfig.xml -> 해당 파일에 맞는경로 설정 하기

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org/DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<typeAliases>
		<typeAlias type="com.test.pro09.AccountDTO" alias="accountDTO" />
	</typeAliases>
</configuration>

profile
개발 공부중•••

0개의 댓글