zoukankan      html  css  js  c++  java
  • 三大框架 之 spring-JDBC

    spring-JDBC模板

    Spring的JDBC的模板

    Spring是EE开发的一站式的框架,有EE开发的每层的解决方案。
    	Spring对持久层也提供了解决方案:ORM模块和JDBC的模板。
    	Spring提供了很多的模板用于简化开发
    		JDBC
    			org.springframework.jdbc.core.jdbc.jdbcTemplate
    		Hibernate
    		orm.springframework.orm.hibernamte.HibernateTemplate
    

    JDBC模板使用的入门

    引入jar包

    • spring开发基本jar包
    • 数据库驱动
    • Spring的JDBC模板的jar包

    创建数据库和表

    create table account(
        id int primary key auto_increment,
        name varchar(20),
        money double
    );
    

    使用JDBC的模板

    将连接池和模板交给Spring管理

    配置文件配置Bean

    使用jdbcTemplate注解插入数据

    使用开源连接池

    DBCP

    • 引入jar包

    • 配置DBCP连接池

    C3P0

    • 引入jar包

    • 配置

    DRUID

    • 引入jar包

    • 配置

    使用属性文件配置数据库连接信息

    ​ 1.创建属性文件jdbc.properties

    2.配置文件中引入属性文件

    • 方式(property中的${}中的key与属性配置文件中的key相同)

    • 方式(property中的name与${}中的key不能相同)

    JDBC模板CRUD操作

    插入操作

    删除操作

    更新操作

    查询操作

    查询某一个字段

    查询返回对象的集合

    事务

    事务概述

    什么事务
    	逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败。
    事务的特性
    	原子性:事务不可分割
    	一致性:事务执行前后数据完整性保持一致
    	隔离性:一个事务的执行不应该受到其他事务的干扰
    	持久性:一旦事务结束,数据就持久化到数据库
    如果不考虑隔离性引发安全性问题
    	读问题
    		脏读:一个事务读到另一个事务未提交的数据
    		不可重复读:一个事务读到另一个事务已经提交的update的数据,导致一个事务中多次查询结果不一致
    		虚读、幻读:一个事务读到另一个事务已经提交的insert的数据,导致一个事务中多次查询结果不一致。
    	写问题
    		丢失更新
    解决读问题
    	设置事务的隔离级别
    		Read uncommitted:未提交读,任何读问题解决不了。
    		Read committed:已提交读,解决脏读,但是不可重复读和虚读有可能发生。
    		Repeatable read:重复读,解决脏读和不可重复读,但是虚读有可能发生。
    		Serializable:解决所有读问题。
    

    Spring的事务管理的API

    PlatformTransactionManager
    	PlatformTransactionManage
    		平台事务管理器 是一个接口,下面有两个实现类
    	DataSourceTransactionManager
    		底层使用JDBC管理事务
    	HibernateTransactionManager
    		底层使用Hibernate管理事务
    TransactionDefinition
    	事务定义信息:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读
    TransactionStatus
    	事务状态:用于记录在事务管理过程中,事务的状态的对象。
    事务管理的API的关系
    	Spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,
    	在事务管理过程中,产生各种状态,将这些状态的信息记录到事务状态的对象中。
    

    Spring的事务的传播行为

    什么是传播行为
    	一个业务方法当中,调用另一个业务的方法
    Spring中提供了七种事务的传播行为
    	保证多个操作在同一个事务中
    		PROPAGATION_REQUIRED
    			默认值,如果A中有事务,使用A中的事务,如果A没有,创建一个新的事务,将操作包含进来
    		PROPAGATION_SUPPORTS
    			支持事务,如果A中有事务,使用A中的事务。如果A没有事务,不使用事务。
    		PROPAGATION_MANDATORY
    			如果A中有事务,使用A中的事务。如果A没有事务,抛出异常。
    	保证多个操作不在同一个事务中
    		PROPAGATION_REQUIRES_NEW
    			如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含自身操作。如果A中没有事务,创建一个新事务,包含自身操作。
    		PROPAGATION_NOT_SUPPORTED	
    			如果A中有事务,将A的事务挂起。不使用事务管理。
    		PROPAGATION_NEVER	
    			如果A中有事务,报异常。
    	嵌套式事务
    		PROPAGATION_NESTED
    			嵌套事务,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点
    			执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置,也可以回滚到保存点
    

    Spring事务管理

    1.搭建Spring事务管理环境

    1.创建AoccuntDao

    2.实现Dao接口

    3.把Dao交给Spring管理

    5.在Dao中注入数据源
    在DAO当中注入jdbc模板,要保证dao继承了JdbcDaoSupport

    ​ 继承之后, 就有了datasource的set方法,就可以注入了
    Dao继承JdbcDaoSupport

    DAO注入JDBC模板

    6.创建Account业务

    7.配置service 交给spring 并注入dao

    8.测试

    2.添加事务

    编程式事务
    配置平台事务管理器

    <!--配置事务管理器-->
    <bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"/>
    </bean>
    
    Spring提供了事务管理的模板类
    <!--配置事务管理模板-->
    <bean id="transactionTemplate"
    class="org.springframework.transaction.support.TransactionTemplate">
    	<property name="transactionManager" ref="transactionManager"/>
    </bean>
    
    在业务层注入事务管理的模板

    编写事务管理的代码

    声明式事务
    XML方式声明事务管理
    • 引入aop的开发包
    • 配置事务管理器

    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"/>
    </bean>
    
    • AOP的配置
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    	<tx:attributes>
    		<tx:method name="*" propagation="REQUIRED"/>
    	</tx:attributes>
    </tx:advice>
    
    • 配置

    注解方式声明事务管理
    • 配置事务管理器

    • 开启注解事务

    • 在业务层添加注解

  • 相关阅读:
    面向对象和面向过程的区别
    k-means算法
    win10系统下安装mysql
    python并发编程之多进程
    操作系统的概念
    前端基础之html
    聚类分析
    决策树
    Mysql
    SQL练习题
  • 原文地址:https://www.cnblogs.com/mumuyinxin/p/10738902.html
Copyright © 2011-2022 走看看