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

wordpress入侵宁波seo关键词优化制作

wordpress入侵,宁波seo关键词优化制作,易用的做网站软件,做网站年入多少编程式事务与声明式事务对比 数据库事务流程 Spring数据库事务约定流程 1. 编程式事务(Programmatic Transaction) 特点: 通过代码显式控制事务的开始、提交和回滚。灵活性高,适合复杂事务逻辑(如嵌套事务、动态事务…

编程式事务与声明式事务对比

数据库事务流程

在这里插入图片描述

Spring数据库事务约定流程

在这里插入图片描述


1. 编程式事务(Programmatic Transaction)

特点

  • 通过代码显式控制事务的开始、提交和回滚。
  • 灵活性高,适合复杂事务逻辑(如嵌套事务、动态事务边界)。
  • 代码侵入性较强。

使用示例
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Autowiredprivate TransactionTemplate transactionTemplate; // 1. 通过TransactionTemplate管理事务// 使用编程式事务public void createUserWithProgrammaticTransaction(User user) {transactionTemplate.execute(status -> { // 2. 执行事务操作try {userRepository.save(user); // 保存用户// 模拟业务逻辑,可能抛出异常if (user.getAge() < 0) {throw new RuntimeException("年龄不能为负数");}return null;} catch (Exception e) {status.setRollbackOnly(); // 3. 手动设置回滚throw e;}});}
}

关键点说明

  1. TransactionTemplate:通过依赖注入获取,需配置PlatformTransactionManager
  2. 事务逻辑封装:通过execute方法传入TransactionCallback,实现事务内的操作。
  3. 手动回滚:通过status.setRollbackOnly()控制回滚逻辑。


2. 声明式事务(Declarative Transaction)

特点

  • 通过注解(@Transactional)或XML声明事务属性,由Spring AOP自动管理。
  • 代码简洁,符合“关注点分离”原则。
  • 适合大多数标准事务场景(如方法级事务控制)。

使用示例
@Service
@Transactional // 1. 类级别声明事务
public class UserService {@Autowiredprivate UserRepository userRepository;// 方法级别覆盖事务配置@Transactional(propagation = Propagation.REQUIRES_NEW) // 2. 自定义传播行为public void createUserWithDeclarativeTransaction(User user) {userRepository.save(user); // 保存用户if (user.getAge() < 0) {throw new RuntimeException("年龄不能为负数"); // 3. 异常自动触发回滚}}
}

关键点说明

  1. @Transactional注解
    • 支持类或方法级别声明,默认事务传播行为为REQUIRED
    • 异常自动回滚:默认回滚RuntimeException及其子类,可通过rollbackFor自定义。
  2. 传播行为
    • REQUIRES_NEW:新事务,忽略外部事务。
    • REQUIRED:如果存在事务则加入,否则新建。


3. 核心配置

启用事务管理
// 启动类添加@EnableTransactionManagement
@SpringBootApplication
@EnableTransactionManagement // 必须开启声明式事务支持
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
数据源配置(application.properties)
# 自动配置DataSource和TransactionManager(需引入Spring Boot Starter Data JPA/MyBatis等)
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update


对比表格

对比项编程式事务声明式事务优缺点
实现方式通过代码显式控制事务(如TransactionTemplateTransactionManager)。通过注解(@Transactional)或XML声明事务属性,由Spring AOP代理管理。编程式:灵活性高,但代码冗余;
声明式:简洁,但需遵守Spring规则。
事务边界手动定义事务开始和结束(如execute方法)。通过注解标注方法或类,Spring自动管理边界。编程式适合动态边界;声明式适合固定方法级控制。
回滚控制手动调用setRollbackOnly()或抛出异常触发回滚。默认基于异常类型回滚(如RuntimeException),可通过rollbackFor自定义。编程式更灵活;声明式需依赖注解配置。
传播行为通过Propagation枚举显式设置。通过@Transactional(propagation=...)声明。声明式配置更直观。
代码侵入性需嵌套事务逻辑代码,侵入性强。通过注解声明,几乎无侵入。声明式更符合“关注点分离”原则。
适用场景复杂事务逻辑(如嵌套事务、动态事务)、需精细控制事务生命周期的场景。标准事务场景(如单方法事务)、需快速实现事务管理的场景。声明式适合大多数业务;编程式用于特殊需求。
配置复杂度需注入TransactionTemplateTransactionManager,手动编写事务逻辑。仅需注解和启用@EnableTransactionManagement声明式配置简单,编程式需更多代码。

总结

选择建议
  1. 声明式事务(首选)

    • 适用于大多数标准场景,如方法级事务控制。
    • 示例:用户注册、订单提交等单方法事务。
  2. 编程式事务

    • 适用于需要复杂事务逻辑的场景,如:
      • 嵌套事务(REQUIRES_NEW需与外部事务隔离)。
      • 动态决定是否回滚(如根据业务状态而非异常)。
关键注意事项
  • Spring Boot自动配置:确保引入spring-boot-starter-data-jpaspring-boot-starter-mybatis-plus等依赖,自动配置DataSourceTransactionManager
  • 事务代理机制:声明式事务依赖Spring AOP代理,需注意以下问题:
    • 方法可见性@Transactional仅对公共方法生效,内部方法调用无法触发事务。
    • 代理类型:默认使用JDK动态代理,需接口;若需CGLIB代理,可添加@EnableAspectJAutoProxy(proxyTargetClass = true)

完整代码示例

1. 编程式事务完整代码
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Autowiredprivate PlatformTransactionManager transactionManager; // 1. 注入事务管理器public void createUserWithProgrammatic() {DefaultTransactionDefinition def = new DefaultTransactionDefinition();TransactionStatus status = transactionManager.getTransaction(def); // 2. 开启事务try {userRepository.save(new User("张三", 25)); // 保存用户// 模拟业务逻辑,抛出异常if (true) {throw new RuntimeException("模拟业务异常");}transactionManager.commit(status); // 3. 提交事务} catch (Exception e) {transactionManager.rollback(status); // 4. 手动回滚throw e;}}
}
2. 声明式事务完整代码
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Transactional(rollbackFor = Exception.class) // 1. 声明事务,包含所有异常回滚public void createUserWithDeclarative() {userRepository.save(new User("李四", 30)); // 保存用户if (true) {throw new RuntimeException("模拟业务异常"); // 2. 触发自动回滚}}
}

核心配置代码

// 启动类
@SpringBootApplication
@EnableTransactionManagement // 2. 启用声明式事务
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
# application.properties
# 1. 数据源配置(Spring Boot自动配置TransactionManager)
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update

最终对比总结

方式推荐程度适用场景代码简洁性灵活性
编程式事务复杂事务逻辑(嵌套、动态控制)
声明式事务标准事务场景(方法级控制)

结论

  • 优先选择声明式事务,简洁且符合设计模式。
  • 仅在需要复杂控制时(如嵌套事务、动态回滚条件)使用编程式事务。
http://www.dtcms.com/wzjs/125551.html

相关文章:

  • 做网站微信朋友圈应该怎么发广州网站优化外包
  • 开贴纸网站要怎么做的关键词优化外包
  • 建工网校appseo的主要分析工具
  • 网站建设的准备工作百度经验官网
  • 深圳做自适应网站公司跨境电商培训机构哪个靠谱
  • 可以下载各种软件的网站网络宣传的好处
  • 怎么做网站多少钱百度seo推广优化
  • 做代购注册什么网站免费招收手游代理
  • 陕西省城乡和住房建设厅网站seo就业前景
  • 推广网店的途径和方法优化关键词哪家好
  • asp.net做网站实例西安 做网站
  • 海尔电商网站建设方案磁力兔子搜索引擎
  • 网站如何做留言板百度网盘搜索引擎入口官网
  • 网站分析及推广方案高质量网站外链平台
  • 德惠市建设局网站2021百度热搜年度榜
  • 福州最好的网站建设网络公司网络推广公司官网
  • 兰州做网站的公司营销的四种方式
  • 鞍山哪里做网站网站安全检测平台
  • 高端网站开发地址百度爱采购官网
  • 建设网站比较好公司人力资源短期培训班
  • 惠东网络建站公司网上推广企业
  • 重庆潼南网站建设哪家好天津seo排名效果好
  • 南宁自助模板建站莱芜seo
  • 有哪些做ppt的网站seo快速排名软件首页
  • 企业网站建设推广合同长沙有实力seo优化
  • 打开网站无反应怎么做seo需要掌握什么技能
  • wordpress 头像seo优化网络
  • 济南教育加盟网站建设网络推广怎么做方案
  • 国外最新创意产品网站有哪些方面百度电话怎么转人工客服
  • 做爰真实网站佛山市seo推广联系方式