【Java】说说spring-jdbc和spring事务管理

2023-05-16

文章目录

  • 说说spring-jdbc和spring事务管理
    • spring-jdbc
        • 1.配置数据源
        • 2.使用jdbcTemplete
        • 3.在dao层使用jdbcTemplete
      • 外部配置方式
        • 新建配置文件jdbc.properties
        • 修改数据源配置部分
      • 使用其他数据源
    • SPRING事务管理
      • 编程式事务
      • 声明式事务
        • XML方式
        • 注解方式:

说说spring-jdbc和spring事务管理

spring-jdbc

1.配置数据源

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/test_3?serverTimezone=UTC"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
</bean>

2.使用jdbcTemplete

<bean id="jdbcTemplete" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
</bean>

3.在dao层使用jdbcTemplete

@Repository
public class TestDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

外部配置方式

新建配置文件jdbc.properties

文件内容

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test_3?serverTimezone=UTC
jdbc.usrename=root
jdgc.password=root

修改数据源配置部分

一种方式:
 <!-- 引入外部属性文件: -->
 <bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 <property name="location" value="classpath:jdbc.properties"/>
 </bean>
 --------
二种方式:
<context:property-placeholder location="classpath:jdbc.properties"/>

-----------
 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
                <property name="driverClassName" value="${jdbc.driverClassName}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.usrename}"></property>
                <property name="password" value="${jdbc.password}"></property>
                
        </bean>

使用其他数据源

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.usrename}"></property>
        <property name="password" value="${jdbc.password}"></property>
        
</bean>

只需要修改class属性

SPRING事务管理

编程式事务

配置事务管理器:

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <property name="dataSource" ref="dataSource"/>
 </bean>

配置事务管理模板

<!-- 配置事务管理模板 -->
 <bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
 <property name="transactionManager" ref="transactionManager"/>
 </bean>

手写代码实现事务管理:

public void transfer(final String from, final String to, final Double money) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) 
{
accountDao.outMoney(from, money);
int d = 1 / 0;
accountDao.inMoney(to, money);
}
});
}

声明式事务

XML方式

配置事务管理器

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <property name="dataSource" ref="dataSource"/>
 </bean>

配置事务通知:

<!-- 配置事务的增强 -->
 <tx:advice id="txAdvice" transaction-manager="transactionManager">
 <tx:attributes>
 <!--
isolation="DEFAULT" 隔离级别
propagation="REQUIRED" 传播行为
read-only="false" 只读
timeout="-1" 过期时间
rollback-for="" -Exception
no-rollback-for="" +Exception
-->
 <tx:method name="transfer" propagation="REQUIRED"/>
 </tx:attributes>
 </tx:advice>

配置aop事务:

<aop:config>
 <aop:pointcut expression="execution(* 
cn.itcast.transaction.demo2.AccountServiceImpl.transfer(..))" id="pointcut1"/>
 <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
 </aop:config>

注解方式:

配置事务管理器:

<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

开启事务管理的注解:

<tx:annotation-driven transaction-manager="transactionManager"/>

在使用事务的类上添加一个注解 @Transactional

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Java】说说spring-jdbc和spring事务管理 的相关文章

随机推荐

  • postman汉化教程(历史老版本)

    目录 1 下载对应版本的postman 2 替换url中对应的版本号 3 下载postman对应版本的汉化包 4 打开postman文件位置 5 打开后寻找 app 9 12 2 resources 目录 然后将下载好的压缩包解压 6 重启
  • c++学习 :函数形参4种传递形式:(int a)(int &a)(int *a)(int *& a)

    c 43 43 学习 xff1a 函数形参4种传递形式 1 void func int para 2 void func int amp para 3 void func int pointer 4 void func int amp po
  • RTOS关于SysTickHandler()

    我们知道FREERTOS会自动装载PendSV Handler 和SVC Handler 函数 xff0c 这里我们希望自己对其从新定义 xff0c 故做如下处理 include 34 delay h 34 include 34 sys h
  • STM32 正点原子学习(个人学习)

    系统执行一般只设置一次优先级分组 设置好之后不再改变 xff0c 不然会导致混乱 抢占优先级先进行判断响应优先级后 xff0c 同级别抢占优先级但高级别的响应优先级也不能打断同级别抢占优先级低级别的响应优先级 系统中断优先级分组函数 xff
  • Spring AOP使用案例

    AOP 原理 代理模式 需求背景 返回前端的用户信息包含手机号等敏感内容 xff0c 并在系统上已经有大量接口 现拿到需求 xff0c 需要在返回前端的对象中 xff0c 找到手机号的属性并将手机号加密 现状 xff1a 分散在各处的接口中
  • 【JVM】说一下jvm运行时数据区域

    说一下jvm运行时数据区域 文章目录 说一下jvm运行时数据区域程序计数器栈本地方法栈堆方法区运行时常量池直接内存 本篇文章总结自 深入理解Java虚拟机 程序计数器 程序计数器是一块较小的内存空间 xff0c 它可以看作是当前线程所执行的
  • ffmpeg错误总结

    av err2str 在C 43 43 项目中 xff0c 使用FFmpeg中的av err2str函数时 xff0c 报错 解决 xff1a 调用该函数的文件开始加上以下代码 xff1a span class token keyword
  • 【JVM】垃圾回收算法

    垃圾回收算法 文章目录 垃圾回收算法标记 清除算法标记 复制算法Appel式回收 标记整理算法混合使用 标记 清除算法 标记 清除算法是最早出席那也是最基础的垃圾收集算法 xff0c 是1960年由Lisp之父John McCarthy所提
  • 【JVM】如何判决一个对象的生死

    如何判决一个对象的生死 文章目录 如何判决一个对象的生死如何判断对象是否存活 xff08 应该被回收 xff09 引用计数法可达性分析算法引用生存还是死亡 如何判断对象是否存活 xff08 应该被回收 xff09 引用计数法 很多教科书判断
  • 【大前端】vue,jq,uniapp ajax默认的请求格式

    vue jq uniapp ajax默认的请求格式 文章目录 vue jq uniapp ajax默认的请求格式常见的内容类型 xff08 content type xff09 jq默认请求格式默认内容类型 xff1a multipart
  • 【大前端】uniapp上传图片

    uniapp上传图片 看本篇文章之前建议看下本篇文章 直接上代码 uni chooseImage success chooseImageRes 61 gt 获取文件的路径 const tempFilePaths 61 chooseImage
  • 【JavaWeb】el表达式与jstl标签的使用

    el表达式与jstl标签的使用 el表达式 简介 el表达式的全称 xff1a Expression Language 是表达式语言 EL表达式的作用 xff1a EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出 因
  • 【Java】说说Java的线程池

    说说Java的线程池 文章目录 说说Java的线程池为什么要使用线程池ThreadPoolExecutor提供的构造方法解析 线程池处理流程 为什么要使用线程池 创建 销毁线程需要消耗系统资源 xff0c 线程池可以复用已创建的线程控制并发
  • 【Java】Java的类加载器和双亲委派模型

    文章目录 类加载器双亲委派模型 类加载器 对于任意一个类 xff0c 都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性 xff0c 每一个类加载器 xff0c 都有一个独立的类名称空间 比较两个类是否 34 相等
  • 【git】说说git的基础命令

    git的基础命令 命令名称作用git config global user name 用户名设置用户签名git config global user email 邮箱设置用户签名git init初始化本地库git status查看本地库状态
  • 【maven】maven基础知识入门

    maven 文章目录 maven什么是maven为什么使用maven项目构建过程的几个主要环节maven核心概念如何通过坐标到仓库中查找jar包 什么是maven Maven 是 Apache 软件基金会组织维护的一款自动化构建工具 xff
  • 【spring】说说spring的IOC与DI

    说说spring的IOC与DI 文章目录 说说spring的IOC与DIid属性和name属性标签scope Bean的作用范围Spring xff0c 配置生成Bean的三种方式Sping 的 Bean属性注入Sping的Bean属性通过
  • ffmpeg时间戳相关函数

    1 概述 ffmpeg中与时间戳相关的函数主要有 xff1a av rescale q xff0c av rescale q rnd xff0c av compare ts av rescale q span class token cla
  • 【计算机网络】网线规格的鉴别与接线方法

    网线规格的鉴别与接线发送 文章目录 网线规格的鉴别与接线发送一 怎么判断网线类型 xff1f 二 制作网线标准三 屏蔽类型四 使用场景五 米数标记接线方法 一 怎么判断网线类型 xff1f 可以根据网线外皮的标识来判断 xff0c 正规厂商
  • 【Java】说说spring-jdbc和spring事务管理

    文章目录 说说spring jdbc和spring事务管理spring jdbc1 配置数据源2 使用jdbcTemplete3 在dao层使用jdbcTemplete 外部配置方式新建配置文件jdbc properties修改数据源配置部