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');메모: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, "  ");
 }
}
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;
  }
 });
 }
}
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>
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>
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에 따라 라이센스가 부여됩니다.