spring-声明式事务管理
一、創建spring項目
?? ?項目名稱:spring101311
二、在項目上添加jar包
?? ?1.在項目中創建lib目錄
?? ??? ?/lib
?? ?2.在lib目錄下添加spring支持
?? ??? ?com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
?? ??? ?com.springsource.org.aopalliance-1.0.0.jar
?? ??? ?com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
?? ??? ?commons-logging.jar
?? ??? ?junit-4.10.jar
?? ??? ?log4j.jar
?? ??? ?mysql-connector-java-5.1.18-bin.jar
?? ??? ?spring-aop-3.2.0.RELEASE.jar
?? ??? ?spring-aspects-3.2.0.RELEASE.jar
?? ??? ?spring-beans-3.2.0.RELEASE.jar
?? ??? ?spring-context-3.2.0.RELEASE.jar
?? ??? ?spring-core-3.2.0.RELEASE.jar
?? ??? ?spring-expression-3.2.0.RELEASE.jar
?? ??? ?spring-jdbc-3.2.0.RELEASE.jar
?? ??? ?spring-tx-3.2.0.RELEASE.jar
三、在項目中添加配置文件與屬性文件
?? ?1.在項目中創建conf目錄
?? ?2.在conf目錄下添加屬性文件
?? ??? ?屬性文件名稱:jdbc.properties
?? ??? ?屬性文件內容:
?? ??? ?jdbc.url=jdbc:mysql://localhost:3306/spring
?? ??? ?jdbc.driver=com.mysql.jdbc.Driver
?? ??? ?jdbc.username=root
?? ??? ?jdbc.password=root
?? ?2.在conf目錄下添加spring核心配置文件
?? ??? ?配置文件名稱:applicationContext.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.xsd">
?? ??? ??? ??? ?
?? ??? ??? ??? ?<!-- 1.加載屬性文件 -->
?? ??? ??? ??? ?<context:property-placeholder location="classpath:jdbc.properties"/>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<!-- 2.配置數據庫連接池 -->
?? ??? ??? ??? ?<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
?? ??? ??? ??? ??? ?<property name="jdbcUrl" value="${jdbc.url}"></property>
?? ??? ??? ??? ??? ?<property name="driverClass" value="${jdbc.driver}"></property>
?? ??? ??? ??? ??? ?<property name="user" value="${jdbc.username}"></property>
?? ??? ??? ??? ??? ?<property name="password" value="${jdbc.password}"></property>
?? ??? ??? ??? ?</bean>
?? ??? ?</beans>
四、實現bean設計
?? ?1.在src目錄下創建實體bean的包
?? ??? ?包名:cn.jbit.spring101310.domain
?? ?2.在包下創建實體bean
?? ??? ?public class Account {
?? ??? ??? ?private Integer id;
?? ??? ??? ?private String name;
?? ??? ??? ?private Double money;
?? ??? ??? ?//省略get and set
?? ??? ?}
五、設計Dao層
?? ?1.在src目錄下創建dao層的包
?? ??? ?包名:cn.jbit.spring101310.dao
?? ?2.在包下創建dao層的接口與實現類
?? ??? ?1)接口設計
?? ??? ??? ?接口名稱:IAccountDao.java
?? ??? ??? ?接口內容:
?? ??? ??? ?public interface IAccountDao {
?? ??? ??? ??? ?/**
?? ??? ??? ??? ? * 轉出
?? ??? ??? ??? ? */
?? ??? ??? ??? ?public void outMoney(Account outaccount);
?? ??? ??? ??? ?/**
?? ??? ??? ??? ? * 轉入
?? ??? ??? ??? ? */
?? ??? ??? ??? ?public void inMoney(Account inaccount);
?? ??? ??? ?}
?? ??? ?2)接口實現類設計
?? ??? ??? ?實現類名稱:AccountDaoImpl.java
?? ??? ??? ?實現類內容:
?? ??? ??? ?public class AccountDaoImpl extends JdbcDaoSupport implements IAccountDao {
?? ??? ??? ??? ?/**
?? ??? ??? ??? ? * 轉入
?? ??? ??? ??? ? */
?? ??? ??? ??? ?@Override
?? ??? ??? ??? ?public void inMoney(Account inaccount) {
?? ??? ??? ??? ??? ?String sql = "update account set money = money + ? where id = ?";
?? ??? ??? ??? ??? ?this.getJdbcTemplate().update(sql,inaccount.getMoney(),inaccount.getId());
?? ??? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ??? ?/**
?? ??? ??? ??? ? * 轉出
?? ??? ??? ??? ? */
?? ??? ??? ??? ?@Override
?? ??? ??? ??? ?public void outMoney(Account outaccount) {
?? ??? ??? ??? ??? ?String sql = "update account set money = money - ? where id = ?";
?? ??? ??? ??? ??? ?this.getJdbcTemplate().update(sql,outaccount.getMoney(),outaccount.getId());?? ??? ?
?? ??? ??? ??? ?}
?? ??? ??? ?}
六、在核心配置文件中配置Dao
?? ?<!-- 3.配置Dao -->
?? ?<bean id="accountDao" class="cn.jbit.spring101310.dao.AccountDaoImpl">
?? ??? ?<property name="dataSource" ref="dataSource"></property>
?? ?</bean>
七、在核心配置文件中配置事務相關信息
?? ?<!-- 4.配置事務管理器 -->
?? ?<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
?? ??? ?<property name="dataSource" ref="dataSource"></property>
?? ?</bean>
八、業務層設計
?? ?1.在src目錄下創建業務層的包
?? ??? ?包名:cn.jbit.spring101310.service
?? ?2.在包下創建業務層的接口與實現類
?? ??? ?1)接口設計
?? ??? ??? ?接口名稱:AccountService.java
?? ??? ??? ?接口內容:
?? ??? ??? ?public interface AccountService {
?? ??? ??? ??? ?public void transfer(Account outAccount,Account inAccount);
?? ??? ??? ?}
?? ??? ?2)接口實現類設計
?? ??? ??? ?實現類名稱:AccountServiceImpl.java
?? ??? ??? ?實現類內容:
?? ??? ??? ?public class AccountServiceImpl implements AccountService {
?? ??? ??? ?
?? ??? ??? ??? ?private IAccountDao accountDao;
?? ??? ??? ??? ?@Override
?? ??? ??? ??? ?public void transfer(final Account outAccount, final Account inAccount) {
?? ??? ??? ??? ??? ?//轉出
?? ??? ??? ??? ??? ?accountDao.outMoney(outAccount);
?? ??? ??? ??? ??? ?int a = 1/0;
?? ??? ??? ??? ??? ?//轉入
?? ??? ??? ??? ??? ?accountDao.inMoney(inAccount);
?? ??? ??? ??? ?}
?? ??? ??? ??? ?//省略get and set
?? ??? ??? ?}
九、在核心配置文件中配置業務層
?? ?<!-- 5.配置Service -->
?? ?<bean id="accountService" class="cn.jbit.spring101310.service.AccountServiceImpl">
?? ??? ?<property name="accountDao" ref="accountDao"></property>
?? ?</bean>
十、在核心配置文件中配置代理
?? ?<!-- 6.創建代理 -->
?? ?<bean id="accountServiceproxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
?? ??? ?<!--
?? ??? ??? ?引用事務管理器
?? ??? ? -->
?? ??? ?<property name="transactionManager" ref="transactionManager"></property>
?? ??? ?<!--
?? ??? ??? ?為哪個類創建代理
?? ??? ? -->
?? ??? ?<property name="target" ref="accountService"></property>
?? ??? ?<property name="transactionAttributes">
?? ??? ??? ?<props>
?? ??? ??? ??? ?<!--
?? ??? ??? ??? ??? ?*:所有方法
?? ??? ??? ??? ??? ?PROPAGATION_REQUIRED:默認的事務傳播行為
?? ??? ??? ??? ? -->
?? ??? ??? ??? ?<prop key="*">PROPAGATION_REQUIRED</prop>
?? ??? ??? ?</props>
?? ??? ?</property>
?? ?</bean>
十一、測試
?? ?1.在項目上創建test目錄
?? ??? ?/test
?? ?2.在test目錄下創建測試包
?? ??? ?包名:cn.jbit.spring101310.service
?? ?3.在測試包下創建測試類
?? ??? ?測試類名:AccountServiceTest.java
?? ??? ?測試類的內容:
?? ??? ?public class AccountServiceTest {
?? ??? ??? ?@Test
?? ??? ??? ?public void testTranser(){
?? ??? ??? ??? ?ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
?? ??? ??? ??? ?AccountService accountService = (AccountService) context.getBean("accountService");
?? ??? ??? ??? ?Account outAccount = new Account();
?? ??? ??? ??? ?outAccount.setId(1);
?? ??? ??? ??? ?outAccount.setMoney(500D);
?? ??? ??? ??? ?Account inAccount = new Account();
?? ??? ??? ??? ?inAccount.setId(2);
?? ??? ??? ??? ?inAccount.setMoney(500D);
?? ??? ??? ??? ?accountService.transfer(outAccount, inAccount);
?? ??? ??? ?}
?? ??? ?}
轉載于:https://blog.51cto.com/suyanzhu/1563387
總結
以上是生活随笔為你收集整理的spring-声明式事务管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在maven环境中设置JVM参数
- 下一篇: Midnight.js – 实现奇妙的固