数据库事务

Spring之路(40)–使用@Transactional进行声明式事务管理如此简单

别说谁变了你拦得住时间么 提交于 2020-02-07 04:13:55
足够简单 说实话要实现事务管理,给一个方法添加一个注解,则该方法自动实现事务,足够简单了,我也没法想还有更简单的么。 这个注解就是@Transactional,就是这么优秀。所谓的声明式事务管理,就是通过在方法(或类)上添加注解声明来启用事务的方式。 声明式事务实例 第一,正常的编写数据对象Do与数据库表blog对应: package org . maoge . transactionaldemo ; /** * @theme 数据对象--博客 * @author maoge * @date 2020-01-27 */ public class BlogDo { private Long id ; private String title ; private String author ; private String content ; // 省略get get } 第二,编写数据库操作类,通过NamedParameterJdbcTemplate 操作数据库。 package org . maoge . transactionaldemo ; import java . util . HashMap ; import java . util . Map ; import org . springframework . jdbc . core . namedparam .

Spring事务

我是研究僧i 提交于 2020-02-07 01:47:59
事务管理 是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性; Spring 实现事务管理有如下两种方式: 编程式事务管理:   将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式管理事务中,必须在每个事务操作中包含额外的事务管理代码。 声明式事务管理(推荐):    大多数情况下比编程式事务管理更好用,它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理, Spring声明式事务管理建立在 AOP基础之上,是一个典型的横切关注点,通过环绕增强来实现,其原理是对方法前后进行拦截,然后在目标方法开始之前创建或加入一个事务,在执行完毕之后根据执行情况提交或回滚事务,其模型如下: public Object around(ProceedingJoinPoint joinPoint) throws Throwable { try { //开启事务 returnjoinPoint.proceed(); //提交事务 } catch (Throwable e) { //回滚事务 throwe; }finally { //释放资源 } } 如何实现声明式事务: 1、添加 spring-aspects-4.3.10.RELEASE.jar包 2、在 Spring配置文件中添加如下配置: <!-- 配置事务管理器 --> <bean id=

Spring Boot2.0之 整合Redis事务

99封情书 提交于 2020-02-06 07:41:47
Redis事物 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。 执行事务。 事务的开启很简单的: 可以使用AOP封装下~ 跟之前使用MySQL数据库没啥子区别的 看下目录 pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>redis</groupId> <artifactId>com.toov5.redis</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org

一文让你搞懂Spring的统一事务模型

拟墨画扇 提交于 2020-02-06 05:58:00
Spring事务的知识体系 进入主题之前,先来了解一下Spring事务,都有哪些内容: Spring事务包含对 分布式事务 和 单机事务 的支持,我们用的比较多的是单机事务,也就是只操作一个数据库的事务。 单机事务,按照用法分,又可以分为 编程式事务模型 (TransactionTemplate)和 声明式事务模型 (@Transactional注解),后者可以理解为 aop + 编程式事务模型。 编程式事务模型里面涉及到很多知识点,比如统一事务模型、事务传播级别、事务隔离级别等。 我们今天要讲的是其中一点, 统一事务模型 。 希望这次的分享能够让大家,对Spring事务有一个整体性的认识。 不仅仅是Template Spring的统一事务模型,解决的一个核心问题,就是不管你用的是什么数据访问方式,Hibernate、MyBatis抑或是JDBC, 你的Service层的代码都是一样的,不需要做任何变动。 使用@Transactional注解的,相信大家都用过,而且由于注解的实现比较隐晦,不利于我们理解原理,这里就不演示。 下面介绍编程式事务模型, TransactionTemplate : 不管后面你的Dao实现如何变化,上面这一段Service代码都无需修改,而且依旧可以保持事务的逻辑。 Spring是怎么做到的呢? 有人说,是 模板模式 。

一文让你搞懂Spring的统一事务模型

我的未来我决定 提交于 2020-02-06 05:45:48
Spring事务的知识体系 进入主题之前,先来了解一下Spring事务,都有哪些内容: Spring事务包含对 分布式事务 和 单机事务 的支持,我们用的比较多的是单机事务,也就是只操作一个数据库的事务。 单机事务,按照用法分,又可以分为 编程式事务模型 (TransactionTemplate)和 声明式事务模型 (@Transactional注解),后者可以理解为 aop + 编程式事务模型。 编程式事务模型里面涉及到很多知识点,比如统一事务模型、事务传播级别、事务隔离级别等。 我们今天要讲的是其中一点, 统一事务模型 。 希望这次的分享能够让大家,对Spring事务有一个整体性的认识。 不仅仅是Template Spring的统一事务模型,解决的一个核心问题,就是不管你用的是什么数据访问方式,Hibernate、MyBatis抑或是JDBC, 你的Service层的代码都是一样的,不需要做任何变动。 使用@Transactional注解的,相信大家都用过,而且由于注解的实现比较隐晦,不利于我们理解原理,这里就不演示。 下面介绍编程式事务模型, TransactionTemplate : 不管后面你的Dao实现如何变化,上面这一段Service代码都无需修改,而且依旧可以保持事务的逻辑。 Spring是怎么做到的呢? 有人说,是 模板模式 。

mysql事务隔离界别与锁机制

你说的曾经没有我的故事 提交于 2020-02-05 22:58:43
数据库锁 共享锁(Shared lock) 例1: ---------------------------------------- T1: select * from table (请想象它需要执行1个小时之久,后面的sql语句请都这么想象) T2: update table set column1='hello' 过程:T1运行 (加共享锁) T2运行等待T1运行完之后再运行T2 之所以要等,是因为T2在执行update前,试图对table表加一个排他锁,而数据库规定同一资源上不能同时共存共享锁和排他锁。所以T2必须等T1执行完,释放了共享锁,才能加上排他锁,然后才能开始执行update语句。 例2: ---------------------------------------- T1: select * from table T2: select * from table 这里T2不用等待T1执行完,而是可以马上执行。 分析: T1运行,则table被加锁,比如叫lockA T2运行,再对table加一个共享锁,比如叫lockB。 两个锁是可以同时存在于同一资源上的(比如同一个表上)。这被称为共享锁与共享锁兼容。这意味着共享锁不阻止其它session同时读资源,但阻止其它session update 例3: ---------------------------------

mysql(2)

爷,独闯天下 提交于 2020-02-05 21:27:11
1、DQL查询数据 1.1、DQL (Data Query LANGUAGE : 数据查询语言) 所有的查询操作都用它 Select 简单的查询,复杂的查询它都能做~ 数据库中最核心的语言,最重要的语句 使用频率最高的语句 1.2、指定查询字段 SELECT * FROM student SELECT * FROM result -- 查询指定字段 SELECT ` studentNo ` , ` studentname ` FROM student -- 别名 给结果起一个名字 SELECT ` studentNo ` AS 学号 , ` studentname ` AS 姓名 FROM student -- 函数 Concat(a,b) SELECT CONCAT ( '姓名:' , studentname ) AS 新名字 FROM student 语法: SELECT 字段,... FROM 表 去重 作用:去除SELECT 查询出来的结果中重复的数据,重复的数据只显示一条 -- 去重 SELECT * FROM result SELECT ` studentno ` FROM student SELECT DISTINCT ` studentno ` FROM student 数据库的列 SELECT VERSION ( ) -- 查询系统版本 SELECT 90 - 2

.NET工程师必须掌握的知识点

风格不统一 提交于 2020-02-05 21:00:45
Microsoft SQL Server 数据库 一、创建和维护数据库 1、数据库   SQL Server 数据库的组成部分?(参见联机丛书)   如何保证数据库的完整性、安全性、并发性?   数据库设计创建步骤?(参见联机丛书 - 创建数据库计划)   数据库设计考虑的事项?(参见联机丛书) 2、SQL Server 表   设计表时应注意哪些?   如何创建和使用约束、默认值和空值?   数据完整性分类有哪些?并且它们分别包括哪些约束?   约束有哪些?语法?   如何添加、修改和删除列? 在哪些情况下不可删除列?   创建和修改表 3、SQL Server 索引   索引的概念   索引的体系结构   索引的特性   索引的优点   索引的缺点   索引语法结构   主键、约束和索引   索引创建基本准则   索引的实际应用   重建索引? 4、SQL Server 视图   http://hi.baidu.com/ztf704/blog/item/9274cefc64a93ffffc037fb4.html   视图概念   功能特性   视图的几大优点   在创建视图前请考虑则   索引视图   索引视图必须满足下列要求   分区视图   可更新分区视图   可更新的分区视图规则   可更新的分区视图数据修改规则   分布式分区视图规则   视图使用时机 5、SQL

记账本开发记录——第十八天(2020.2.5)

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-05 19:38:22
今天学习了一个名为 事务 的东西。这个东西对于我是陌生的。事务,即主要用于处理一些操作量大,复杂度高的操作。在上学期的一系列学习中,由于系主任只是简单粗暴的想让我们学会增删改查,这种涉及工程的东西也难怪我们没有接触。但说到底还是要做工程的。今天对于事务进行了一个基本的了解。 首先,什么是事务,按照官方理解 就是 一件事情有 n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败, 就是将 n个组成单元放到一个事务中。其实照自己的理解来说,就是将多个操作捆绑到一起,要成功就一起成功,要失败就一起失败。说到底是为了防止一些意外发生,比如一个转账操作,如果在执行完转出后发生了异常,转入操作无法执行了,那这个客户的钱不就没了?这上哪说理去。事物就是为了防止这种情况的发生。我们一般使用的数据库是mysql,mysql的事务如下: 默认的事务:一条 sql语句就是一个事务 默认就开启事务并提交事务 手动事务: 1) 显示的开启一个事务: start transaction 2) 事务提交: commit代表从开启事务到事务提交 中间的所有的sql都认为有效 真正的更新数据库 3)事务的回滚:rollback 代表事务的回滚 从开启事务到事务回滚 中间的所有的 sql操作都认为无效数据库没有被更新 在了解了这个基础上,我们可以分别使用JDBC和DBUtils做个demo来测试。 1

关于Redis的ACID

徘徊边缘 提交于 2020-02-05 13:48:46
事务是一个数据库必备的元素,对于redis也不例外,对于一个传统的关系型数据库来说,数据库事务满足ACID四个特性: A代表原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 C代表一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束 I代表隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行 D代表持久性:已被提交的事务对数据库的修改应该永久保存在数据库中 然而,对于redis来说,只满足其中的: 一致性和隔离性两个特性,其他特性是不支持的。 关于redis对ACID四个特性暂时先说这么多,在本文后面会详细说明。在详述之前,我们先来了解redis事务具体的使用和实现,这样我们接下来讨论ACID时才能更好的理解。 redis事务的使用 redis事务主要包括MULTI、EXEC、DISCARD和WATCH命令 MULTI命令 MULTI命令用来开启一个事务,当MULTI执行之后,客户端可以继续向服务器发送多条命令,这些命令会缓存在队列里面,只有当执行EXEC命令时,这些命令才会执行。 而DISCARD命令可以清空事务队列,放弃执行事务。