一、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的更多相关文章

  1. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  2. spring基础整理

    spring基础教程:https://www.tutorialspoint.com/spring/spring_overview.htm 注入实例 <bean id="" c ...

  3. Spring 基础知识

    Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...

  4. Spring基础配置

    从毕业到现在我一直从事Android开发,但是对JavaEE一直念念不忘,毕业校招的时候,一个礼拜拿了三个offer,岗位分别是Android.JavaEE和JavaSE,后来觉得Android比较简 ...

  5. Spring基础系列--AOP织入逻辑跟踪

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9619910.html 其实在之前的源码解读里面,关于织入的部分并没有说清楚,那些前置.后 ...

  6. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

  7. Spring基础系列-AOP源码分析

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9560803.html 一.概述 Spring的两大特性:IOC和AOP. AOP是面向切 ...

  8. Spring基础系列-Spring事务不生效的问题与循环依赖问题

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9476550.html 一.提出问题 不知道你是否遇到过这样的情况,在ssm框架中开发we ...

  9. Spring Boot实战(1) Spring基础

    1. Spring基础配置 Spring框架本身有四大原则: 1) 使用POJO进行轻量级和最小侵入式开发 2) 通过依赖注入和基于接口编程实现松耦合 3) 通过AOP和默认习惯进行声明式编程 4) ...

  10. spring基础学习01

    spring基础 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 IOC控制反转 把创建对象和维护对象之间的关系权利 ...

随机推荐

  1. Linux实战教学笔记50:Zabbix监控平台3.2.4(二)深入理解zabbix

    https://www.cnblogs.com/chensiqiqi/p/9162986.html 一,Zabbix Web操作深入 1.1 Zabbix Web下的主机和模版以及监控项的添加方式 ( ...

  2. JS 灵活使用 console 调试

    前言: Web 开发中最常用的调试就是 console.log(),console 除了 本身 log() 方法外,还有其他很多方法. console.log() console.log() 有许多意 ...

  3. idea免费破解

    1.下载破解补丁. https://pan.baidu.com/s/1pWCr_HIHURSAbGvvo70wKA   密码:pxkv 2.下载idea网址: https://www.jetbrain ...

  4. OpenStack-Neutron(5)

    一. Neutron 概述 SDN(software-defined networking)软件定义网络,其所具有的灵活性和自动化优势使其成为云时代网络管理的主流. Neutron的设计目标是实现“网 ...

  5. 让多个HTML页面 使用 同一段HTML代码

    需求背景 一个网站有多个网页:一个网页,可以分为很多部分,举个例子,下面是一个特别简单的网页结构:    一般情况下,footer都是用于标识网站的相关信息(备案.联系方式.制作方),每一个页面都是相 ...

  6. python基础概念(转)

    基础回顾: 1.集合 集合有2个重要作用:关系测试(并集,差集,交集)和去重. 2.文件编码 2.7上默认文件编码是ASCII码,因为不支持中文,就出了GB2312,在2.7上要支持中文就必须申明文件 ...

  7. css 通配符选择器

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. python 基础篇练习题

    一.练习题 # 1.统计元组中所有数据属于字符串的个数,提示:isinstance() # 数据:t1 = (1, 2, '3', '4', 5, '6') # 结果:3 # 2.将以下数据存储为字典 ...

  9. RCNN算法的tensorflow实现

    RCNN算法的tensorflow实现 转载自:https://blog.csdn.net/MyJournal/article/details/77841348?locationNum=9&f ...

  10. Cut 'em all! CodeForces - 982C(贪心dfs)

    K - Cut 'em all! CodeForces - 982C 给一棵树 求最多能切几条边使剩下的子树都有偶数个节点 如果n是奇数 那么奇数=偶数+奇数 不管怎么切 都会有奇数 直接打印-1 贪 ...