Spring(三)——Java代码配置 AOP、JdbcTemplate 简单配置(java代码和xml配置)、加载properties 配置文件、事物隔离级别、Spring 事务(编程式、声明式)

5 篇文章 0 订阅
2 篇文章 0 订阅

Spring(三)——Java代码配置 AOP、JdbcTemplate 简单配置(java代码和xml配置)、加载properties 配置文件、事物隔离级别、Spring 事务(编程式、声明式)

一、Java 代码配置 AOP

1、依赖导入

先导入需要的依赖:
在这里插入图片描述

2、代码实现

首先还是接口:
在这里插入图片描述

然后是实现类:
在这里插入图片描述

接着就是切面代码:
在这里插入图片描述
在这里插入图片描述

然后是测试代码:
在这里插入图片描述

运行结果就不贴图了。

3、优化切点定义

可以看到那五个通知定义切点那里,每一个都要写路径,很麻烦,而 xml 配置那里可以有 ref 引用。Java 代码配置当然也有类似的引用方式:
在这里插入图片描述

然后后面的通知都引用这个路径:
在这里插入图片描述

运行结果没毛病。

后面一些框架中的特点都是通过 AOP 来实现的,后面遇到的时候再提。

二、JdbcTemplate 简单配置(Java代码)

这个玩意可以简略载入数据库的操作,只需要最核心的部分,比如 url、账号和密码。

1、依赖导入

在这里插入图片描述
提个醒:mysql 高驱动版本可以兼容低驱动版本。

2、简单的增加操作

这里举例简单的增加操作,删除跟修改差不多:

首先是 JavaConfig 配置:
在这里插入图片描述
然后 UserDao 的代码:
在这里插入图片描述
然后是测试的代码:
在这里插入图片描述
结果:
在这里插入图片描述

成功运行。

3、查询(最原始的写法)

这里最原始的写法跟 jsp 那里差不多,也是把 ResultSet 给了我们,然后自己取需要的数值:
在这里插入图片描述

然后测试代码:
在这里插入图片描述
然后运行结果:
在这里插入图片描述

4、单个查询(BeanPropertyRowMapper方法)

然后就是里面封装好的方法
在这里插入图片描述

测试代码:
在这里插入图片描述
然后结果:

暂略
用这个方法时要注意实体类的有参构造跟无参构造都要弄出来。

5、多个查询(BeanPropertyRowMapper)

查询一堆数据,用 List 装着:
在这里插入图片描述
测试代码:
在这里插入图片描述
结果:
在这里插入图片描述

三、JdbcTemplate 简单配置(xml 配置)

首先先给 jdbcTemplate 弄个 set 方法:
在这里插入图片描述
然后是 xml 配置:
在这里插入图片描述

接着测试代码和结果:
在这里插入图片描述

四、加载 properties 配置文件(Spring 的属性注入)

1、xml 配置文件加载

以前学习 java 时经常有用到配置文件,到了 Spring 这依然有方法使用这配置文件。

先来看配置文件:
在这里插入图片描述
然后是 xml 配置文件:
在这里插入图片描述
其他的跟上面的一样,运行结果能够成功。

2、Java 代码加载

同样的,也有需求是通过 Java 代码去加载这个配置文件。

这样的话要改动 JavaConfig 里面的代码:
在这里插入图片描述

接着再次运行,还是可以成功!

这样一来,只要改动配置文件的信息就可以改动加载的信息。

值得注意的是,这两个方法不一定要完全隔离开来使用,可以交叉使用,比如 java 代码用一部分,另外一部分交给 xml 配置文件去完成也是可以的。

五、事物隔离级别

1、事务隔离级别介绍

在这里插入图片描述

2、脏读、不可重复度和幻读的介绍

先介绍一下这三个是什么玩意。

一般来说,手动开启事务以后,中间干了再多的操作,最后没有提交数据,数据是不会发生改变的。

a、脏读

一个事务读到另外一个事务还没有提交的数据,称之为脏读。

再详细解释下:A事务干了很多操作,但是还没有提交,这个时候B事务读到了这个A事务发生变化的数据,这个就称为脏读。

b、不可重复读

不可重复读是指一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

这个通过下面例子来解释:
在这里插入图片描述
这个重点在于,B窗口是开启了事务以后再查询,且查询了两次,第一次查询的时候A窗口没有操作;第二次查询的时候A窗口已经执行完转账操作;但是B窗口在没有提交以前,两次查询的数据不一致。期望的效果是:B窗口提交以前,两次的查询结果应该是一致的才对。这个案例出现的问题就称为不可重复读。

c、幻读(另外一个说法是虚读)

幻读和不可重复读非常像,看名字就是产生幻觉了。
看例子:
在这里插入图片描述

说白了就是因为脏读才看到的数据,但是没法进行某些操作。这个问题就是幻读。

3、不同隔离级别对应的不同的问题

不同的隔离级别能够解决的问题也不同:
在这里插入图片描述
mysql 默认级别是安全等级第二级别的 REPEATABLE READ。

性能关系如图:
在这里插入图片描述
最高级别固然最安全,但是性能也最低,效率最慢,里面的事务是一个一个排着队来解决的。

4、后语

要注意的是:隔离级别低的访问其他隔离级别高的才会出现问题,如果是隔离级别高的访问隔离级别低的不会出现问题。

六、Spring 事务

1、什么是事务

在这里插入图片描述

注意:mysql 自己的数据库引擎是 myisam ,innodb 是相当于第三方的引擎。

2、事务的特性(ACID)

在这里插入图片描述

Spring 支持两种方式的事务管理:编程式事务管理和声明式事务管理。用的多的是声明式事务管理

3、编程式事务管理

编程式事务管理有两种方法:一种是 TransactionTemplete 实现,另外一种是 TransactionManager 。

这里举的例子还是经典转账案例:
准备工作:
依赖导入:
在这里插入图片描述
配置文件:
在这里插入图片描述
xml配置文件:
在这里插入图片描述

数据库数据:
在这里插入图片描述

dao层:
在这里插入图片描述
service层:
在这里插入图片描述

a、TransactionTemplete

然后先是 xml 配置:
在这里插入图片描述

接着 service 层:
在这里插入图片描述

然后运行结果有异常能正常回滚,无异常能正常交易!

b、Transaction Manager

只需要改动部分代码即可:

service 层:
在这里插入图片描述

然后注册:
在这里插入图片描述

然后写事务代码:
在这里插入图片描述

然后运行,都没有问题。

c、小结

编程式事务有个很明显的缺点就是动了原业务的代码,需要把代码放到事务代码里面去才能执行(侵入式)。

4、声明式事务(用的多)

a、xml 配置声明式事务

首先,先导入依赖:
在这里插入图片描述

然后就是 dao 层:
在这里插入图片描述

一个加钱的一个减钱的。

然后是 service 层:
在这里插入图片描述

然后数据库配置文件:
在这里插入图片描述

接着就是 xml 配置文件的配置了(注意看注释):
在这里插入图片描述

xml 配置声明式事务三大步骤:
            1.配置数据源 DataSource
            2.配置事务管理器
            3.配置事务拦截规则
            4.配置 AOP

在这里插入图片描述

最后就是测试代码:
在这里插入图片描述

最终结果没有问题。

b、Java 代码和 xml 文件混合配置声明式事务

先说结论:Java代码配置的事务主要是注解,但注解其实也算是一种代码侵入了。

代码基本不用怎么改,不过这里还是截图下:

dao 层代码和测试代码不变。

xml 文件配置:
在这里插入图片描述

最后就是 service 层代码:
在这里插入图片描述

最终运行没有问题。

c、纯 Java 代码配置声明式事务

dao 层和 service 层代码不变。

既然是 Java 代码配置就少不了 Javaconfig 这个文件了。这个 Java 代码配置跟 xml 文件配置是一一对应的:
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值