ExcellentBoy
  • ⏱所有文章
  • 🔖标签
  • 👨🏻‍💻分类
  • 🔍搜索
  • 🙋🏻‍♂️关于我
  • GitHub 

Learn

Spring 事务管理

Spring 事务管理 事务的基础概念 什么是事务 事务是指逻辑上的一组操作,要么一起成功、要么一起失败。 事务的特性 原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性:一致性指事务前后数据的完整性必须保持一致。 隔离性:隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。 持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有影响。 事务隔离级别 READ_UNCOMMITED:允许读取还未提交的数据,可能导致脏读、不可重复读、幻读。 READ_COMMITTED:允许读取并发事务已提交的数据,可防止脏读,但不可重复读、幻读仍可能发生。 REPEATABLE_READ: 在统一事务中读取的数据保持一致,即使其他事务对其修改并提交。 SERIALIZABLE:将并发事务串行化,解决一切问题。 Spring 接口介绍 三个抽象接口 事务管理器:PlatformTransactionManager 事务定义信息(隔离级别、传播行为、超时、只读):TransactionDefinition 事务运行状态:TransactionStatus FlatformTransactionManager TranscationDefinition 事务的传播行为 事务传播行为 描述 PROPAGATION_REQUIRED 支持当前事务,如果不存在就新建一个 PROPAGATION_SUPPORTS 支持当前事务,如果不存在就不使用事务 PROPAGATION_MANDATORY 支持当前事务,如果不存在则抛出异常 PROPAGATION_REQUIRES_NEW 创建一个新事务,如果有事务存在则挂起 PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在则挂起 PROPAGATION_NEVER 以非事务方式运行,如果存在事务则抛出异常 PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行 TransactionStatus Spring 事务管理操作 准备转账案例 表设计 CREATE TABLE `account` ( `id` int(11) NOT NULL, `name` varchar(50) NOT NULL, `money` decimal(10, 2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; INSERT INTO imooc_demo.account (id, name, money) VALUES (1, 'a', 1000.00); INSERT INTO imooc_demo.account (id, name, money) VALUES (2, 'b', 1000.00); INSERT INTO imooc_demo.account (id, name, money) VALUES (3, 'c', 1000.00); 实现 DAO 层 public interface AccountDao { void accountAdd(String name, BigDecimal decimal); void accountSub(String name, BigDecimal decimal); } public class AccountDaoImpl implements AccountDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Override public void accountAdd(String name, BigDecimal decimal) { String sql = "update account set money = money + ? where name = ?"; this.jdbcTemplate.update(sql, decimal, name); } @Override public void accountSub(String name, BigDecimal decimal) { String sql = "update account set money = money - ? where name = ?"; this.jdbcTemplate.update(sql, decimal, name); } } 实现 Service 层 public interface AccountService { void transfer(String from, String to, BigDecimal money); } public class AccountServiceImpl implements AccountService { private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } @Override public void transfer(String from, String to, BigDecimal money) { accountDao.accountSub(from, money); accountDao.accountAdd(to, money); } } 使用 XML 方式声明对象 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://hostip:port/dbname"/> <property name="username" value="name"/> <property name="password" value="password"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="accountDao" class="dao.AccountDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"/> </bean> <bean id="accountService" class="service.AccountServiceImpl"> <property name="accountDao" ref="accountDao"/> </bean> 测试转账效果 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class AccountServiceImplTest { @Resource private AccountService accountService; @Test public void transfer() { accountService.transfer("a", "b", BigDecimal.valueOf(200)); } } 编程式的事务管理 配置事务管理器 ...

2020-11-29     更新 2020-11-29  |  1187字    3分钟    作者: XiangLin    Spring

MyBatis 拦截器

MyBatis 插件原理及 PageHelper 分页插件介绍 从 JDBC 开始 JDBC 介绍 JDBC(Java Database Connectivity)API 是 Java 语言与广泛数据库产品交互的基础,JDBC 技术体现了 Java "write Once,Run AnyWhere"的思想,即Java 为数据库访问提供一套纯 Java API,同时提供一个驱动管理器(DriverManager)。数据库供应商提供自己的数据库驱动,并注册到 Java 提供的DriverManager 中。 ...

2020-10-31     更新 2020-10-31  |  6919字    14分钟    作者: XiangLin    Mybatis

SpringMVC

Spring MVC Spring MVC 环境搭建 引入 spring-mvc 相关依赖 <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> </dependencies> 在web.xml中配置DispatcherServlet <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 创建并配置applicationContext.xml ...

2020-10-06     更新 2020-10-06  |  2805字    6分钟    作者: XiangLin    Spring Mvc

Spring 基础

Spring Spring IOC IOC:控制反转 IOC 控制反转,全称 Inverse of Control,是一种设计理念。 由代理人来创建与管理对象,消费者通过代理人获取对象。 IoC 的目的是降低对象之间的直接耦合。 DI:依赖注入 IOC 是设计理念,是现代程序设计遵循的标准,是宏观目标。 DI(Dependency Injection)是具体技术实现。 DI 在 Java 中利用反射技术实现对象注入。 Bean 配置方式 基于 XML 配置 JavaBean:applicationContext.xml 基于注解配置 JavaBean 基于 Java 代码配置 JavaBean 路径表达式: ...

2020-10-04     更新 2020-10-04  |  2246字    5分钟    作者: XiangLin    Spring

Redis 基础

Redis 介绍 Redis 简介 Redis 是 key-value 型 NoSQL 数据库 Redis 将数据存储在内存中,同时也能持久化到磁盘中 Redis 常用于缓存,利用内存的高效提高程序的处理速度 Redis 特点 速度快 广泛的语言支持 支持数据磁盘持久化 多种数据结构 支持主从复制 支持分片 分布式与高可用 Redis 常用配置项 配置 示例 说明 daemonize daemonize yes 是否启用后台运行 port port 6379 设置端口号 databases databases 16 设置 redis 数据库个数 requirepass requirepass abc123 设置 redis 连接密码 Redis通用命令 select set get keys dbsize exists del expire ttl Redis 数据结构 string:字符串,值的长度不能超过 512 MB,是二进制安全的。 set key value [EX seconds] [PX milliseconds] [NX|XX] EX:将键的过期时间设置为seconds秒,set key value ex seconds等同于setex key seconds value PX:将键的过期时间设置为milliseconds毫秒,与psetex key milliseconds value 等价 NX|XX:只有在键不存在|存在时,才对键执行设置操作,set key value NX等同于setnx key value mset key value [key value ...] mget key [key ...] incr key | incrby k increment decr key | decrby key decrement exists key [key ...] del key [key ...] expire key seconds ttl key hash:键值类型 list:列表,Redis lists基于Linked Lists实现。 set:无序排列 zset:有序排列 Redis Redis 为啥这么快 Redis 支持 100000+QPS。 ...

2020-10-03     更新 2020-10-03  |  2555字    6分钟    作者: XiangLin    Redis

MyBatis 基础

MyBatis 基础 MyBatis 中文文档 MyBatis-Spring 中文文档 MyBatis-Spring-Boot 文档 PageHelper 地址 MyBatis 介绍 MyBatis 是优秀的持久层框架 MyBatis 使用 XML 将 SQL 与程序代码解耦,便于维护 MyBatis 学习简单,执行高效,是 JDBC 的延伸 MyBatis 开发流程 引入 MyBatis 依赖 创建核心配置文件 创建实体(Entity)类 创建 Mapper 映射文件 初始化 SessionFactory 利用 SQLSession对象操作数据 SqlSessionFactory SqlSessionFactory 是 MyBatis 的核心对象 SQLSessionFactory 用于初始化MyBatis,创建 SQLSession 对象 应保证 SQLSessionFactory 全局唯一 SqlSession SQLSession 是MyBatis 操作数据库的核心对象 SQLSession 使用 JDBC 与数据库交互 MyBatis 查询 MyBatis 日志框架 Mybatis 通过使用内置的日志工厂org.apache.ibatis.logging.LogFactory提供日志功能。内置日志工厂将会把日志工作委托给下面的实现之一: ...

2020-09-15     更新 2020-09-15  |  6274字    13分钟    作者: XiangLin    Mybatis

Lambda、Stream与函数式编程

Lambda Java8 开始支持Lambda 表达式,让程序编写更简洁、优雅 利用 Lambda 表达式可以更简洁的实现匿名内部类和函数声明与调用 Lambda 使得 Stream 流式编程为操作集合提供便利 Lambda 表达式语法结构 (参数列表) -> 实现语句 public static void main(String[] args) { // 标准使用方式 MathOperation operation = (double a, double b) -> { System.out.println("加法运算"); return a + b; }; System.out.println(operation.opt(1, 3)); // Lambda 允许忽略参数类型 MathOperation operation1 = (a, b) -> { return a - b; }; System.out.println(operation1.opt(4, 1)); // 单行代码可以省略方法体和 return 语句 MathOperation operation2 = (a, b) -> a * b; System.out.println(operation2.opt(2, 5)); } 函数式编程 基于函数式接口并使用 Lambda 表达式的编程方式 函数式编程的理念是将代码作为可重用数据代入到程序运行中 函数式接口 有且仅有一个抽象方法的接口 Java8 提供了一系列新的函数式接口,位于java.util.function包中 Predicate用于判断传入的数据是否满足要求,使用test()方法进行逻辑判断 java.util.function.Predicate :用于条件判断,返回 Boolean 值 java.util.function.Consumer:对应只有一个输入参数,而不需要返回的情况 java.util.function.Function:对应一个输入参数,且返回数据的情况 Stream Stream流式处理是建立在 Lambda 表达式基础上的多数据处理技术 Stream 对集合数据处理高度抽象,极大简化代码量 Stream 可以对集合数据进行迭代、去重、筛选、排序、聚合等操作 位于java.util.stream.Stream 创建流的五种方式 基于数组创建 ...

2020-09-12     更新 2020-09-12  |  654字    2分钟    作者: XiangLin    Lambda  Stream

Java 反射

反射是在运行时动态访问类与对象的技术。

2020-09-12     更新 2020-09-12  |  761字    2分钟    作者: XiangLin    Java

Maven 基础

Maven Maven 的核心特性 Maven 是项目管理工具,对软件项目提供构建和依赖管理 Maven 是 Apache 下的 Java 开源项目 Maven 为 Java 项目提供了统一的管理方式,已成为业界标准 项目设置遵循统一的规则,保证不同开发环境的兼容性 强大的依赖管理,项目依赖组件自动下载,自动更新 Maven 官网 Maven 项目的标准结构 使用 mvn命令创建 Maven 项目 ...

2020-09-12     更新 2020-09-12  |  3766字    8分钟    作者: XiangLin    Maven

MySQL 事务

MySQL事务 MySQL事务简介 数据库的事务是指一组SQL语句组成的数据库逻辑处理单元,在这组SQL操作中,要么全部执行成功,要么全部执行失败。简单又经典的例子就是转账,事务A中进行转账,那么转出的账号要扣钱,转入的账号要加钱。为了保证数据一致性,这两个操作都必需要同时执行成功。 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的。 事务用来管理insert、update、delete语句。 MySQL事务特性 ACID简介 MySQL中事务的四大特性包括:原子性(Atomicity)、一致性(Consistent)、隔离性(Isolation)、持久性(Durable),简称ACID。 ...

2020-09-07     更新 2020-09-07  |  2809字    6分钟    作者: XiangLin    Mysql
« 上一页  下一页  »
© 2026 Daily Record Powered by Hugo & PaperMod