Spring基础4
一、Spring的JDBC模板
Spring对持久层也提供了解决方案,ORM模块和JDBC模板
提高简化JDBC或Hibernate的模板
二、JDBC模板使用入门
1)引入jar包:Spring开发包,数据库驱动包,SpringJDBC模板jar包
2)建表
3)使用JDBC模板,不交给Spring管理时
插入数据
public class SpringJDBCTest {
@Test
public void test(){
//1.创建连接池(数据库相关信息)
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql:///spring");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("1234");
//2.创建JDBC模板
JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
jdbcTemplate.update("insert into account values (null,?,?)","ual",999d);
}
}
用Spring 属性注入
4)使用开源连接池
以上使用的连接池是Spring自带的连接池
在开发中,一般使用第三方的连接池。
1.DBCP:
1.1引入jar包:
1.2配置DBCP连接池:与Spring自带连接池配置基本相同
2.c3p0
2.1引入jar包
2.2 配置
3. Druid
3.1引入jar包
3.2配置
5)Spring 加载属性文件
把数据库连接配置写入属性文件,再从属性文件中读取
1.context方式
2.bean方式
三、JDBC模板CRUD
1.插入操作
2.删除操作
3.更新操作
4.查询操作
4.1.查询返回某个字段
4.2 查询返回对象的集合
四、事务
1)事务概述
什么是事务:逻辑上的一组操作,组成这个操作的各个单元,要么全部成功,要么全部失败
事务的特性
1.原子性:事务不可分割
2.一致性:事务执行前后数据完整性保持一致
3.隔离性:一个事务的执行不应该受到其他事务的干扰
4.持久性:一旦事务结束,数据就持久化到数据库
如果不考虑事务的隔离性,可能会造成一些安全的问题:
1.读问题:脏读:一个事务读到另一个事务未提交的数据
不可重复读:一个事务读到另一个事务已提交的update数据,导致一个事务多次查询结果不一致
幻读:一个事务读到另一个事务已提交的insert数据,导致一个事务多次查询结果不一致
2.写问题:丢失更新:
解决读问题:设置事务隔离级别:
Read uncommitted :未提交读,任何读问题都解决不了
Read committed:已提交读,解决脏读,但不可重复读虚读仍有可能发生
Repeatable read :重复读,解决脏读和不可重复读,但幻读仍有可能发生
Serializable :解决所有读问题
2)Spring中事务管理API
1.PlatfromTransactionManager:
1.1 PlatfromTransactionManage:平台事务管理器,是一个接口,下面有两个实现类
DataSourceTransactionManager:底层使用JDBC管理事务
HibernateTransactionManager:底层使用Hibernate管理事务
2.TransactionDefinition:用于定义事务的相关信息,隔离级别,超时信息,传播行为,是否只读
3.TransactionStatus:事务状态:用于记录在事务管理过程中,事务的状态对象。
4.事务管理API的关系:Spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务管理
在事务管理过程中,产生各种状态,将这些状态信息记录到事务状态对象中。
3)Spring事务的传播行为
什么时传播行为:一个业务方法中,调用另外一个业务方法,事务是怎么进行传播的
1. Spring中,提供了七种事务的传播行为:分为三大类
1.1 保证多个操作在同一事务中
a: PROPAGATION_REQUIRED:默认值,如果A中有事务,使用A中的事务,如果A中没有事务,创建一个新的事务,将操作包含进来
b: PROPAGATION_SUPPORTS :支持事务,如果A中有事务,使用A中的事务,如果A中没有事务,不使用事务
c: PROPAGATION_MANDATORY:如果A中有事务,使用A中的事务,如果A中没有事务,直接抛出异常
1.2保证多个操作不在同一个事务中
a:PROPAGATION_REQUIRES_NEW:如果A中有事务,将A事务挂起(暂停,即有事务也不使用),创建新事务,只包含自身操作,如果A中没有事务,创建一个新事务,包含自身操作
b:PROPAGATION_NOT_SUPPORTED:如果A中有事务,将A的事务挂起,不使用事务。
c:PROPAGATION_NEVER:如果A中有事务,报异常
1.3嵌套式事务:PROPAGATION_NESTED:嵌套事务,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点,执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初的位置,也可以回滚到保存点。
4)Spring事务管理
添加事务--银行转账
1.编程式事务:需要手写代码
2.声明式事务
2.1 XML方式声明事务管理
2.1.1引入AOP开发包:它是通过AOP增强来进行事务管理
2.1.2 配置事务管理器:
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druid"/>
</bean>
2.1.3AOP配置
<!--事务增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--把增强织入到对应的类的方法中-->
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.ual.demo2.AccountServiceImpl.transferMoney(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>
2.2注解方式声明事务管理
2.2.1配置事务管理器
2.2.2开启注解
2.2.3在要增强的切入点的类上写上注解
Spring基础4的更多相关文章
- Spring基础知识
Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...
- spring基础整理
spring基础教程:https://www.tutorialspoint.com/spring/spring_overview.htm 注入实例 <bean id="" c ...
- Spring 基础知识
Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...
- Spring基础配置
从毕业到现在我一直从事Android开发,但是对JavaEE一直念念不忘,毕业校招的时候,一个礼拜拿了三个offer,岗位分别是Android.JavaEE和JavaSE,后来觉得Android比较简 ...
- Spring基础系列--AOP织入逻辑跟踪
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9619910.html 其实在之前的源码解读里面,关于织入的部分并没有说清楚,那些前置.后 ...
- 第65节:Java后端的学习之Spring基础
Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...
- Spring基础系列-AOP源码分析
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9560803.html 一.概述 Spring的两大特性:IOC和AOP. AOP是面向切 ...
- Spring基础系列-Spring事务不生效的问题与循环依赖问题
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9476550.html 一.提出问题 不知道你是否遇到过这样的情况,在ssm框架中开发we ...
- Spring Boot实战(1) Spring基础
1. Spring基础配置 Spring框架本身有四大原则: 1) 使用POJO进行轻量级和最小侵入式开发 2) 通过依赖注入和基于接口编程实现松耦合 3) 通过AOP和默认习惯进行声明式编程 4) ...
- spring基础学习01
spring基础 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 IOC控制反转 把创建对象和维护对象之间的关系权利 ...
随机推荐
- TNS-12535/12606 and ORA-3136 on Connection to Database (Doc ID 2313573.1)
今天遇到一问题 telnet 都是通的,但是两台数据库服务器还是无法 sqlplus 连接 ,最后发现 两台服务器的 mtu 值不同,其中一台为 1500 一台为9000, 以前只是认为 telnet ...
- WinForm程序完全退出总结
this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: Application.Exit(); 强制所有消息中止,退出 ...
- FineUIPro/Mvc/Core/JS v4.2.0 发布了(老牌ASP.NET控件库,WebForms,ASP.NET MVC,Core,JavaScript)!
还记得 10 年前那个稍微青涩的 ExtAspNet 吗,如今她已脱胎换骨,变成了如下 4 款产品: FineUIPro:基于jQuery的经典款ASP.NET WebForms控件,之前的FineU ...
- 二十六、css3改变checkbox复选框的样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【Beta阶段】展示博客
Beta阶段展示博客 blog software buaa 1.团队成员简介 Email:qianlxc@126.com Free time:8:00 7:00 a.m ~ 11:00 12:00p. ...
- 转 vue实现双向数据绑定之原理及实现篇
转自:https://www.cnblogs.com/canfoo/p/6891868.html vue的双向绑定原理及实现 前言 先上个成果图来吸引各位: 代码: ...
- Flask--路由, 配置, 蓝图
一 . 双重装饰器重名的解决办法 # 我们都知道flask中的@app.route就是一层装饰器, 当我们需要在给视图函数加装饰器的时候就两层装饰器,这里介绍一下加装饰器的先后顺序,以及遇到的问题. ...
- Java 常用数据结构对象的实现原理 集合类 List Set Map 哪些线程安全 (美团面试题目)
Java中的集合包括三大类,它们是Set.List和Map, 它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类. List.Set都继承自Collection接口 ...
- File相关操作
文件操作 流关闭方法 public static void closeQuietly(Closeable closable) { if (null == closable) { return; } t ...
- 「洛谷1884」「USACO12FEB」过度种植【离散化扫描线】
题目链接 [洛谷传送门] 题解 矩阵面积的并模板.(请求洛谷加为模板题) 很明显是要离散化的. 我们将矩阵与\(x\)轴平行的两个线段取出来.并且将这两个端点的\(x1\)和\(x2\)进行离散化. ...