Spring纯注解的声明式事务配置

卷积码Viterbi译码算法原理及C语言实现 具体而言,卷积码的编码过程是将输入数据和编码器中的状态进行异或操作,输出码字为各个状态对应的结果。Viterbi译码算法是一种最大似然译码算法,根据接收到的含有噪声的码字,寻找出最有可能的原始数据序列。(2) 递推计算:根据接收到的码字和当前状态,计算下一时刻各个状态的路径度量,并记录每个状态的前驱状态。以上代码实现了一个简单的卷积码Viterbi译码算法,通过接收到的码字进行译码,并输出解码结果。(1) 初始化:将所有状态的路径度量初始化为一个很大的值,选择路径度量最小的状态作为起始状态。 阅读详情

1.jdbcConfig.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123

2.config.JdbcConfig

package config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;


/**
 * 和连接数据库相关的配置类
 */
public class JdbcConfig {

    @Value("${jdbc.driver}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    /**
     * 创建jdbcTemplate对象
     * @param dataSource
     * @return
     */
    @Bean(name = "jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }

    /**
     * 创建数据源对象
     * @return
     */
    @Bean(name = "dataSource")
    public DataSource createDataSource(){
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }

}

3.config.SpringConfiguration

package config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * spring的配置类,相当于bean.xml
 */

@Configuration
@ComponentScan(basePackages = "com")
@Import({JdbcConfig.class,TransactionManager.class})
@PropertySource("classpath:jdbcConfig.properties")
@EnableTransactionManagement//开启声明式事务控制
public class SpringConfiguration {
}

4 config.TransactionManager

package config;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

/**
 * 和事务相关的配置类
 */
public class TransactionManager {


    /**
     * 用于创建事务管理对象
     * @param dataSource
     * @return
     */
    @Bean(name = "transactionManager")
    public PlatformTransactionManager createTransactionManager(DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

}

5.com.service.IAccountService

package com.service;

import com.domain.Account;

/**
 * 账户的业务层接口
 */
public interface IAccountService {
    /**
     * 根据id查询账户信息
     * @param id
     * @return
     */
    Account findAccountById(Integer id);

    /**
     * 转账
     * @param sourceName 转出账户名称
     * @param targetName 转入账户名称
     * @param money
     */
    void transfer(String sourceName, String targetName, Float money);
}

6.com.service.impl.AccountServiceImpl

package com.service.impl;

import com.dao.IAccountDao;
import com.domain.Account;
import com.service.IAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * 事务控制应该都是在业务层
 */
@Service
@Transactional(propagation = Propagation.REQUIRED,readOnly = true)
public class AccountServiceImpl implements IAccountService{

    @Autowired
    private IAccountDao accountDao;

    public Account findAccountById(Integer id) {
        return accountDao.findAccountById(id);
    }


    @Transactional(propagation = Propagation.REQUIRED,readOnly = false)
    public void transfer(String sourceName, String targetName, Float money) {

        System.out.println("transfer开始执行");
        //①.根据名称查询转出账户
        Account source = accountDao.findAccountByName(sourceName);
        //②.根据名称查询转入账户
        Account target = accountDao.findAccountByName(targetName);
        //③.转出账户减钱
        source.setMoney(source.getMoney()-money);
        //④.转入账户加钱
        target.setMoney(target.getMoney()+money);
        //⑤.更新转出账户
        accountDao.updateAccount(source);
//        int i = 1/0;
        //⑥.更新转入账户
        accountDao.updateAccount(target);

    }
}

7.com.dao.IAccountDao

package com.dao;

import com.domain.Account;

/**
 * 账户的持久层接口
 */
public interface IAccountDao {
    /**
     * 根据id查询账户
     * @param id
     * @return
     */
    Account findAccountById(Integer id);

    /**
     * 根据名称查询账户
     * @param name
     * @return
     */
    Account findAccountByName(String name);

    /**
     * 更新账户
     * @param account
     */
    void updateAccount(Account account);
}

8.com.dao.impl.AccountDaoImpl

package com.dao.impl;

import com.dao.IAccountDao;
import com.domain.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 账户的持久层实现类
 */
@Repository
public class AccountDaoImpl  implements IAccountDao{

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public Account findAccountById(Integer id) {
        List<Account> accounts = jdbcTemplate.query("select * from account where id=?", new BeanPropertyRowMapper<Account>(Account.class), id);
        return accounts.isEmpty()?null:accounts.get(0);
    }

    public Account findAccountByName(String name) {
        List<Account> accounts = jdbcTemplate.query("select * from account where name=?", new BeanPropertyRowMapper<Account>(Account.class), name);
        if(accounts.isEmpty()){
            return null;
        }
        if(accounts.size()>1){
            throw new RuntimeException("结果集不唯一");
        }
        return accounts.get(0);
    }

    public void updateAccount(Account account) {
        jdbcTemplate.update("update account set name=?,money=? where id=?",account.getName(),account.getMoney(),account.getId());

    }
}

9.com.domain.Account

package com.domain;

import java.io.Serializable;

/**
 * 账户的实体类
 */
public class Account implements Serializable{
    private Integer id;
    private String name;
    private Float money;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Float getMoney() {
        return money;
    }

    public void setMoney(Float money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}

用C#+Avalonia写跨平台串口工具:Windows/macOS/Linux通吃,还能解析Modbus+画实时曲线 不管是串口还是蓝牙,核心操作都是“打开连接、发数据、收数据、关连接”,先定义一个// 通信设备接口:统一串口/蓝牙的操作// 连接状态变化事件(UI层订阅)// 接收数据事件(收到数据后触发)// 通信配置(不同设备配置不同,用泛型)// 通信设备接口:统一串口/蓝牙的操作 public interface ICommDevice : IDisposable {// 连接状态变化事件(UI层订阅) event Action < bool > OnConnectionChanged; 阅读详情

相关推荐

STM32F4驱动ES8388音频芯片的I²S时钟与DMA流设计

I²S(Inter-IC Sound)是一种广泛应用于嵌入式音频系统的同步串行总线协议,其核心在于精确的时钟同步与稳定的数据流传输。理解I²S时钟树结构(含MCLK、SCLK、WS生成逻辑)和分频机制,是保障CD级音质(如44.1kHz/16bit)的基础;而DMA双缓冲技术则解决了实时音频播放中数据供给连续性的关键工程问题。在STM32F4等Cortex-M4平台中,需协同配置PLLI2S锁相环、I²S预分频寄存器(I2SxPR)及DMA循环模式,同时兼顾ES8388等Codec芯片的I²C初始化时序与寄

weixin_35390379的博客 244

Spring声明式事务基于xml/注解/纯注解的配置

xml配置声明式事务: 配置事物管理器 DataSourceTransactionManager 注入DataSource 配置事物的通知(增强的类是谁): &lt;tx:advice id=“通知的标识” transaction-manager=“通知是谁”&gt; 配置aop ,建立切入点表达式(哪些方法增强)和事物通知的关系 aop:config中aop:pointcut &amp;&...

UTFLLLLy的博客 722

DDR3性能优化实战:如何用Xilinx MIG控制器实现800MHz稳定读写(7系列FPGA版)

本文深入探讨了在Xilinx 7系列FPGA上使用MIG控制器实现DDR3存储器800MHz稳定高速读写的实战优化技巧。文章聚焦于高级时序调优、Bank Machine调度策略、用户接口设计优化以及利用ILA进行信号完整性调试,旨在帮助工程师突破性能瓶颈,实现接近理论峰值的稳定带宽,并为进一步冲刺更高频率提供进阶调参指南。

seed的博客 775

spring中基于纯注解的声明式事务控制配置步骤

总配置类SpringConfiguration: /** * spring的配置类,相当于bean.xml */ @Configuration @ComponentScan("net.togogo") @Import({JdbcConfig.class,TransactionConfig.class}) @PropertySource("classpath:jdbcConfig.propert...

weixin_41605945的博客 229

OSGEarth 基于鼠标位置缩放

说明 osgearth 原有漫游器EarthManipulator 不支持此功能,所以需要修改此漫游器代码,其中主要原理就是在缩放的同时也要改变当前漫游器中心焦点的位置,从而保持鼠标指定点的位置缩放是不改变。 核心代码修改部分 EarthManipulator 的头文件zoom方法添加参数view /** * Zoom the camera using delt...

Rsoftwaretest的专栏 3782

14、5G物理层的灵活解决方案:广义频分复用(GFDM)

广义频分复用(GFDM)作为一种高度灵活的5G物理层多载波调制方案,能够满足多样化应用场景的需求,包括高吞吐量的比特管道通信、低功耗高连接数的物联网、超低延迟的触觉互联网以及广覆盖的无线区域网。通过参数化配置,GFDM可适配LTE资源网格,实现与现有系统的兼容与共存。其支持多种解调方式、干扰消除技术、OQAM映射及预编码机制,兼具低带外发射、高频谱效率和强鲁棒性。GFDM还能统一描述OFDM、FBMC、FTN等多种经典与先进波形,成为5G及未来通信系统中极具潜力的通用波形框架。

gold8的专栏 108

spring第四天纯注解的声明式事务配置

1.所需jar包 业务层接口及实现类 com.pro.service.IAcountService package com.pro.service; import com.pro.domain.Acount; //账户的业务实现层 public interface IAcountService { //根据地查询账户 信息 Acount findByAcount...

qq_38125626的博客 219

【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果(附项目源码)

本文介绍了Unity中实现传送门效果的完整流程。通过第一人称角色控制器实现移动,使用PortalView脚本和自定义Unlit Shader渲染门内场景,巧妙利用相机位置和旋转同步实现动态视角。重点解决了近裁剪面问题,确保远距离渲染正确性。最后通过PortalTeleporter脚本实现传送功能,检测碰撞并计算相对位置进行瞬移。该方法无需复杂插件,代码简洁高效,适用于各类3D场景中的传送门实现。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

spring使用纯注解配置声明式事务(19)

目录 一.创建主配置类 二.编写和数据库相关的配置类 三.创建jdbcConfig.properties并写入数据库连接信息 四.编写和事务相关的配置类 五.其他事务类型的声明按照以下博客来,将重复作用的bean.xml注解忽略即可 一.创建主配置类 二.编写和数据库相关的配置类 三.创建jdbcConfig.properties并写入数据库连接信息 四.编写和...

qq_32865713的博客 287

K230+canMV开发中常见的数据类型转换参考示例

【代码】K230+canMV开发中常见的数据类型转换参考示例。

weixin_47446386的博客 67

使用 MATLAB/Simulink 对风光互补发电系统进行建模

随着全球对清洁能源的需求日益增长,风力发电和光伏发电作为两种主要的可再生能源形式,在电力供应中的占比越来越高。然而,由于风电和光伏的间歇性和不确定性,单独依赖其中任何一种能源都会给电网带来挑战。因此,风光互补发电系统(Wind-PV Hybrid System)应运而生,通过合理配置风力发电机和光伏电池板的数量,可以有效提高系统的稳定性和可靠性。此外,为了确保整个电力系统的安全稳定运行,还需要研究风光互补发电系统与主网之间的协调调度策略。本教程将详细介绍如何使用。

amy_mhd的博客 118

spring基于纯注解的声明式事务管理配置一遍文章带你快速了解

首先创建一个spring的配置类相当于bean.xml package com.lwh.config; import org.springframework.context.annotation.*; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @ComponentScan("com.lwh") @Import({JdbcConfig.class,Transac

java_cch的博客 159

解决此平台不支持虚拟化的 Intel VT-x/EPT故障问题

当我们在VMware Workstation虚拟机上【启用】虚拟系统(如:Windows10)所在的虚【拟机设置】【处理器】【虚拟化引擎】下面的【虚拟化 Intel VT-x/EPT 或AMD-V/RVI(V)】内容后,在启动虚拟系统时,虚拟系统无法启动,且弹出【此平台不支持虚拟化的 Intel VT-x/EPT。不使用虚拟化的 Intel VT-x/EPT,是否继续】窗口

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1万+

【Spring框架】十五、Spring 基于纯注解配置的声明式事务控制

文章目录工程目录pom.xml账户实体类domain:Account业务层ServiceIAccountServiceAccountServiceImpl持久层AccountDaoIAccountDaoAccountDaoImplconfig包SpringConfigurationJdbcConfigjdbc.propertiesTransactionConfig测试类 工程目录 pom.xml...

Java 161

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

Spring事务配置可通过三种方式实现:纯XML配置、XML+注解混合、纯注解方式。在纯XML配置中,通过引入 spring-context、spring-jdbc、spring-tx 等依赖,并结合 <tx:advice> 和 <aop:advisor> 标签完成事务增强配置,常用于老项目中。XML+注解方式则在XML中配置事务管理器并开启注解支持,通过 @Transactional 注解在业务方法中灵活控制事务行为。纯注解方式则完全摆脱XML,利用 @EnableTransactionManagemen

谢谢你的喜欢 我们一起无限进步 778

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring第14篇_Spring中的事务控制

文章目录1. Spring中事务控制的API介绍1.1 PlatformTransactionManager2. Spring事务控制的代码准备3. Spring基于XML的声明式事务控制4.Spring基于注解的声明式事务控制5.Spring基于纯注解的声明式事务控制6. Spring5的新特性 1. Spring中事务控制的API介绍 1.1 PlatformTransactionManager ​ PlatformTransactionManager接口是Spring的事务管理器,它里面提供了常用的操

weixin_44086832的博客 313

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[特殊字符] 一文搞懂 Spring 框架事务管理(含XML、注解、纯注解三种方式)

在开发中,“事务”这个词出现得非常频繁。事务(Transaction)是一组操作的集合,要么全部成功,要么全部失败。举个例子:假设你在转账,A账户转100元给B账户。这个过程有两个操作:A账户减100B账户加100这两个操作必须要么都执行,要么都不执行。如果执行到一半程序崩了,只扣了A的钱没加给B,那就出大问题了!这时候,事务管理就上场了。它能保证在异常出现时自动回滚(rollback),让数据保持一致。

m0_62724751的博客 639

Spring框架的事务管理

XML 配置方式:适合于对配置细节有严格要求,且团队对 XML 配置比较熟悉的场景。通过 XML 可以清晰地定义事务的各个方面,但配置文件可能会变得冗长和复杂。XML + 注解方式:结合了 XML 配置的灵活性和注解的简洁性,XML 负责全局配置,注解负责局部配置,是一种比较常用的方式。纯注解方式:适合于追求代码简洁性和开发效率的场景,完全基于 Java 配置和注解,减少了 XML 配置文件的使用,但对开发者的 Java 配置能力要求较高。

2301_77071977的博客 1004

Spring事务

&lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://

wujingchangye的博客 147

Spring——Spring中的事务、XML配置事务属性、注解+XML、纯注解的配置方式 (重重点)、Spring的自动装配原理

三、基于 xml 配置声明式事务 1、解决银行转账问题: 在上面引出事务的代码基础上,只需要修改xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2...

Guizy 9403

声明式事务(注解与纯注解方式)

介绍了使用注解与纯注解的方式来实现声明式事务

凉茶铺的博客 2823

Spring 声明式事务的支持

文章目录Spring 声明式事务的支持事务回顾事务的概念事务的四大特性ACID事务的隔离级别Spring事务的7种传播行为Spring 中事务的APISpring 声明式事务配置纯xml模式基于xml+注解基于纯注解 Spring 声明式事务的支持 编程式事务 :在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务 声明式事务 :通过xml或者注解配置的方式达到事务控制的目的,叫做声明式事务 事务回顾 事务的概念 事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败

章全蛋的博客 613

Spring中的声明式事务

文章目录一、事务概述二、声明式事务概述三、声明式事务的使用1.环境准备2.XML配置事务管理3.注解配置事务管理4.纯注解配置5.Spring编程式事务 一、事务概述 事务的作用: ​ 将一个事务中所有的sql语句当作一个整体,要么全都成功,要么全都失败,通过这样的方式来保证数据的正确性; 事务的四大特性: 原子性:atomic,即事务中的多条语句是一个整体且不可分割,要么都成功要么都失败 隔离性:isolation,多个事务之间的执行不能相互影响 一致性:consistence,事务开始前和事务结束后

记录一只菜鸡的成长之路 416

基于XML和注解的声明式事务控制

本文以账户转账的demo演示spring分别基于xml和注解的声明式事务控制。讲述声明式事务控制配置步骤。

博主很懒,没有简介~ 585

Spring(七)声明式事务

声明式事务1. 基于XML的声明式事务2. 基于注解的声明式事务3. 纯注解的声明式事务 1. 基于XML的声明式事务 maven导包 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> &

weixin_44962371的博客 168

Spring 声明式事务注解@Transactional

Spring 声明式事务注解@Transactional 1 结合xml配置使用 xml配置文件中加入 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> &lt...

qq_41884972的博客 202
上一篇: Spring基于纯注解的配置
下一篇: SpringMVC
LEEWLD
博客等级 码龄9年 5粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值