스프링프레임워크 & 마이바티스
(Spring Framework, MyBatis)
7-11. Spring MyBatis – PlatformTransactionManager를 이용한 프로
그래밍적 트랜잭션 처리예제
[Customer.java]
package onj.edu.jdbc2;
public class Customer {
private Integer id;
private String name;
private Integer age;
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
[CustomerDao.java]
package onj.edu.jdbc2;
import java.util.List;
import onj.edu.jdbc2.Customer;
public interface CustomerDao {
public int createCustomer(Customer customer);
public int deleteCustomer(Customer customer);
public int updateCustomer(Customer customer);
public Customer getCustomer(Integer id);
public List<Customer> getListCustomer();
}
[CustomerDaoImpl.java]
package onj.edu.jdbc2;
public class CustomerDaoImpl implements CustomerDao {
@Resource(name = "sqlSession")
private SqlSession sqlSessionTemplate;
@Override
public int createCustomer(Customer customer) {
CustomerDao customerDao =
sqlSessionTemplate.getMapper(CustomerDao.class);
return customerDao.createCustomer(customer);
}
@Override
public Customer getCustomer(Integer id) {
CustomerDao customerDao =
sqlSessionTemplate.getMapper(CustomerDao.class);
return customerDao.getCustomer(id);
}
@Override
public List<Customer> getListCustomer() {
CustomerDao customerDao customerDao =
sqlSessionTemplate.getMapper(CustomerDao.class);
return customerDao.getListCustomer();
}
@Override
public int deleteCustomer(Customer customer) {
CustomerDao customerDao =
sqlSessionTemplate.getMapper(CustomerDao.class);
return customerDao.deleteCustomer(customer);
}
@Override
public int updateCustomer(Customer customer) {
CustomerDao customerDao =
sqlSessionTemplate.getMapper(CustomerDao.class);
return customerDao.updateCustomer(customer);
}
}
[CustomerTest.java]
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:context/appcontext-mybatis3.xml")
public class CustomerTest {
@Autowired
private CustomerDao customerDao;
@Autowired
private PlatformTransactionManager transactionManager;
DefaultTransactionDefinition def = null;
TransactionStatus status = null;
//PlatformTransactionManager 이용 수동으로 트랜잭션을 다루는 방법
@Test
public void test() {
try {
def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
status = transactionManager.getTransaction(def);
Customer customer = new Customer();
customer.setAge(30);
customer.setId(30);
customer.setName("오라클자바30");
int cnt = customerDao.createCustomer(customer);
System.out.println("<<<<< 30번 Insert OK");
customer.setId(31);
cnt = customerDao.createCustomer(customer);
System.out.println("<<<<< 31번 Insert OK");
customer = new Customer(); customer.setAge(99);
customer.setId(30);
customer.setName("30번:오라클자바커");
cnt = customerDao.updateCustomer(customer);
System.out.println(">>>>> 30번 Update OK ---> " + cnt);
customer = new Customer();
customer.setId(31);
int deleteCnt = customerDao.deleteCustomer(customer);
System.out.println("삭제건수 = " + deleteCnt);
System.out.println(">>>>> 31번 Delete OK");
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}
}
}
[context/appcontext-mybatis.xml]
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd“>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:onj" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/sqlmap-config2.xml" />
<property name="mapperLocations" value="classpath:mybatis/mappers/customer.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<bean id="customerDao" class="onj.edu.jdbc2.CustomerDaoImpl" />
</beans>
[mybatis/sqlmap-config2.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="onj.edu.jdbc2.Customer"
alias="customer" />
</typeAliases>
</configuration>
[mybatis/mappers/customer.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN"
http://mybatis.org/dtd/mybatis-3-mapper.dtd>
<mapper namespace="onj.edu.jdbc2.CustomerDao">
<resultMap type="customer" id="customerid">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
<select id="getCustomer" parameterType="int" resultMap="customerid">
SELECT * FROM CUSTOMER WHERE ID = #{id}
</select>
<select id="getListCustomer“ resultMap="customerid">
SELECT * FROM CUSTOMER
</select>
<insert id="createCustomer" parameterType="onj.edu.jdbc2.Customer">
INSERT INTO CUSTOMER(ID, NAME, AGE) VALUES (#{id},#{name},#{age})
</insert>
<update id="updateCustomer" parameterType="onj.edu.jdbc2.Customer">
UPDATE CUSTOMER SET AGE = #{age},
NAME = #{name} WHERE ID = #{id}
</update>
<delete id="deleteCustomer" parameterType="onj.edu.jdbc2.Customer">
DELETE FROM CUSTOMER WHERE ID = #{id}
</delete>
</mapper>

#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구로IT교육학원추천

  • 1.
    스프링프레임워크 & 마이바티스 (SpringFramework, MyBatis) 7-11. Spring MyBatis – PlatformTransactionManager를 이용한 프로 그래밍적 트랜잭션 처리예제 [Customer.java] package onj.edu.jdbc2; public class Customer { private Integer id; private String name; private Integer age; public Integer getId() {return id;} public void setId(Integer id) {this.id = id;} public String getName() {return name;} public void setName(String name) {this.name = name;} public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } [CustomerDao.java]
  • 2.
    package onj.edu.jdbc2; import java.util.List; importonj.edu.jdbc2.Customer; public interface CustomerDao { public int createCustomer(Customer customer); public int deleteCustomer(Customer customer); public int updateCustomer(Customer customer); public Customer getCustomer(Integer id); public List<Customer> getListCustomer(); } [CustomerDaoImpl.java] package onj.edu.jdbc2; public class CustomerDaoImpl implements CustomerDao { @Resource(name = "sqlSession") private SqlSession sqlSessionTemplate; @Override public int createCustomer(Customer customer) { CustomerDao customerDao = sqlSessionTemplate.getMapper(CustomerDao.class); return customerDao.createCustomer(customer); } @Override public Customer getCustomer(Integer id) { CustomerDao customerDao = sqlSessionTemplate.getMapper(CustomerDao.class); return customerDao.getCustomer(id); } @Override public List<Customer> getListCustomer() { CustomerDao customerDao customerDao = sqlSessionTemplate.getMapper(CustomerDao.class); return customerDao.getListCustomer();
  • 3.
    } @Override public int deleteCustomer(Customercustomer) { CustomerDao customerDao = sqlSessionTemplate.getMapper(CustomerDao.class); return customerDao.deleteCustomer(customer); } @Override public int updateCustomer(Customer customer) { CustomerDao customerDao = sqlSessionTemplate.getMapper(CustomerDao.class); return customerDao.updateCustomer(customer); } } [CustomerTest.java] @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:context/appcontext-mybatis3.xml") public class CustomerTest { @Autowired private CustomerDao customerDao; @Autowired private PlatformTransactionManager transactionManager; DefaultTransactionDefinition def = null; TransactionStatus status = null; //PlatformTransactionManager 이용 수동으로 트랜잭션을 다루는 방법 @Test public void test() { try { def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); status = transactionManager.getTransaction(def); Customer customer = new Customer(); customer.setAge(30); customer.setId(30); customer.setName("오라클자바30");
  • 4.
    int cnt =customerDao.createCustomer(customer); System.out.println("<<<<< 30번 Insert OK"); customer.setId(31); cnt = customerDao.createCustomer(customer); System.out.println("<<<<< 31번 Insert OK"); customer = new Customer(); customer.setAge(99); customer.setId(30); customer.setName("30번:오라클자바커"); cnt = customerDao.updateCustomer(customer); System.out.println(">>>>> 30번 Update OK ---> " + cnt); customer = new Customer(); customer.setId(31); int deleteCnt = customerDao.deleteCustomer(customer); System.out.println("삭제건수 = " + deleteCnt); System.out.println(">>>>> 31번 Delete OK"); transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); } } } [context/appcontext-mybatis.xml] <?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd“>
  • 5.
    <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass"value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:onj" /> <property name="username" value="scott" /> <property name="password" value="tiger" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis/sqlmap-config2.xml" /> <property name="mapperLocations" value="classpath:mybatis/mappers/customer.xml" /> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean id="customerDao" class="onj.edu.jdbc2.CustomerDaoImpl" /> </beans> [mybatis/sqlmap-config2.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="onj.edu.jdbc2.Customer" alias="customer" /> </typeAliases> </configuration> [mybatis/mappers/customer.xml] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN" http://mybatis.org/dtd/mybatis-3-mapper.dtd> <mapper namespace="onj.edu.jdbc2.CustomerDao">
  • 6.
    <resultMap type="customer" id="customerid"> <resultproperty="id" column="id" /> <result property="name" column="name" /> <result property="age" column="age" /> </resultMap> <select id="getCustomer" parameterType="int" resultMap="customerid"> SELECT * FROM CUSTOMER WHERE ID = #{id} </select> <select id="getListCustomer“ resultMap="customerid"> SELECT * FROM CUSTOMER </select> <insert id="createCustomer" parameterType="onj.edu.jdbc2.Customer"> INSERT INTO CUSTOMER(ID, NAME, AGE) VALUES (#{id},#{name},#{age}) </insert> <update id="updateCustomer" parameterType="onj.edu.jdbc2.Customer"> UPDATE CUSTOMER SET AGE = #{age}, NAME = #{name} WHERE ID = #{id} </update> <delete id="deleteCustomer" parameterType="onj.edu.jdbc2.Customer"> DELETE FROM CUSTOMER WHERE ID = #{id} </delete> </mapper>