码迷,mamicode.com
首页 > 编程语言 > 详细

Spring基础4

时间:2019-04-09 18:43:59      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:exec   ring   bsp   逻辑   cti   exe   nes   驱动   关系   

 

一、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

标签:exec   ring   bsp   逻辑   cti   exe   nes   驱动   关系   

原文地址:https://www.cnblogs.com/UalBlog/p/10678453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!