zoukankan      html  css  js  c++  java
  • 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在要增强的切入点的类上写上注解

        

  • 相关阅读:
    剩余类&完全剩余组
    同余验算法
    一种快速余数求法
    同余的性质II
    同余初步
    求N个数的最小公倍数
    N个数GCD求解法
    快速求解GCD的三个Trick
    质数的几个有趣问题
    等比数列求和公式
  • 原文地址:https://www.cnblogs.com/UalBlog/p/10678453.html
Copyright © 2011-2022 走看看