目录

spring-JDBC模板

Spring的JDBC的模板

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

JDBC模板使用的入门

引入jar包

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

创建数据库和表

  1. create table account(
  2. id int primary key auto_increment,
  3. name varchar(20),
  4. money double
  5. );

使用JDBC的模板

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

配置文件配置Bean

使用jdbcTemplate注解插入数据

使用开源连接池

DBCP

  • 引入jar包

  • 配置DBCP连接池

C3P0

  • 引入jar包

  • 配置

DRUID

  • 引入jar包

  • 配置

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

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

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

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

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

JDBC模板CRUD操作

插入操作

删除操作

更新操作

查询操作

查询某一个字段

查询返回对象的集合

事务

事务概述

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

Spring的事务管理的API

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

Spring的事务的传播行为

  1. 什么是传播行为
  2. 一个业务方法当中,调用另一个业务的方法
  3. Spring中提供了七种事务的传播行为
  4. 保证多个操作在同一个事务中
  5. PROPAGATION_REQUIRED
  6. 默认值,如果A中有事务,使用A中的事务,如果A没有,创建一个新的事务,将操作包含进来
  7. PROPAGATION_SUPPORTS
  8. 支持事务,如果A中有事务,使用A中的事务。如果A没有事务,不使用事务。
  9. PROPAGATION_MANDATORY
  10. 如果A中有事务,使用A中的事务。如果A没有事务,抛出异常。
  11. 保证多个操作不在同一个事务中
  12. PROPAGATION_REQUIRES_NEW
  13. 如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含自身操作。如果A中没有事务,创建一个新事务,包含自身操作。
  14. PROPAGATION_NOT_SUPPORTED
  15. 如果A中有事务,将A的事务挂起。不使用事务管理。
  16. PROPAGATION_NEVER
  17. 如果A中有事务,报异常。
  18. 嵌套式事务
  19. PROPAGATION_NESTED
  20. 嵌套事务,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点
  21. 执行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.添加事务

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

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

编写事务管理的代码

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

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

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

  • 开启注解事务

  • 在业务层添加注解

三大框架 之 spring-JDBC的更多相关文章

  1. Eclipse/JavaWeb (三)三大框架之Spring框架 持续更新中...

    (一)发展历史 现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的struts需要调用一个业务类,就需要new一个业务类出来,然后使用:业务层需要调用持久层的类,也需要new一个持久层类出 ...

  2. 三大框架 之 Spring(IOC控制反转、DI依赖注入)

    目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...

  3. 利用MyEclipse配置S2SH三大框架篇-Spring配置

    1.配置完Struts2后,然后配置Spring 2.单击“MyEclipse->Project Capabilities->Add Spring Capabilities” 3.选择Sp ...

  4. SpringMVC详解(四)------SSM三大框架整合之登录功能实现

    为了后面讲解的需要,我们取数据都会从数据库中获取,所以这里先讲讲三大框架(Spring.SpringMVC.MyBatis)的整合.前面讲解 MyBatis 时,写了一篇 MyBatis 和 Spri ...

  5. java的老说三大框架

    一直不明白java的老说三大框架,怎么就一个SSH,今天终于有了一点点的了解. 三大框架就是Spring框架,Struts框架,Hibernate框架. Spring提供了管理业务对象的一致方法并且鼓 ...

  6. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  7. java 的 struts2 Spring Hibernate 三大框架的整合

    原理就不说了,直接上配置文件及代码,用来备用 首先,将三大框架所需要的jar包导入项目中 导入  struts2-spring-plugin-2.3.3.jar包  此包的作用是作为struts2 与 ...

  8. Struts,spring,hibernate三大框架的面试

    Struts,spring,hibernate三大框架的面试 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3 ...

  9. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)(转)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  10. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

随机推荐

  1. LINQ to Entities 不识别方法“System.String ToString(System.String)”,因此该方法无法转换为存储表达式。

    来源:https://www.cnblogs.com/hao-1234-1234/p/9112434.html 6  Select的时候,时间无法转换成 年月日  YYMMMdd 报错:LINQ to ...

  2. html()方法与append()方法

    注意加#!!!!!! $("#valuess").html("<input type='text' name='name' value= " + valu ...

  3. Linux环境下安装RabbitMQ

    首先RabbitMQ是使用erLang编写的开源消息中间件.所以需要先安装erlang环境. 我使用的是CentOS的系统安装erlang21.0的步骤如下: #下载安装包 (下面是我用的比较匹配的版 ...

  4. django rest framework的viewset中关于ModelViewset的定义

    ---恢复内容开始--- viewset的关于ModelViewSet的定义是: class ModelViewSet(mixins.CreateModelMixin, mixins.Retrieve ...

  5. GCC使用总结

    概念 GCC一开始是linux系统集成的用来编译C程序的编译器(GNU C Compiler),目前GCC已经不仅仅支持C语言了,因而其缩写名单意义也变成(GNU Compiler Collectio ...

  6. Linux中快速对字符串进行加密

    1)进行base64的加密和解密 [root@VM_0_10_centos opt]# echo hello |base64aGVsbG8K[root@VM_0_10_centos opt]# ech ...

  7. CentOS 7 修改时区例如上海时区

    Linux 系统(我特指发行版, 没说内核) 下大部分软件的风格就是不会仔细去考虑向后 的兼容性, 比如你上个版本能用这种程序配置, 没准到了下一个版本, 该程序已经不见了. 比如 sysvinit ...

  8. python网络-静态Web服务器案例(29)

    一.静态Web服务器案例代码static_web_server.py # coding:utf-8 # 导入socket模块 import socket # 导入正则表达式模块 import re # ...

  9. 32位JVM和64位JVM的最大堆内存分别是多数?32位和64位的JVM,int类型变量的长度是多数?

    理论上说上 32 位的 JVM 堆内存可以到达 2^32,即 4GB,但实际上会比这个小很多.不同操作系统之间不同,如 Windows 系统大约 1.5 GB,Solaris 大约 3GB.64 位 ...

  10. WPF + SelfHost 实现窗体自宿主(API,API和窗体通信)

    前言 今天研究了在 WPF 中使用 SelfHost 自宿主. 具体的功能是,在 WPF 中使用自宿主服务,外部调用服务的 API,在 API 里面操作窗体的显示等. 技术点 在 WPF 中集成 Se ...