美文网首页程序员我的程序员自学之路
【框架】125:spring框架最后一天

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

作者: 刘小爱 | 来源:发表于2020-08-31 19:13 被阅读0次

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

    感谢你的观看,谢谢你。

    image

    今天学习内容安排如下:

    • JdbcTemplate在spring中的配置和使用。

    • Spring的事务管理机制。

    • 写了一个转账案例,并用xml配置事务。

    一、Spring的JdbcTemplate配置

    1最原始的测试

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

    image

    ①配置数据源

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

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

    ②创建jdbcTemplate对象

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

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

    2spring配置信息

    image

    ①数据源的配置

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

    ②jdbcTemplate的配置

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

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

    3spring的Junit测试

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

    image

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

    • @RunWith:使用junit整合spring。

    • @ContextConfiguration:指定spring的位置。

    • @Autowired注解:注入需要测试的对象。

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

    3使用德鲁伊数据源

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

    image

    ①引入外部文件

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

    • location:说明外部文件路径。

    ②配置德鲁伊连接池

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

    ③配置jdbcTemplate对象

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

    二、Spring的JdbcTemplate使用

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

    1dao层代码编写及配置

    image

    ①xml配置

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

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

    ②根据id查询用户

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

    2测试方法

    image

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

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

    3dao层代码优化

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

    image

    ①JdbcDaoSupport类

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

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

    ②注入数据源

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

    为什么会这样呢?

    我们看下JdbcDaoSupport的源码:

    image

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

    三、Spring的事务管理机制

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

    1PlatformTransactionManager

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

    • Platform:平台的意思。

    • Transaction:事务的意思。

    • Manager:管理器的意思。

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

    image

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

    • 开启事务:connection.setAutoCommit(false)

    • 提交事务:connection.commit()

    • 回滚事务:connection.rollback()

    2TransactionDefinition

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

    该接口主要提供的方法:

    • getIsolationLevel:隔离级别获取。

    • getPropagationBehavior:传播行为获取。

    • getTimeout:获取超时时间。

    • isReadOnly:是否只读。

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

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

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

    • REQUIRED:只有一个事务(默认,推荐)

    • REQUIRES_NEW:存在两个事务,如果事务存在,挂起事务,重新开启一个新事务。

    • NESTED:嵌套事务,事务可以设置保存点,回滚到保存点,选择提交或者回滚。

    3TransactionStatus

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

    四、xml配置事务管理

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

    1service层代码编写

    image

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

    ①先将钱转出

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

    ②再将钱转入

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

    2dao层代码编写

    image

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

    ③钱转入

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

    ④钱转出

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

    3xml配置事务

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

    image

    ①配置事务管理器

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

    ②配置事务管理

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

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

    • read-only:对应isReadOnly()。

    • timeout:对应getTimeout()。

    • propagation:对应getPropagationBehavior()。

    • isolation:对应getIsolationLevel()。

    ③aop的配置

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

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

    4测试

    image

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

    如果没有配置事务的话:

    • 转出业务成功,对应账户钱减少了。

    • 转入业务失败,对应账户钱并没有增加。

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

    最后

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

    谢谢你的观看。

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

    相关文章

      网友评论

        本文标题:【框架】125:spring框架最后一天

        本文链接:https://www.haomeiwen.com/subject/dqjpsktx.html