为了账号安全,请及时绑定邮箱和手机立即绑定
  • 推荐 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • //相关代码(声明式 I——基于TransactionProxyFactoryBean的方式)——(上): @AccountServiceImpl.java package cn.muke.spring.demo2; /** * 转账案例的业务层实现类 */ public class AccountServiceImpl implements AccountService { // 注入转账的DAO的类 private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out, String in, Double money) { accountDao.outMoney(out, money); int i=1/0;//这样一来,上面可以成功执行,下面就不会得到执行 accountDao.inMoney(in, money); } } @SpringDemo2.java /** * Spring的声明式事务管理的方式一的测试类: */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext2.xml") public class SpringDemo2 { /** * 注入代理类:因为代理类进行增强的操作。 */ //@Resource(name="accountService") @Resource(name="accountServiceProxy") private AccountService accountService; /** * 转账案例的测试类 */ @Test public void demo1(){ accountService.transfer("aaa", "bbb", 200d); } }
    查看全部
  • 不推荐:因为一个类就需要一个代理类,N个类呢?! //相关代码(编程式)——(下): <!-- 配置业务层类 --> <bean id="accountService" class="cn.muke.spring.demo1.AccountServiceImpl"> <property name="accountDao" ref="accountDao"></property> <!-- 注入事务管理的模版 --> <property name="transactionTemplate" ref="transactionTemplate"></property> </bean> <!-- 配置DAO层类 --> <bean id="accountDao" class="cn.muke.spring.demo1.AccountDaoImpl"> <!-- 注入连接池,会帮我们创建一个JDBC模版 --> <property name="dataSource" ref="dataSource" ></property> </bean> <!-- 配置事务管理器(操作工具) --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 连接池(被操作对象) --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置事务管理的模版(简化操作工具)(最终使用它来操作):Spring为了简化事务管理的代码而提供的类 --> <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="transactionManager"></property> </bean> </beans>
    查看全部
  • @不推荐 //相关代码(编程式)——(中): @SpringDemo1.java package cn.muke.spring.demo1; /** * 转账案例的测试类 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class SpringDemo1 { //测试业务层类 @Resource(name="accountService") private AccountService accountService; @Test public void demo1(){ accountService.transfer("aaa", "bbb", 200d); } } @applicationContext.xml <beans ...> <!-- 引入外部的属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"></context:property> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}" ></property> <property name="jdbcUrl" value="${jdbc.url}" ></property> <property name="user" value="${jdbc.username}" ></property> <property name="password" value="${jdbc.password}" ></property> </bean> 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 事务
    查看全部
    0 采集 收起 来源:课程总结

    2016-04-20

  • 配置切面
    查看全部
  • //相关代码(编程式)——(上): @AccountServiceImpl.java package cn.muke.spring.demo1; /** * 转账案例的业务层实现类 */ public class AccountServiceImpl implements AccountService { // 注入转账的DAO的类 private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } //注入事务管理模版 private TransactionTemplate transactionTemplate; public void setTransactionTemplate(TransactionTemplate transactionTemplate) { this.transactionTemplate = transactionTemplate; } /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(final String out, final String in, final Double money) { /*accountDao.outMoney(out, money); int i=1/0;//这样一来,上面可以成功执行,下面就不会得到执行 accountDao.inMoney(in, money);*/ transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { accountDao.outMoney(out, money); int i=1/0; accountDao.inMoney(in, money); } }); } }
    查看全部
  • 配置业务代理
    查看全部
  • 相关代码(公共1): //package cn.muke.spring.demo1; @AccountDao.java /** * 转账案例的DAO层的接口 */ public interface AccountDao { /** * out :转出账号 * money:转出金额 */ public void outMoney(String out,Double money); /** * in :转入账号 * money:转入金额 */ public void inMoney(String in,Double money); } @AccountService.java /** * 转账案例的业务层接口 */ public interface AccountService { /** * out :转出账号 * in :转入账号 * money:转账金额 */ public void transfer(String out,String in,Double money); } @AccountDaoImpl.java /** * 转账案例的DAO层的实现类 */ public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao { /** * out :转出账号 * money:转出金额 */ public void outMoney(String out, Double money) { String sql="update account set money=money-? where name=?"; this.getJdbcTemplate().update(sql,money,out); } /** * in :转入账号 * money:转入金额 */ public void inMoney(String in, Double money) { String sql="update account set money=money+? where name=?"; this.getJdbcTemplate().update(sql,money,in); } }
    查看全部
  • 在需要事务模板的类中注入该属性
    查看全部
  • 三种重要的事务传播行为
    查看全部
  • 如果不考虑隔离性,会引发如下的安全问题: 1.脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。 2.不可重复读:在同一个事务中,多次读取同一数据返回的结果有所不同。 3.幻读(虚读):一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。 除了如图的数据库提供的事务隔离级别,spring提供了Default隔离级别,该级别表示spring使用后端数据库默认的隔离级别。 MySQL默认事务隔离级别:REPATABLE_READ(可能出现幻读) Oracle默认:READ_COMMITTED(可能出现不可重复读和幻读) 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
    0 采集 收起 来源:接口介绍

    2016-08-26

举报

0/150
提交
取消
课程须知
学习本课程前需要熟悉Spring的基础知识,掌握IOC和AOP的基本概念。小伙伴们可参考《Spring入门》课程
老师告诉你能学到什么?
1、理解Spring事务管理的基本概念 2、掌握Spring事务管理的应用场景 3、掌握声明式事务管理和编程式事务管理的实现方式

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!