事务就是针对数据库的一组操作。由一条或者多条SQL语句组成,同一个事务的操作具备同步的特点,如果其中的一条语句无法执行,那么所有的语句都不会执行。
本文主要讲述springboot提供的声明式的事务管理机制。 一、一些概念 声明式的事务管理是基于AOP的,在springboot中可以通过@Transactional注解的方式获得支持,这种方式的优点是: 1)非侵入式,业务逻辑不受事务管理代码的污染。 2)方法级别的事务回滚,合理划分方法的粒度可以做到符合各种业务场景的事务管理。 本文使用目前最常用的mybatis框架来配置springboot的事务管理机制。下面进入配置方法介绍。 二、springboot mybatis事务配置 1、看一下pom依赖
以操作账户金额为例,模拟正常操作金额提交事务,以及发生异常回滚事务。其中控制层代码如下:
mybatis的核心配置之properties 创建jdbc.properties 一般在实际的项目中。数据库的连接信息。会存放在一个jdbc.properties的属性配置文件中
以银行账户转账为案例 数据库表 spring6整合mybatis pom.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=
代码直接放在Github仓库【https://github.com/Damaer/Mybatis-Learning】,mybatis-02可直接运行,就不占篇幅了。
网上有很多示例,都是很多案例没有给出可运行的项目源码,搭建过程中会遇到很多坑,本文文末会给出可运行源码,方便大家改造学习。
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
配置思路 在Spring Boot中使用xml集成MyBatis的话,那么核心的文件就是实体类和SQL的映射类,比如DemoDao,在此类当中就是普通的接口即可,那么对应SQL配置文件在Demo.xml中,那么要怎么能够识别到DemoDao类呢,使用@MapperScan();在Demo.xml中使用<mapper> 的 namespace属性进行指定指定xml文件和mapper的对应关系,那么现在的问题就是如何识别到Demo.xml配置文件呢,这个就很简单了,在application.yml文件中配置m
前文介绍了Spring最基本的功能,Spring是一个DI(依赖注入)容器和AOP(面向切面)容器,但这仅仅是手段,远不是目标,Spring的目标是整合与简化其他Java框架的开发,通过DI管理其他框架和组件,利用AOP分离繁复部分,使得复杂问题透明化。下图罗列了Spring框架的部分功能,不难看出,Spring感觉就像北冥神功:海纳百川,皆为我用。
第3章 MyBatis全局配置文件 3.1 MyBatis全局配置文件简介 The MyBatis configuration contains settings and properties that have a dramatic effect on how MyBatis behaves. MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。 文件结构如下: configuration 配置 properties 属
如果是不支持事务的引擎,如myisam,则是否commit都没有效的。如果是支持事务的引擎,如innodb,则有系统参数设置是否自动commit,查看参数如下:
和 MyBatis-03 MyBatis XML方式之select元素比起来,insert要简单的多。 只有让它返回主键值时,由于不同的数据库的主键生成方式不同,这种情况会复杂一点。
事务的概念,大家都不会陌生。在我们写增删改的时候,我们肯定都需要加上事务,来保证数据的一致性。MyBatis作为Java语言的数据库框架,对数据库的事务管理是其非常重要的一个方面。在Mybatis中,同样提供了事务的功能,所以我们有必要了解一下MyBatis的事务管理的实现机制。
Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
MyBatis批量插入数据实现(MySQL)
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
1. MyBatis核心配置文件层级关系 [在这里插入图片描述] 2. MyBatis常用配置解析 2.1 environments 标签 数据库环境的配置,支持多环境配置 [在这里插入图片描述] 其中,事务管理器(transactionManager)类型有两种: JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。 MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
Spring 事务是复杂一致性业务必备的知识点,掌握好 Spring 事务可以让我们写出更好地代码。这篇文章我们将介绍 Spring 事务的诞生背景,从而让我们可以更清晰地了解 Spring 事务存在的意义。
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。对于Seata不太了解的朋友,可以看下我之前写的文章: 微服务开发的最大痛点-分布式事务SEATA入门简介。
本系列笔记涉及到的代码在GitHub上,地址:https://github.com/zsllsz/cloud
原始jdbc开发存在的问题如下: 1.数据库创建及频繁释放造成系统资源浪费 2.sql语句在代码中硬编码,实际运用中sql的变化较大,sql变动需要改变java代码 3.查询操作,需要手动将结果集里的数据封装到实体中,插入操作时,需要手动将实体的数据设置到sql语句的占位符
前面说了搭建MyBatis环境,本文是对MyBatis使用时的核心配置文件的一些说明
Spring Boot中实现事务没有额外的Jar包,还是基本的数据库访问包,比如mybatis
MyBatis批量插入数据实现(MySQL)
在学习Java的过程中,一般都会学习到使用JDBC连接和操作数据库的知识。Mybatis则是JDBC的一个上层封装,它简化了驱动加载、创建连接等操作。我们只要按照规范配置几个文件、写几个Java类和按一定规则将这些配置文件通过代码的形式加以利用,即可完成数据库的相关操作。 这个系列我们将学习Mybatis以及基于它开发出的工具MybatisPlus。在这个探索的过程中,我们将依赖包的管理交给Maven去做,注意力主要集中在Mybatis相关技术的应用上。 这个案例将依赖于两个模块:
•插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);
根据配置信息(eg:mybatis-config.xml)或者代码来生成SqlSessionFactory。
先介绍一下《MySQL数据库开发的三十六条军规》,这里只介绍核心的,具体内容大家可以自行百度,这是从底层开发人员到管理者必须知道规范。出自58赶集。 写在前面的话: 总是在灾难发生后,才想起容灾的主要性; 总是在吃过亏后,才记得有人提醒过。 核心军规: 不在数据库做计算,CPU计算务必移至业务层; 控制单表数据量,单表记录控制在千万级; 控制列数量,字段数控制在20以内; 平衡范式与冗余,为提高效率可以牺牲范式设计,冗余数据; 拒绝3
数据层有事务我们可以理解,为什么业务层也需要处理事务呢?数据层有事务我们可以理解,为什么业务层也需要处理事务呢?
互联网往往采用模型—视图—控制器(Model View Controller,MVC)来搭建开发环境,因此在Controller中使用Service是十分常见的。
负责将代理类记性扫描,扫描的是Mapper接口所在的包,这个是mybatis提供的,所以会去找SqlSessionFactory
单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三三 个服务来完成。此时每个服务内部的数据一致性由本地事务来保证, 但是全局的数据一致性问题没法保证。
Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。
2.sql语句在代码中硬编码,实际运用中sql的变化较大,sql变动需要改变java代码
案例源码使用SpringBoot 2.3.2 + Dubbo 2.7.6 + Mybatis 1.3.2 + Nacos 1.3.2 + Seata 1.3.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 Dubbo和Seata的注册中心和配置中心,使用 MySQL 数据库和 MyBatis来操作数据库。
MyBatis应用是以SqlSessionFactory为中心的,实例可以通过SqlSessionFactoryBuilder获得.
这个问题之前遇到过一次,但是由于不知道导致锁表的原因,也没细想,就知道表被锁了,然后让别人把表给解锁了。但是前天的一次操作,让我亲眼见证了导致锁表的过程,以及如何给lock的表解锁。
此时我们即可在映射文件中使用自定义别名,如帮User类配置一个别名 ① 配置文件:
Java概念 数据库概念 类 表 属性 字段/列 对象 记录/行
Sping是分层的Java SE/EE 应用 Full-stack 轻量级开源框架,以Ioc(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层SpringMVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。
https://www.bilibili.com/video/BV1nz4y1d7uy
早期SUN公司想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动。
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
到目前为止web.xml中出现的标签:servlet filter listener context-param。
👆点击“博文视点Broadview”,获取更多书讯 数据事务是企业应用关注的核心内容,也是开发者最容易犯错的地方。 本文就来讲解一些使用中的不良习惯,注意,它们可以避免一些错误和性能的丢失。 错误使用Service 互联网往往采用模型—视图—控制器(Model View Controller,MVC)来搭建开发环境,因此在Controller中使用Service是十分常见的。 为了方便测试,角色服务(roleService)和角色列表(RoleListService)进行测。假设我们想在一个Control
领取专属 10元无门槛券
手把手带您无忧上云