Spring,MyBatis 실무 과정 자료] Spring 트랜잭션과 연동





Spring,MyBatis 실무 과정 자료] Spring 트랜잭션과 연동

실무개발자를위한 실무교육 전문교육센터학원

www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



Spring 트랜잭션과 연동


<bean id="transactionManager"

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource">

            <ref local="dataSource" />

        </property>

    </bean>



Spring,MyBatis 실무 과정 자료] SqlSession 인젝션





Spring,MyBatis 실무 과정 자료] SqlSession 인젝션

실무개발자를위한 실무교육 전문교육센터학원

www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.


SqlSession 인젝션



■ SqlSessionDaoSupport 이용하는 방법

public class MyatisSpringEmpDao extends SqlSessionDaoSupport implements EmpDao {

public Emp findEmpById(int id) {

    return getSqlSession().selectOne(“sample.dao.EmpMapper.selectEmp”, 7369);

}



Spring,MyBatis 실무 과정 자료] MyBatis와 Spring 연동






Spring,MyBatis 실무 과정 자료] MyBatis와 Spring 연동

실무개발자를위한 실무교육 전문교육센터학원

www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



MyBatis와 Spring 연동


SqlSessionFactory를 Bean으로서 정의

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="configLocation" value="classpath:sample/mybatis.Spring.xml" />

        <property name="mapperLocations">

            <list>

                <value>sample/dao/EmpMapper.xml</value>

            </list>

        </property>

    </bean>



Spring,MyBatis 실무 과정 자료] 트랜잭션 처리 샘플





Spring,MyBatis 실무 과정 자료] 트랜잭션 처리 샘플

실무개발자를위한 실무교육 전문교육센터학원

www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.


트랜잭션 처리 샘플


SqlSession session = sessionFactory.openSession();

try {

   session.insert(“sample.dao.EmpMapper.insertEmp”, emp);

session.commit();

} catch(Exception e) {

   session.rollback();

   throw new RuntimeException(e);

} finally {

    session.close();

}



Spring,MyBatis 실무 과정 자료] 트랜잭션 처리





Spring,MyBatis 실무 과정 자료] 트랜잭션 처리


실무개발자를위한 실무교육 전문교육센터학원

www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



트랜잭션 처리


■ SqlSession에 준비되어 있는 4가지 메서드

  - void commit();

  - void commit(boolean force);

  - void rollback();

  - void rollback(boolean force);



* boolean force의 의미:

 - commit(), rollback()은 INSERT, UPDATE, DELETE문이 실행되었을 경우에만 실제로 처리된다.


  - 만일 INSERT, UPDATE, DELETE문의 실행여부와 상관없이 트랜잭션이 이루어져야 할 경우 commit(true), roleback(true) 이런 형식으로 호출한다.



Spring,MyBatis 실무 과정 자료] Mapper Interface Annotation







Spring,MyBatis 실무 과정 자료] Mapper Interface Annotation

실무개발자를위한 실무교육 전문교육센터학원

www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.


Mapper Interface Annotation


■ Mapper 인터페이스의 특징이 직접 SQL을 지정가능하다는 점.


■ @Select(“SELECT * FROM EMP WHERE EMPNO = #{empNo}”)


■ Emp selectEmp(int id);


  - 한계 있다.



Spring,MyBatis 실무 과정 자료]  Mapper 인터페이스





Spring,MyBatis 실무 과정 자료]  Mapper 인터페이스

실무개발자를위한 실무교육 전문교육센터학원

www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.



Mapper 인터페이스


■ Mapper 인터페이스를 사용하지 않는 경우

  - 직접 namespace + “.” + SQL ID 사용가능


  - 단점:SQL파일이 많고, 복잡할 경우 처리어려움. 이유->이클립스에서 코드어시스트가 지원 안됨.


 - public interface EmpMapper {


 - Emp selectEmp(int id);

}



 * 호출시:

 - EmpMapper mapper = session.getMapper(EmpMapper.class);


 - Emp emp = mapper.selectEmp(7369);


Spring,MyBatis 실무 과정 자료] INSERT시 키 생성





Spring,MyBatis 실무 과정 자료] INSERT시 키 생성

실무개발자를위한 실무교육 전문교육센터학원

www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.


INSERT시 키 생성


■ DB가 auto increment을 사용하는 경우


<insert id="insertPet" parameterType="sample.biz.domain.Pet“

useGeneratedKeys=“true” keyProperty=“petId”>

INSERT INTO PET (PET_NAME, OWNER_NAME, PRICE, BIRTH_DATE)

        VALUES (#{petName}, #{ownerName}, #{price}, #{birthDate})

    </insert>



■ DB가 시퀀스를 사용하는 경우


<insert id="insertPet" parameterType="sample.biz.domain.Pet">

        <selectKey keyProperty="petId" resultType="int" order="BEFORE">

            SELECT PET_SEQ.NEXTVAL FROM DUAL

        </selectKey>

        INSERT INTO PET (PET_ID, PET_NAME, OWNER_NAME, PRICE, BIRTH_DATE)

        VALUES (#{petId}, #{petName}, #{ownerName}, #{price}, #{birthDate})

    </insert>

+ Recent posts