Spring学习04

2023-11-10


与持久层整合

基于模板设计模式与持久层进行整合

与Mybatis整合

Mybatis-config

  1. 数据源配置
  2. 别名配置
  3. Mapper文件配置

SqlSessionFactoryBean

  • dataSource
  • typeAliasesPackage
  • mapperLocations

MapperScannerConfigure

  • sqlSessionFactoryBeanName
  • basePackage
<bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://mysql:3306/test?useSSL=false"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</bean>
<bean id="ssfb" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dateSource"/>
    <property name="typeAliasesPackage" value="com.tonkia.mybatis.pojo"/>
    <property name="mapperLocations">
        <list>
            <value>classpath*:*Mapper.xml</value>
        </list>
    </property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="ssfb"/>
    <property name="basePackage" value="com.tonkia.mybatis.dao"/>
</bean>

classpath:只会到指定的class路径中查找文件
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找

事务处理

要么都发生,要么都不发生(业务开发中比较重要)

四大特点

  • A:原子性
  • C:一致性
  • I:隔离性
  • D:持久性

JDBC

Connection.setAutoCommit(false);
Connection.commit();
COnnection.rollback();

Mybatis

# 自动开启事务
sqlSession.commit();
sqlSession.rollback();
Spring控制事务开发

通过AOP完成

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

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

使用@Transactional指定控制事务的切点

事务属性

描述事务特征一系列值

  1. 隔离属性:isolation
  2. 传播属性:propagation
  3. 只读属性:readOnly
  4. 超时属性:timeout
  5. 异常属性:rollbackFor,noRollbackFor
隔离属性(isolation)

描述了事务解决并发问题的特征
并发:多个事务(用户)访问了同一个数据,导致

  • 脏读:一个事务读了另外一个数据没有提交的数据(isolation = Isolation.READ_COMMITED
  • 不可重复读:多次读取相同数据但是结果不一致(isolation = Isolation.REPEATABLE_READ)行锁
  • 幻影读:多次对表统计,但是结果不一致(isolation = Isolation.SERIALIZABLE)表锁

数据库支持

  • READ_COMMITED:MySQL、Oracle
  • REPEATABLE_READ:MySQL
  • SERIALIZABLE:MySQL、Oracle

默认隔离级别
ISOLATION_DEFAULT:调用不同数据库设置的隔离级别
MySQL:REPEATABLE_READ
Oracle:READ_COMMITED

select @@tx_isolation

在这里插入图片描述
实战中使用默认
如果真遇到并发问题使用乐观锁(Version)

传播属性(propagation)

解决事务嵌套问题
Service调用Service可以出现事务嵌套
大事务嵌套小事务导致大事务丧失原子性

  • REQUIRED(默认):增删改
  • SUPPORTS:查
  • REQUIRES_NEW:日志
  • NOT_SUPPORTED
  • NEVER
  • MANDATORY

在这里插入图片描述

只读属性(read-only)

针对于只进行查询的业务,可以提高运行效率,默认为false

超时属性(timeout)

并发操作等待
超时则抛出异常,默认值为-1(由数据库来决定)

异常属性

默认

  • 对于RuntimeException及其子类,回滚
  • Exception及其子类,提交
  • rollbackFor = { }
  • notRollbackFor = { }
实践使用

增删改:@Transitianal
查:@Transitianal(propagation = Propagation.SUPPORTS, readOnly = true)

基于标签的事务配置方式
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dateSource"/>
</bean>
<tx:advice transaction-manager="transactionManager" id="txAdvice">
    <tx:attributes>
        <!--有优先级-->
        <tx:method name="update*"/>
        <tx:method name="del*"/>
        <tx:method name="insert*"/>
        <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
        <tx:method name="*" propagation="SUPPORTS" read-only="true"/>
    </tx:attributes>
</tx:advice>
<aop:config>
    <aop:pointcut id="pc" expression="execution(* com.tonkia.mybatis.service..*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring学习04 的相关文章

  • 使用QRCoder生成二维码【.NET 6.0】

    nuget 包 QRCoder 二维码 install package QRCoder 1 4 3 粘贴板 install package TextCopy 6 2 1 using QRCoder using Spectre Console
  • 【毕业设计】 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 总体框架 AB32VG1主控MCU 5 软件说明 总体框架 6 部分核心代码 7 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创
  • 【Matlab学习笔记】matlab的编程规则

    1 Matlab的续行符 关于matab的换行 在matlab代码的编写过程中 有时会遇到代码在一行显示不开了 或者在txt文档 或其他代码编辑后 由于其本身格式的作用 代码可能会自动换行 将这样的代码直接粘贴到matlab的命令窗口运行
  • Windows系统安装Java环境

    一 安装jdk 不同平台安装不同的包 Oracle官方下载 Oracle官方各版本 推荐安装jdk1 8 32位操作系统 准备jdk xxx windows i586 exe 64为操作系统 准备jdk xxx windows x64 ex
  • Linux进程间通信方式--本地socket

    先上一个代码 服务端 cpp view plain copy s unix c include
  • js获取任意一天的起始和结束时间戳,sql转换时间戳

    最近写代码时 需要获取任意一天的起始和结束时间 0点和23 59 59这两个时间的时间戳 使用了setHours 方法 setHours 方法用于设置指定的时间的小时字段 1 获取当天开始时间 moment new Date new Dat
  • 巨头推广刷脸支付依旧重重加码

    正如当年支付宝推广二维码 在推广刷脸支付上 巨头依旧重重加码 支持商家实现数字化转型 如此力度推广 对于服务商而言是一块巨大的蛋糕 回想推广二维码时期赚的盆满钵满的服务商们 刷脸支付必然会吸引一大波创业者前来逐利 而刷脸支付的红海就在这两年
  • STM32移植lwip之官方工程修改

    本篇目标 在之前的硬件基础上 修改ST官方移植lwip的工程 使PC机能ping通stm32 材料准备 硬件基础 stm32f407 lan9303 官方资料 包含代码和移植手册 stm32官方移植lwip资料 修改代码 包含移植后的代码
  • CPU特权级保护

    1 特权级 1 1特权级 处理器段保护机制可以识别0 3共4级特权级 数值越大 特权越小 处理器通过识别CPL DPL RPL这三种特权级来进行特权级校验 1 CPL CPL是当前正在执行程序或任务的特权级 它存放在CS和SS段寄存器的0位
  • 柏林噪声算法(Perlin Noise)

    概述 引述维基百科的介绍 Perlin噪声 Perlin noise 又称为柏林噪声 指由Ken Perlin发明的自然噪声生成算法 具有在函数上的连续性 并可在多次调用时给出一致的数值 在电子游戏领域中可以透过使用Perlin噪声生成具连
  • 基于霍尔传感器的三轴磁场检测小装置

    本次项目是制作一个三轴磁场检测的小装置 采用霍尔传感器实现检测 首先我们来介绍一下什么是霍尔传感器 1 霍尔传感器介绍 霍尔传感器是根据霍尔效应制作的一种磁场传感器 磁场中有一个霍尔半导体片 恒定电流I从A到B通过该片 在洛仑兹力的作用下
  • Python打包可执行文件-BeeWare

    前言 本文是想要将python代码打包成在手机上能执行的文件 尝试了几个库 有这也那样的限制 最终还是选了BeeWare 环境 python3 7 x 开始 找到打包有相关工具os android apk builder buildozer
  • sqlserver 快速插入数据 如何使用索引_如何快速安全的插入千万条数据

    前言 最近有个需求解析一个订单文件 并且说明文件可达到千万条数据 每条数据大概在20个字段左右 每个字段使用逗号分隔 需要尽量在半小时内入库 思路 估算文件大小 因为告诉文件有千万条 同时每条记录大概在20个字段左右 所以可以大致估算一下整
  • C++opencv图像裁剪、等比例放大缩小、复制到指定区域

    描述 C 使用opencv时 对imshow图像进行的常见处理 包括图像剪裁 等比例压缩等 待继续补充 代码 1 剪裁 int matrix size 3000 cv Mat image matrix size matrix size CV
  • 【CTF\Crypto】聪明的小羊

    聪明的小羊 题目 解题思路 在线的解密工具 离线的解密工具 心得 题目链接 题目 一只小羊翻过了2个栅栏 fa fe13f590lg6d46d0d0 解题思路 观察题目中的关键信息 2个栅栏 所以我们怀疑题目可能是个栅栏密码 我们看见题目中
  • unity 调用android的activity,Unity调用Android的Activity

    写了关于Unity与Android结合所遇到的问题及解决方法 总结一下 Unity做一个简单的场景 AndroidStudio建一个简单的项目 其中MainActivity是要继承自 UnityPlayerActivity的 这样Unity
  • python学习(5):celery-beat-task异步驱动框架

    https github com celery celery tree master examples celery的example程序periodic tasks存在如下问题 2017 08 26 21 52 11 412 INFO Ma
  • 开发中遇到的问题

    1 当写一个导出功能时 因为编码写URL地址 参数的时候 用反转字符串的时候换行了 造成地址拼接不成 一直报错 后来发现是编码格式造成的 已解决 解决方案 不换行或者用 拼接 2 当本地项目起两个终端的时候 会有两个地址 如http loc
  • CSS !important 规则

    CSS important 规则 那么什么是 important呢 CSS中的 important 规则用于向属性 值添加比正常值更重要的内容 事实上 如果你用 important 规则 它将覆盖该元素上该特定属性的所有以前的样式设置规则
  • 利用Matlab实现贝叶斯优化卷积神经网络进行数据回归预测

    利用Matlab实现贝叶斯优化卷积神经网络进行数据回归预测 概述 数据回归预测是一项重要的任务 可以通过建立卷积神经网络 Convolutional Neural Network CNN 来实现 然而 在模型参数调优方面存在着挑战 为了解决

随机推荐

  • http请求参数编码问题

    给某api发送http请求 结果查不到数据 而api开发者自测可以查到数据 僵持不下 经过分析发现 我的url是经过urlencode编码的 传出去的中文变成 E5 B2这种 而api开发者的url是明文传输中文 我通过httpclient
  • 构造原生单选或者多选下拉框

    function getRadioList tag pageNum pageSize ajaxHelper ajaxFun type post url data data contentType application json async
  • 急速安装git lfs

    什么是git LFS LFS是large File Storage的缩写 专门用来帮助git管理大型文件 一 curl s https packagecloud io install repositories github git lfs
  • 【问题解决】eclipse ‘Launching Hello'has encountered a problem

    问题 删除eclipse很多项目后 再次运行某一个项目 就会出现错误 eclipse Launching Hello has encountered a problem 解决方案 点此启动此项目 即可 原因 看网上答案 原来点 run 时是
  • 3D 智慧农场可视化——解锁绿色生态田园

    何为 无人农场 中国工程院院士罗锡文用五句话高度概括 耕种管收生产环节全覆盖 机库田间转移作业全自动 自动避障异况停车保安全 作物生产过程实施全监控 智能决策精准作业全无人 随着新一代信息技术飞速融入传统产业 农业数字化 网络化 智能化逐步
  • 聊天室--javaWeb

    文章目录 一 简介 项目说明 实现的主要功能 系统架构 二 项目代码和demo地址 项目代码 项目demo地址 三 具体的功能实现 登录功能 单点登录 聊天功能的实现 踢人功能 简单的分权限 四 补充说明 关于代码 关于项目部署 一 简介
  • 方舟官方服务器怎么显示血量,方舟端游怎么显示血量

    解决方舟如何显示伤害数字 在ARK ShooterGame Saved Config WindowsNoEditor文件夹下的GameUserSetting文件的 ServerSettings 的最后一行中添加命令 ShowFloating
  • array_filter函数的简单使用

    array filter函数 学习笔记 代码 function test odd var 先创建一个方法 方法是调动test odd函数 return var 1 返回条件 取奇数 a1 array a b c 2 3 4 11 23 ec
  • #vue# vue锚点定位,滚动到具体位置

    需求 点击导航栏的各个tab 跳转 滚动 到当前页面的具体位置 步骤 1 首先在导航栏的版块里面加入方法goToAnchor 以及 跳转的id类名 div class nav item center div About div div To
  • 查看.o, .obj文件符号列表,强大的nm命令

    nm命令可以查看 linux以及windows下的 o obj文件中的符号列表 其中 o文件可以由gcc g 编译得到 obj由vc编译得到 太爽了 以后遇到undefined reference错误的时候就可以这个命令搞定了 举一例子 在
  • 【java笔记】常用接口(2):Consumer接口

    Consumer接口是一个消费型接口 泛型指定什么类型 就可以使用accept消费什么类型数据 直接输出 public class Demo public static void main String args method asd na
  • 高德地图弹窗使用vue模板

  • android 遍历assets下的文件

    在AssetManager中有个list 方法 传入你的子文件名称即可 String flLists this getAssets list your subdir 如果是根目录 那么就是这么写 AssetManager assetMana
  • 集合框架的简要介绍

    目录 集合和数组的区别 Collection接口 ArrayList实现类 ArrayList的创建和使用 linkedList Set接口及其实现类 Set接口特点 HashSet实现类 HashSet特点 HashSet避免对象重复的规
  • Service能够创建界面(addView)吗?

    一个Service能够创建界面 addView 吗 一个app 只有Service 没有Activity 能够通过WindowManager调用addView 添加可视界面吗 答案是可以 但是能够创建的界面类型 WindowManager
  • 虚拟化原理介绍

    什么是虚拟化 一台PC机的组成包括 Keyboard 键盘 Monitor 显示器 CPU RAM I O Disk Network 这是基本的五大部件 虚拟化就是在这些基础物理设备上运行多个OS 虚拟化面临的重要问题概述 CPU RAM
  • Android :提取字符串当中的数字

    String a String regEx 0 9 Pattern p Pattern compile regEx Matcher m p matcher fl System out println m replaceAll trim 结果
  • 含测试点归纳

    小编提示 本文含静态测试主要检查点 纯干货 看官们可先收藏后阅读 从是否执行被测试软件来进行分类 测试可以分为静态测试和动态测试 软件本身包含了各种代码 如果只是检查代码和文档 而不执行被测试的软件 此时所进行的就是静态测试 反之 如果在测
  • 解决Jasperreport的web 套打

    前段时间写了一篇 解决Jasperreport的web打印另一种方法http www blogjava net three 3 archive 2010 06 24 324329 html 关于在web中的打印 套打是经常被提到的 这个需求
  • Spring学习04

    文章目录 与持久层整合 与Mybatis整合 事务处理 Spring控制事务开发 事务属性 隔离属性 isolation 传播属性 propagation 只读属性 read only 超时属性 timeout 异常属性 实践使用 基于标签