当前位置: 首页 > wzjs >正文

百度免费网站申请注册html网页设计源代码免费

百度免费网站申请注册,html网页设计源代码免费,网站怎么做图片动态图片不显示了,自己网站做优化的有权利卖么一、项目背景与技术选型 在企业级应用开发中,涉及资金操作的场景必须保证数据的一致性和完整性,事务管理是实现这一目标的核心机制。本文将通过一个基于 Spring 框架的支付宝转账功能案例,详细解析如何使用 Spring 的事务管理(包…

一、项目背景与技术选型

在企业级应用开发中,涉及资金操作的场景必须保证数据的一致性和完整性,事务管理是实现这一目标的核心机制。本文将通过一个基于 Spring 框架的支付宝转账功能案例,详细解析如何使用 Spring 的事务管理(包括 XML 配置和注解配置)确保转账操作的原子性,并提供完整的代码实现与优化建议。

二、项目结构与核心配置文件

2.1 Spring.xml配置解析

2.1.1 数据源配置
<!-- 配置数据库连接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <!-- MySQL 8+驱动类 --><property name="url" value="jdbc:mysql://localhost:3306/test1?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="root"/>
</bean>
  • 说明:使用DriverManagerDataSource创建基础数据源,连接 MySQL 8.0 + 数据库时需注意驱动类改为com.mysql.cj.jdbc.Driver,并添加时区参数serverTimezone=UTC避免时间解析异常。
2.1.2 JdbcTemplate 配置
<!-- 配置Spring JDBC操作模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/>
</bean>
  • 作用:通过依赖注入数据源,简化 JDBC 操作,提供update()query()等便捷方法。
2.1.3 事务管理器配置
<!-- 定义事务管理器,基于数据源 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean>
  • 核心逻辑:Spring 通过DataSourceTransactionManager管理数据库事务,确保事务与数据源绑定。
  2.1.4 事务通知配置
<tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" /></tx:attributes>
</tx:advice>

定义了一个事务通知,所有方法默认使用 REQUIRED 传播行为,即如果当前没有事务,就创建一个新事务;如果已经存在一个事务,则加入这个事务。

 标签结构与核心参数
  • <tx:advice>:定义一个事务通知,相当于一个拦截器,会在目标方法执行前后添加事务管理逻辑。

    • id="txAdvice":为这个通知指定唯一标识,后续会通过这个 ID 将通知应用到具体方法。
    • transaction-manager="txManager":引用之前配置的事务管理器(如 DataSourceTransactionManager),用于实际管理事务。
  • <tx:attributes>:配置事务属性的容器,内部可定义多个 <tx:method> 规则。

  • <tx:method>:定义具体的事务规则,支持通配符匹配方法名。

    • name="*":匹配所有方法名(* 是通配符)。
    • propagation="REQUIRED":传播行为设置为 REQUIRED,表示 “如果当前没有事务,就创建一个新事务;如果已有事务,就加入该事务”。这是最常用的传播行为,确保方法在事务环境中执行。
    • isolation="DEFAULT":隔离级别使用数据库的默认设置(如 MySQL 默认是 REPEATABLE READ)。
    • read-only="false":声明该方法不是只读操作,可能会修改数据。
2.1.5 AOP 配置
<aop:config><aop:pointcut id="txPointcut"expression="execution(public void com.qcby.dao.DaoImpl.AliPayDaoImpl.transfer(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

定义了一个切入点,匹配AliPayDaoImpl类中的transfer方法,并将上面定义的事务通知应用到这个切入点。这意味着transfer方法将被事务管理。

三、事务配置的两种方式对比

3.1 XML 方式配置事务(AOP 切面)

<!-- 事务通知(Advice):定义事务属性 -->
<tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><!-- 所有方法应用事务,传播行为为REQUIRED --><tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" read-only="false"/></tx:attributes>
</tx:advice><!-- AOP配置:将事务通知织入指定方法 -->
<aop:config><aop:pointcut id="txPointcut" expression="execution(public void com.qcby.dao.DaoImpl.AliPayDaoImpl.transfer(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
  • 关键步骤
    1. 定义txAdvice事务通知,指定事务管理器和默认属性(如传播行为REQUIRED表示 “必须在事务中执行,若无则创建新事务”)。
    2. 通过 AOP 的pointcut匹配transfer()方法,使用advisor将事务通知与切入点绑定。

3.2 注解方式配置事务(推荐)

3.2.1 启用注解驱动

Spring.xml中添加:

<!-- 启用@Transactional注解驱动 -->
<tx:annotation-driven transaction-manager="txManager"/>
3.2.2 在方法上添加注解
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class // 自定义回滚异常
)
public void transfer(String fromA, String toB, int amount) {jdbcTemplate.update("update alipay set amount = amount-? where aliname = ?", amount, fromA);jdbcTemplate.update("update alipay set amount = amount+? where aliname = ?", amount, toB);
}
  • 优势:代码侵入性低,逻辑更清晰,推荐优先使用注解方式。

四、代码实现与测试

4.1 DAO 接口与实现类

4.1.1 接口定义
// AlipayDao.java
public interface AlipayDao {void transfer(String fromA, String toB, int amount); // 转账方法
}
4.1.2 实现类(含事务注解)
// AliPayDaoImpl.java
public class AliPayDaoImpl implements AlipayDao {private JdbcTemplate jdbcTemplate;// 依赖注入public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Override@Transactional // 使用默认事务属性public void transfer(String fromA, String toB, int amount) {// 扣减转出方余额jdbcTemplate.update("UPDATE alipay SET amount = amount - ? WHERE aliname = ?", amount, fromA);// 模拟异常(取消注释可测试事务回滚)// int i = 10 / 0; // 增加转入方余额jdbcTemplate.update("UPDATE alipay SET amount = amount + ? WHERE aliname = ?", amount, toB);}
}

4.2 测试类(JUnit)

// SpringTest.java
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTest {@Testpublic void testTransfer() {ApplicationContext ctx = new ClassPathXmlApplicationContext("Spring.xml");AlipayDao alipayDao = ctx.getBean("AliPayDaoImpl", AlipayDao.class);alipayDao.transfer("张三", "李四", 100); // 执行转账System.out.println("转账完成");}
}

文章转载自:

http://FHzDm0Wt.tjwLp.cn
http://LXsDVXLC.tjwLp.cn
http://4wqPCwma.tjwLp.cn
http://XGzdnOTs.tjwLp.cn
http://c57akaIZ.tjwLp.cn
http://9HRtAKuq.tjwLp.cn
http://UvqLy9V6.tjwLp.cn
http://20OoaKXS.tjwLp.cn
http://mexcVsY9.tjwLp.cn
http://ebW2LAeK.tjwLp.cn
http://tWtTYBhK.tjwLp.cn
http://YrHogyKl.tjwLp.cn
http://dq1Foj2c.tjwLp.cn
http://hNJTlMi4.tjwLp.cn
http://Pylr6uJy.tjwLp.cn
http://1eZerobR.tjwLp.cn
http://u0qUxEox.tjwLp.cn
http://os2cK72l.tjwLp.cn
http://IZighIwx.tjwLp.cn
http://Y71hODKw.tjwLp.cn
http://wwyCqAaf.tjwLp.cn
http://grl2vAdF.tjwLp.cn
http://oBkYpwMY.tjwLp.cn
http://pC6wDEow.tjwLp.cn
http://va3e5BNt.tjwLp.cn
http://fFwKXgHk.tjwLp.cn
http://CAZAsvhn.tjwLp.cn
http://EIZVMIOO.tjwLp.cn
http://PxXX3o4t.tjwLp.cn
http://ZF202kV4.tjwLp.cn
http://www.dtcms.com/wzjs/696043.html

相关文章:

  • 深圳的设计企业网站手机访问网站下面电话怎么做
  • 免费app模板下载网站中国建设银行 官方网站
  • 网站会员充值做哪个分录wordpress更改语言
  • 企业局域网组建与网站建设怎样网站建设
  • 网站联盟如何实现wordpress 服务器搬家
  • 网站开发小图片wordpress左侧目录主题
  • 扬中网站建设流程企业网站免费建站程序
  • 免费主题网站凡科建站电话
  • 帝国cms7.0网站地图南宁手机网站制作
  • 网站建设目录东莞智通人才网
  • 网站页脚写什么网站服务器基本要素有哪些
  • 公司网站建设费用明细表杭州网站设计手机
  • 成都网站建设 四川冠辰网站建设聚美优品网站建设的特点
  • 如何搞好网站建设如何提交网站给百度
  • 专业做图片制作网站有哪些做动漫主题的网站
  • 怎么制作网站游戏cpa推广做网站
  • 无锡哪家做网站好沈阳工伤保险做实网站
  • 宜昌市建设信息网站类似传奇的网页游戏
  • 网站建设与维护考题上海共富新村网站建设
  • 舟山集团网站建设销客多微分销系统
  • 建一个自己的网站做我的世界壁纸的网站
  • 动态域名做网站合肥网站制作QQ
  • 营口网站建设哪家好wordpress添加skype
  • 网站建设背景不要验证码的广告网站
  • 广东省建设工程交易中心网站wordpress添加小工具插件
  • 网站解析后怎么做国内网页设计
  • 网站网络建设抖音代运营公司加盟
  • wordpress付费站内搜索京山网站设计公司
  • 专业网站设计第三方服务在哪里可以免费自学seo课程
  • 主机屋wordpress建站母婴网站建设的目的