Spring 프로 그래 밍 과 성명 식 트 랜 잭 션 인 스 턴 스 설명 소결
14185 단어 Spring프로 그래 밍 식 사무성명 식 사무
Spring 은 두 가지 방식 의 사무 관 리 를 지원 합 니 다.
이 사례 의 사상 을 다시 한 번 말씀 드 리 겠 습 니 다.우 리 는 두 번 의 이체 사이 에 잘못된 문 구 를 추가 합 니 다(은행 의 전기 가 끊 기 는 등 의외 의 상황 에 대응).만약 에 이때 두 번 의 이체 가 성공 하지 못 하면 업무 설정 이 정확 하 다 는 것 을 설명 합 니 다.그렇지 않 으 면 업무 설정 이 정확 하지 않 습 니 다.
당신 이 완성 해 야 할 임무:
아래 의 코드 는 아주 오래 전에 Sping 을 배 웠 는데 Maven 과 접촉 하지 않 았 을 때 쓴 것 입 니 다.그래서 제 가 사용 한 원시 적 인 jar 추가 방식 은 Maven 의 파트너 를 사용 하면 Maven 의존 도 를 스스로 추가 할 수 있 습 니 다.
프로젝트 구성:
Spring 프로 그래 밍 과 성명 식 트 랜 잭 션 인 스 턴 스 설명
개발 도구:
Myeclipse2017
SQL:
create table `account` (
`username` varchar (99),
`salary` int (11)
);
insert into `account` (`username`, `salary`) values(' ','3000');
insert into `account` (`username`, `salary`) values(' ','3000');
(1)프로 그래 밍 식 사무 관리메모:accontMoney()방법 중 int i=10/0 을 추가/삭제 하면 사무 관리 설정 이 올 바른 지 검증 할 수 있 습 니 다.
Orders Dao.java(Dao 층)
package cn.itcast.dao;
import org.springframework.jdbc.core.JdbcTemplate;
public class OrdersDao {
// jdbcTemplate
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//
/**
*
*/
public void reduceMoney() {
String sql = "update account set salary=salary-? where username=?";
jdbcTemplate.update(sql, 1000, " ");
}
/**
*
*/
public void addMoney() {
String sql = "update account set salary=salary+? where username=?";
jdbcTemplate.update(sql, 1000, " ");
}
}
Orders Service.java(비 즈 니스 논리 층)
package cn.itcast.service;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
import cn.itcast.dao.OrdersDao;
public class OrdersService {
// Dao
private OrdersDao ordersDao;
public void setOrdersDao(OrdersDao ordersDao) {
this.ordersDao = ordersDao;
}
// TransactionTemplate
private TransactionTemplate transactionTemplate;
public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
this.transactionTemplate = transactionTemplate;
}
// dao
// ,
public void accountMoney() {
transactionTemplate.execute(new TransactionCallback<Object>() {
@Override
public Object doInTransaction(TransactionStatus status) {
Object result = null;
try {
// 1000
ordersDao.addMoney();
// int
// i=10/0( 。。。); : 1000
//
int i = 10 / 0;//
// 1000
ordersDao.reduceMoney();
} catch (Exception e) {
status.setRollbackOnly();
result = false;
System.out.println("Transfer Error!");
}
return result;
}
});
}
}
TestService.java(테스트 방법)
package cn.itcast.service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestService {
@Test
public void testAdd() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"beans.xml");
OrdersService userService = (OrdersService) context
.getBean("ordersService");
userService.accountMoney();
}
}
프로필:
<?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"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- c3po -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/wangyiyun"></property>
<property name="user" value="root"></property>
<property name="password" value="153963"></property>
</bean>
<!-- -->
<!-- -->
<bean id="dataSourceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- -->
<bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<!-- ,name transactionManager -->
<property name="transactionManager" ref="dataSourceTransactionManager"></property>
</bean>
<!-- -->
<bean id="ordersService" class="cn.itcast.service.OrdersService">
<property name="ordersDao" ref="ordersDao"></property>
<!-- -->
<property name="transactionTemplate" ref="transactionTemplate"></property>
</bean>
<bean id="ordersDao" class="cn.itcast.dao.OrdersDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<!-- JDBC -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
(2)AspectJ 기반 성명 식 사무 관리Orders Service.java(비 즈 니스 논리 층)
package cn.itcast.service;
import cn.itcast.dao.OrdersDao;
public class OrdersService {
private OrdersDao ordersDao;
public void setOrdersDao(OrdersDao ordersDao) {
this.ordersDao = ordersDao;
}
// dao
// ,
public void accountMoney() {
// 1000
ordersDao.addMoney();
// int i=10/0( 。。。); : 1000
//
int i = 10 / 0;//
// 1000
ordersDao.reduceMoney();
}
}
프로필:
<!-- c3po -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/wangyiyun"></property>
<property name="user" value="root"></property>
<property name="password" value="153963"></property>
</bean>
<!-- : -->
<bean id="dataSourceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- : -->
<tx:advice id="txadvice" transaction-manager="dataSourceTransactionManager">
<!-- -->
<tx:attributes>
<!-- -->
<!-- account -->
<!--
propagation: ;
isolation: ;
read-only: ;
rollback-for:
timeout:
-->
<tx:method name="account*" propagation="REQUIRED"
isolation="DEFAULT" read-only="false" rollback-for="" timeout="-1" />
</tx:attributes>
</tx:advice>
<!-- : -->
<aop:config>
<!-- -->
<aop:pointcut expression="execution(* cn.itcast.service.OrdersService.*(..))"
id="pointcut1" />
<!-- -->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1" />
</aop:config>
<!-- -->
<bean id="ordersService" class="cn.itcast.service.OrdersService">
<property name="ordersDao" ref="ordersDao"></property>
</bean>
<bean id="ordersDao" class="cn.itcast.dao.OrdersDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
(3)주석 기반 방식Orders Service.java(비 즈 니스 논리 층)
package cn.itcast.service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import cn.itcast.dao.OrdersDao;
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false, timeout = -1)
public class OrdersService {
private OrdersDao ordersDao;
public void setOrdersDao(OrdersDao ordersDao) {
this.ordersDao = ordersDao;
}
// dao
// ,
public void accountMoney() {
// 1000
ordersDao.addMoney();
// int i=10/0( 。。。); : 1000
//
// int i = 10 / 0;//
// 1000
ordersDao.reduceMoney();
}
}
프로필:
<!-- c3po -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/wangyiyun"></property>
<property name="user" value="root"></property>
<property name="password" value="153963"></property>
</bean>
<!-- : ( )-->
<bean id="dataSourceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- : -->
<tx:annotation-driven transaction-manager="dataSourceTransactionManager" />
<!-- -->
<!-- -->
<bean id="ordersService" class="cn.itcast.service.OrdersService">
<property name="ordersDao" ref="ordersDao"></property>
</bean>
<bean id="ordersDao" class="cn.itcast.dao.OrdersDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.