00:00
好,接下来呢,我们就来看一下声明是事物,也就是spring,用注解简化我们数据库事物的开发,我来写一个配置文件,我们写一个新的这个包,我们在这里边来测试事物TX,好,那我把这个事物的配置类,我也就写这算了,好t con,好,然后呢,我们在这里边来说一下生命是事物,那么这个生命是事物呢,他要操作数据库,我们要做事物之前,我先把这个环境基本环境搭建起来,环境搭建,环境搭建的第一步当然就是咱们这个导入相关依赖,相关依赖有哪些呢?比如咱们这个数据源啊,数据库啊,驱动,包括包括呢,我们这个spring。
01:00
嗯,咱们这个是JDBC模块不呢,我们需要导入这几个,我们来进po文件里边,我们来看一下啊,这个数据源呢,以及驱动我们都导了,那么spring来操作数据库,Spring呢,对数据库的操作也有简化,我们导入它的这个JDBC模块,它来简化我们数据库操作以及事物控制,哎,保存,然后呢,这个依里边就会入咱们这个们数据,包括如果大家用啊来操作底层的数据库,也可以导入orm模块,哎,以方便呢,我们后来做事物控制的时候,只要M模块能来。
02:00
JDBC操作数据好,这相关依赖呢,我们先导进来,然后第二个我们配置数据源和JDBC,我们来操作数据库,这个DBC呢啊,大家以前估计也都用过,这是spring提供的,提供简化咱们这个数据库操作的工具,那么我们来把这个数据源这些我先配出来,第一个叫data source data source,我们把我们的这个数据源呢,我来return好数据源我先来出来一个。com,我们C3P0COM source,我们把这个data source呢返回出去,把它加在容器中,把数据源的这些属。
03:00
我来设置好that source.set user,我设置诶错了,Set user用户root,比如data source.set password,我把访问密码123456 source.set我们这个这个驱动的类名com.MY.jdbc点招好这个有异常抛出去,包括呢,我们接下来,哎接下来我们再来设置source,点这个JB哪个数据那么呢,我来就我们的这个默认的test库,这每一个数据库装完,这都有一个空的test库啊,我们就连向它,我连下我本机。
04:00
JDBC冒号,MY冒号双斜杠local host3306下的test库,好我们就连上它,这时我们这个数据源我们就放好了数据源,然后呢,为了操作数据库方便,我们来给IC容器中我们放一个JDBC,这个JDBC呢,它能简化我们这个增删改查的操作,那么我们还是一样,我把这个用一个JDBCL,关于这个JDBCL啊,类似于我们那些以前用过的cor runner啊,这些工具,它要从数据源里边获取连接,所以说呢,把这个数据源我们得给它放进来,而这个数据源呢,哎,我们有两种办法,第一种办法我们直接给参数位置写source,我们说在这些方法里边,参数位的这个东西都能从容中。
05:00
拿到之前放的这个东西也能拿到,第二种办法呢,不用那么麻烦,就把这个方法再调一遍就行了,哎,调一下,然后呢,我们把这个j d bc timel,哎,就封装好了,然后我们来AT1把它们加在容器中,有些同学呢。可能会有一些疑问,疑问就是什么呢?说哎,我们是不是第一次创建数据源的时候,哎,我们创建了一个数据源,把它返回出去了,而第二次创建JDB的时候调了这个方法,调这个方法是不是又会创一个数据源,哎,不是的啊,因为这是咱们spring的配置啊类配置类呢,只要他们这个方法是给容器中加组件的,第二次我们调方法相当于是从容器中找组件,而不是说把这个方法呢运行一遍,比如说这个呢,大家注意啊,这是spring对咱们这个配置文件有特殊处理这一块,我们说一下,Spring对configuration文件会特殊处理,Configuration类会特殊处理,也就说呢,我们这些方法给容器中啊,是来加组件的啊,这些方法的给容器中,给容器中加组。
06:20
件的方法,多次调用,多次调用都只是都只是从容器中找组件而已,比说呢,相当于还是只会创建一次来,这个不用担心,我们把这个呢就写好了,写好了以后呢,我们随便来写一个service,我来操作一下数据库呢就叫user service,这user service呢,它是一个业务逻辑总件,那么呢,我们再来一个user do,我们service来调用do方法来操作,据do来一个,那么do里边呢,我先来写一个最简单的方法,Public word insert来插入上一条数据,那么呢,我给这临时创建一张表,比如就叫。
07:20
TB杠,User table user table,那么呢,列名列名首先呢有一个ID啊,每一个用户的话,有一个自增ID,我就来特是一位自增,这是ID,包括呢,每一个人有他的用户名,Username username,写一个water好50就行了,比如呢还有一个H年龄。来写一个。二就够了,好我来保存一下,那么现在呢,我来创建了一张表,我们给这张表里边来插入记录,现在这张表呢,是没有任何记录的,好,那我们的插入的circle应该是insert into into,我们这张表表里边的什么字段呢?我们要插入ID是自增的,我们只插这两个字段,这两个字段然后呢,Values,比如我们插一个的面18,我们先来测试一下,走OK,它运行成功来刷新表里边有数据没问题。
08:38
CTRLC,我们把咱们这个插入方法就来完成一下这个方法,只不过这个方法呢,哎,这个方法呢,我们在这里边不是写死的两个东西,我们用站位符这一块也是占位服务,好现在呢,我们要调用这个circle来插入,我们只需要用我们刚才给容器中添的JDBC就行了,好让它直接O,然后呢,我们调用JDBC的点方法啊,更新增删呢,都来调这个方法,把语传过来,后边呢,这是可变参,就是我们要的这两个参数,那这两个参数呢,那第一个随机生成一个用户名,比如我来UUID,第二吗?
09:38
U ID to string,然string来截一下,从零截到五就行了,好,随机生成一个UUID,我们把它当成username啊传进来,这是第一个,将来年龄我们写一个19,好,现在呢,这是我们一条插入方法,那user service呢,我们来希望来调user do进行插入public,咱们这个insert user insert user,那么呢,我们来把user DA也装配进来,User DA user DA,好,我们把它自动装配进来,而user do呢,会利用j d bc table来操作数据库执行增删改,我们把这个user service呢,哎,来调user do的咱们这个插入啊,OK,插入完成以后呢,我们可以给控制台打印一下,你这插入完成。
10:38
那默认呢,我们现在这个方法是没有任何事物特性的,我们可以来做一个简单测试CTRLC来测试TX,好,我们把这些删掉。他来用这个T来加载这个配,当然要加载这个配呢,我们得让他来把其他的这两个组件do service都得扫描进来,那我就简单来写一个包描就行了,来扫描硅TX我们下的所有组件,好,我们现在呢先来测试,我们先来成功的插入一个application get b,我们把我们装的这个user service们从容器中获取过来,我们调入用一下它的方法。
11:38
User service.insert user,然后呢,我来测试看数据库里边能不能插入记录好,插入完成已经打印了,那么我们来看一下咱们这个数据库刷新,哎,数据库呢,有一条记录没问题,那么接下来呢,我们这个方法是默认没有事物的,比如我们要插入一条用户有可能呢,还会涉及到啊其他do,比如我写一个other do,其他do的其他方法在这里边进行执行等等等等很多,而我们事物呢,希望如果我们整个方法里边有任何一步出现问题,那么整个就应该回滚的,我们就不写那么多do了,我来模拟一个出个问题,因特I等于我们十除零,那么这个呢,会有数学运算问题,但是呢,我们现在是加不上15,所以说我们前面的插入还会进行,并不会回归。我们可以。
12:38
刷新一下,现在呢,只有两条记录,我们来重新运行一下这个测试,走这打印插入完成,但是呢,由于我们呃进行了数学运算异常,哎,这就抛出了异常,我们来看数据库刷新,但是这条记录还是插入进去了,因为我们并没有加入事物控制机制,没有任何的回滚机制,我们下一节课呢,就利用注解,我们给他加上事务控制。
我来说两句