博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring---JDBC模板和事务
阅读量:4672 次
发布时间:2019-06-09

本文共 2276 字,大约阅读时间需要 7 分钟。

1.入门

  1. 导入相应jar包
  2.  新建类,创建连接池,创建Jdbc模板
  3.  连接池和JDBC模板的创建可以交给Spring管理,使代码更加简洁

2.其他连接池的配置

  1. dbcp连接池,需要引两个包,配置的属性名和Spring的内置链接池的属性名一样|
  2.  c3p0连接池,需要引一个包,配置的属性名和前两个都不同

3.在Spring的配置文件中引入属性文件

  1. 在src下新建一个filename.properties,文件中的内容为key=value形式
  2. 在配置文件中引入
    方式一:通过bean管理org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类引入
    方式二:通过<context:property-placeholder location=""/>标签引入
  3. 引入的属性的使用

4.使用JDBC完成CRUD(增删改查)

  1. 增加数据
  2. 删除数据
  3. 修改数据
  4. 查询数据
    查询单个数据
    查询一条或多条数据封装到对象或对象列表中

5.事务

     什么是事务

         事务:逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败。

     事务的特性

         原子性:事务为最小单位,不可再分割。

         一致性:事务执行前后数据完整性保持一致。
         隔离性:一个事务的执行不应该受到其他事务的干扰。
         持久性:一旦事务结束,数据就持久化到数据库。

     如果不考虑隔离性引发安全性问题

         读问题:脏读-----一个事务读到另一个事务未提交的数据。

                       不可重复读-----一个事务读到另一个事务已经提交的update数据,导致一个事务中多次查询结果不一致。
                       虚读,幻读-----一个事务读到另一个事务已经提交的insert数据,导致一个事务中多次查询结果不一致。
         写问题:丢失更新。

     解决读问题

         设置事务的隔离级别:

               Read uncommitted:未提交读,任何读问题都解决不了。
               Read committed:已提交读,可以解决脏读,不可重复读、虚读和幻读有可能发生。
               Repeatable read:重复读,解决脏读和不可重复读。
               Serializable:解决所有读问题。

6.Spring的事务管理

     1.Spring事务管理的API

         PlatformTransactionManager:平台事务管理器

               平台事务管理器:接口,是Spring用于管理事务的真正的对象。
               实现类:DataSourceTransactionManager    :底层使用JDBC管理事务
                              HibernateTransactionManager    :底层使用Hibernate管理事务
         TransactionDefinition    :事务定义信息
               事务定义:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读
         TransactionStatus:事务的状态
               事务状态:用于记录在事务管理过程中,事务的状态的对象。

     2.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中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置,也可以回滚到保存点。

7.Spring的事务管理实现

  Spring事务管理环境搭建

  1. 新建service,dao的接口和实现类
  2. 把他们交给Spring管理并注入相应的属性,这的dao继承了JdbcDaoSupport,给他注入一个连接池就可以获得JDBCTemplate

  方式一:编程式事务

 

  1. 配置平台事务管理器(这是任何事务管理方式都必须配置的),这里底层使用JDBC管理事务,所以使用DataSourceTransactionManager实现类 
  2. 配置事务管理的模板,并将其注入到Service中
  3. 编写代码实现事务管理
  4. 测试

  方式二:xml方式声明式事务管理(使用AOP切面)

  1. 配置平台事务管理器
  2. 配置事务的增强,这里tx:method中的name是Service中的方法名
  3. 配置aop切面
  4. 这样配置给UserService中所有方法都设置了切点,当方法执行的时候会为方法配置一个增强,具体是什么样的增强取决于你事务管理规则中的配置。

  方式三:注解方式声明式事务管理

    1. 配置平台事务管理器
    2. 开启事务注解
    3. 在需要用到事务的Service上加@Transactional注解,事务的隔离级别和传播方式可以在注解中设置

转载于:https://www.cnblogs.com/zy-Luo/p/11033228.html

你可能感兴趣的文章
黑客dos命令大全
查看>>
https soap链接示例
查看>>
八LWIP学习笔记之用户编程接口(NETCONN)
查看>>
Git Day02,工作区,暂存区,回退,删除文件
查看>>
Windows Phone 7 Coding4Fun控件简介
查看>>
Nginx 常用命令总结
查看>>
hall wrong behavior
查看>>
Markdown test
查看>>
Collection集合
查看>>
int最大值+1为什么是-2147483648最小值-1为什么是2147483647
查看>>
【C++】const在不同位置修饰指针变量
查看>>
github新项目挂历模式
查看>>
编写jquery插件
查看>>
敏捷开发笔记
查看>>
神秘海域:顶级工作室“顽皮狗”成长史(下)
查看>>
C++指针、引用知多少?
查看>>
services 系统服务的启动、停止、卸载
查看>>
Fiddler 网页采集抓包利器__手机app抓包
查看>>
Number and String
查看>>
java中的值传递和引用传递2<原文:http://blog.csdn.net/niuniu20008/article/details/2953785>...
查看>>