前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【框架】125:spring框架最后一天

【框架】125:spring框架最后一天

作者头像
刘小爱
发布2020-08-20 10:50:55
5710
发布2020-08-20 10:50:55
举报
文章被收录于专栏:零基础自学Java零基础自学Java

今天是刘小爱自学Java的第125天。

感谢你的观看,谢谢你。

今天学习内容安排如下:

  • JdbcTemplate在spring中的配置和使用。
  • Spring的事务管理机制。
  • 写了一个转账案例,并用xml配置事务。

一、Spring的JdbcTemplate配置

1最原始的测试

即不使用spring框架时代码编写:

①配置数据源

无外乎就是数据库四大参数的设置。

我们以前都是使用C3p0或者德鲁伊,这里使用的是内置的数据源。

②创建jdbcTemplate对象

使用数据库初始化jdbcTemplate对象,再通过它实现对数据库的增删改查。

当然上述都是最原始的测试方法,我们现在学了spring框架,看到new这个关键字,就要想到spring的使用。

2spring配置信息

①数据源的配置

也就是将DriverManagerDataSource交由spring容器管理,同时设置四大参数属性。

②jdbcTemplate的配置

一样的道理,以前需要new一个对象,现在都可以在spring中配置成一个bean。

其中该对象需要一个数据源作为参数,所以需要使用到DI依赖注入。

3spring的Junit测试

测试代码会自动开启注解扫描,所以就算我们没有在spring配置文件中配置也可以使用注解,这个我们昨天就说明过。

其测试代码注解都是固定的格式。

  • @RunWith:使用junit整合spring。
  • @ContextConfiguration:指定容器位置。
  • @Autowired注解:注入需要测试的对象。

运行代码也能查询到数据库中的数据。

3使用德鲁伊数据源

我们可以将数据库四大参数设置到properties配置文件中,再引入外部文件即可。

①引入外部文件

  • property-placeholder:翻译就是属性占位符的意思,通过其引入外部文件。
  • location:说明外部文件路径。

②配置德鲁伊连接池

以${}的格式引入配置文件中的属性。

③配置jdbcTemplate对象

将德鲁伊连接池注入jdbcTemplate对象。

二、Spring的JdbcTemplate使用

使用spring配置后,在dao层中测试使用。

1dao层代码编写及配置

①xml配置

将jdbcTemplate对象注入userDao,如果用注解的话这里用@Autowired也是可以的。

xml和注解都使用下,加深对它们的理解。

②根据id查询用户

无外乎就是增删改查,这里使用根据id查询作为例子说明,查询结果是一个user对象。

2测试方法

测试方法中直接使用userDao对象调用方法即可,这里使用注解@Autowired完成注入。

运行代码能够得到对应id的user数据。

3dao层代码优化

为了方便Dao中注入JdbcTemplate,Spring为每一个持久化技术都提供了支持类。

①JdbcDaoSupport类

继承Spring框架封装的JdbcDaoSupport类获得jdbctemplate对象操作数据库。

通过getJdbcTemplate方法可以获取对象。

②注入数据源

在xml文件中给userDao对象注入数据源后即可获取jdbctemplate对象了。

为什么会这样呢?

我们看下JdbcDaoSupport的源码:

它有一个setDataSource方法,那么通过注入数据源,即可获取一个jdbcTemplate对象。

三、Spring的事务管理机制

Spring事务管理高层抽象主要包括3个接口,Spring的事务主要是由他们共同完成的:

1PlatformTransactionManager

事务管理器,主要用于平台相关事务的管理,不要看其名字很长,其实很好记:

  • Platform:平台的意思。
  • Transaction:事务的意思。
  • Manager:管理器的意思。

Spring为不同的持久化框架提供了不同的事务管理器接口实现。

DataSourceTransactionManager是我们使用的事务管理器,使用Connection控制 :

  • 开启事务:connection.setAutoCommit(false)
  • 提交事务:connection.commit()
  • 回滚事务:connection.rollback()

2TransactionDefinition

事务定义信息,用来定义事务相关的属性的,给事务管理器用。

该接口主要提供的方法:

  • getIsolationLevel:隔离级别获取。
  • getPropagationBehavior:传播行为获取。
  • getTimeout:获取超时时间。
  • isReadOnly:是否只读。

关于隔离级别一共有四种:读未提交、读已提交、可重复读和串行化

在学事务时的笔记中详细说明过,不再赘述。

关于传播行为获取,主要有三大类:

  • REQUIRED:只有一个事务(默认,推荐)
  • REQUIRES_NEW:存在两个事务,如果事务存在,挂起事务,重新开启一个新事务。
  • NESTED:嵌套事务,事务可以设置保存点,回滚到保存点,选择提交或者回滚。

3TransactionStatus

事务具体运行状态,事务管理过程中,每个时间点事务的状态信息。

四、xml配置事务管理

上述都是概念性的知识点,比较难记,还是直接用一个转账案例说明:

1service层代码编写

既然是转账,那么要明确三个参数:出钱方是谁?收钱方是谁?钱是多少?

①先将钱转出

即从出钱方将对应的钱转出来。

②再将钱转入

即将转出的钱转入给收钱方。

2dao层代码编写

继承jdbcDaoSupport这个类,通过父类获取jdbcTemplat对象,这个前面刚说过

③钱转入

即将收钱人对应账户上的金钱增加,增加的钱数为转账的钱数。

④钱转出

即将收钱人对应账户上的金钱减少,减少的数量为转账的钱数。

3xml配置事务

我们将上述两层的对象交给spring容器,但是这样的代码是有问题的:转入和转出要么同时成功要么同时失败,需要使用事务管理。

①配置事务管理器

选择对应框架的事务管理器即可,并将其交由spring容器管理,同时注入数据源。

②配置事务管理

通过tx:advice标签配置事务通知,通过属性transaction-manager说明事务管理器。

其子标签tx:method,对应了上述TransactionDefinition接口中的四大方法:

  • read-only:对应isReadOnly()。
  • timeout:对应getTimeout()。
  • propagation:对应getPropagationBehavior()。
  • isolation:对应getIsolationLevel()。

③aop的配置

配置切入点,*Service表示以service为结尾的id或name都被拦截。

配置切面,将对应的切入点增加配置的事务通知,即给切入点增加了一个事务功能。

4测试

在转入业务中设置一个运行异常作为测试。

如果没有配置事务的话:

  • 转出业务成功,对应账户钱减少了。
  • 转入业务失败,对应账户钱并没有增加。

如果配置事务了的话,只要一方失败了,全部都算失败,数据并不发生变化。

最后

关于注解,会使用xml了注解就很简单了,以后有类似需求时使用注解说明,就不专门写一篇文章了,明天开始学springMVC框架了。

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘小爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Spring的JdbcTemplate配置
  • 二、Spring的JdbcTemplate使用
  • 三、Spring的事务管理机制
  • 四、xml配置事务管理
  • 最后
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档