00:00
呃,那我们继续写user service。那么现在的话呢,我们有一个get users all users对吧,就是获取所有的用户信息这样的一个,呃,就是说从数据库里面查数据的这样的一个服务呢,我们就已经写好了,呃,那么接下来的话呢,我们还需要写一些其他的服务啊,还是要写一些其他的服务,呃,比如说什么,比如说这个根据用户名获取用户信息。对吧,就是你根据用户名呢,我们可以来获取这个用户信息,对吧,当然它也是对呃,MYSQL数据库里边的数据进行一个查找,对吧,只不过它是根据这个呃用户名I get user by name吧。好,呃,当然它返回值呢,是一个user b这样的一个类,然后呢,我们是一个string,比如说在这儿的话呢,呃,它获取的参数呢,是用户名对吧?当然在这的话呢,呃,我们还是要新建一个数据库的连接,CQ exception,然后呢,Class not found exception,然后在这里面的话,我们把这个错误站给它打出来啊,然后我们最后呢,我们给它return一个now对吧?然后接下来的话呢,我们就可以,呃,当然就是说还是一些样板代码对吧?比如说首先呢,去确定这个呃,驱动类对吧。
01:36
然后data.driver这是我们的驱动类,呃,然后接下来的话呢,还是一个connection,也就是我们创建一个连接driver manager.get对吧?呃,这个实际上都是一些样板代码,也就是说它每一个呃,这个服务呢,都会这样来写一下,哎,然后呢,Username data.password对吧?然后呢,你不要忘记配对的,把这个连接给它关闭掉,好,那我们现在的话呢,我们就要呃,根据用户名呢来获取一下用户信息,所以说在这儿的话呢,我们就需要呃构建一个查询语句对吧?构建一个查询语句,那么在这的话,呃,当然还是prepare statement,呃,当然我这里边的话呢,这个Q呢也很好写,那就是select ID,对吧,Username password。
02:36
From user username等于一个问号对吧?呃,当然我们在这的话呢,我们还是要。啊,把这个占位符给它来填一下,当然我在这儿填的占位符呢,是一个用户名,所以说set string1username,好,呃,那么接下来的话呢,我们就可以来执行这个查询了,Va result set。
03:08
Select statement点对吧,Select statement.query呃,当然由于我们每一个用户名呢,它都是独一无二的,所以说在这的话,你们还是使用一个if result set.next对吧,如果它会true的话呢,那说明我们的查询呢就成功了,也就是我们查出了这样的一个呃数据对吧?当然在这的话呢,就是user,呃,我们先来新建一个user对吧,在上面的话就是玩user,等于new一个呃,User,好,呃,然后呢,我们就开始把它每一个字段呢给它填充一下,一个是第一个是ID,那就是result set.get long对吧,我们获取ID,然后把它set到呃user这个类里边,然后user.set username,对吧,Result set.get string。
04:08
呃,那这个是username,然后呢,Use点,呃,Set password result set.get string,呃,Password,好,呃,当然呢,还有一个就是角色名对吧?呃,那么这个角色名呢,表里边是没有的,所以说我们需要调用service里边的get user name,呃,来来获取它的角色对吧?Result set.get long ID,好,那这个就是获取了角色名,然后给它填充到字段里面去啊,然后接下来的话呢,我们不要忘记把这个查询语句给它关闭掉,然后把user直接返回就可以了啊,那这样的话呢,我们就实现了根据用户名获取用户信息这样的一个功能,对吧?呃,当然我们还需要实现一个什么呢?那就是根据用户ID获取用。
05:08
用户信息,所以说你呃会发现这个根据用户名获取用户信息和根据用户ID获取用户信息,呃,实际上他们的功能是差不多的,对吧,实际上他们的功能差不多的,呃,所以说呢,在这里边的话呢,我们就可以直接把上面这个对吧,根据用户名获取呃用户信息的这个。API呢,直接给它贴过来对吧?当然你在这儿的话,你是需要,呃,就是说函数名或者说方法名是需要自己来设置一下的,Public static user,然后get user by ID,然后呢,这个是用户ID对吧?然后在这里边的话呢,我们就直接把上面的呃,这个方法体呢给它填过来对吧?给它直接拷贝过来,呃,那么拷贝过来以后呢,我们有哪些地方需要改呢?比如说在这儿,那肯定就不是where。
06:06
呃,User内等于一个问号,而是YID等于一个问号对吧?当然在这的话呢,我们占位符的话呢,也是使用userz ID来进行填充,然后呢,这个也不是set string了,对吧?那么这个是应该是一个set long对吧?啊,那么下面的代码呢,我们就不需要有任何的改动了,你直接把它查出来,然后呃,填充到一个user并类里面,然后把它返回就可以了,好。那这个是根据用户ID获取用户信息。呃,那么除了根据用户ID获取用户信息以外,我们还需要什么呢?我们还需要的就是。根据用户ID删除用户对吧?根据用户ID删除用户啊,因为我们都知道,之前我们在前端演示的时候呢,呃,我们用户管理里面是需要可以删除用户的,所以说我们这里面我们需要呃,根据用户ID呢,来把用户信息给删掉,当然你把用户信息删掉以后呢,那么在用户角色表中,对吧,也需要将。
07:15
对应的用户ID的数据删除对吧,因为你把这个用户删掉以后,那用户在。用户角色表里边的这个数据,它也就没有存在的意义了,对吧?因为你这个用户都没了嘛,呃,所以说我们需要在用户角色表里边呢,把对应的这个用户ID的什么角色数据对吧?或者说呃,应该叫做用户角色数据对吧,给它删除掉,呃,当然在这的话呢,它其实写的代码也是基本上差不多的,呃,我们是一个Y的,也就是说它没有返回值,或者说它返回值为空,嗯,因为我们是一个删除操作嘛,那就是delete user by ID对吧,Long user ID,然后在这里边的话呢,当然我们还是一个try catch exception,然后还有就是呃,Class not found exception,对吧。
08:19
然后呢,1.printstares,我们把这个错误站呢给他打出来好,然后接下来的话呢,我们就开始写删除呃用户数据的这样的一个呃代码。嗯,在这的话就是database.driver对吧,然后呢,就是connection,等于,当然你其实可以直接把上面这个拷贝过来啊,因为都是一样的,呃,获取连接好呃,就是获取了这个云台下划线啊的命,它的一个呃,数据库的连接对吧?那么获取了数据库的连接呢,我们首先要删除用户数据对吧?呃,那么删除用户数据的话呢,就是把delete user,呃,那这样的一个语句的话呢,我们怎么来写呢?其实它非常简单是吧,那就是delete from对吧,User这个数据库里边,然后呢,Where。
09:19
ID等于一个问号对吧,占位符,那这样的话呢,我们就把呃用户ID在用户表里边对应的数据呢,就都给它删掉了啊,当然在这的话,我们需要填充一下占位符user ID,然后呢,Delete user,点呃,Execute对吧?你执行了这个以后呢,它就删掉了,好啊,那我们删除了用户ID在U的这张表里面的数据以后呢,我们当然还要对吧,删除用户对应的角色数据对吧?也就是说我们在user,然后下划线roll这张表里边呢,我们保存了呃用户ID和角色ID之间的一个对应关系对吧?因为你这个用户已经不存在了,那么呃,它相应的对应关系显然也不应该存在了,对吧?显然也不应该存在了。
10:14
好,所以说在这的话呢,我们就可以。来直接编写一个delete user对吧,然后呢,connection.prepare statement,然后在这的话呢,我们是一个delete from user where user ID等于问号啊。呃,然后呢,当然还是一个填充占位符的问题,UIDOK,然后接下来的话呢,我们还是要呃,执行这个。呃,语句对吧?OK,那这样的话呢,我们就完成了对用户信息的一个删除操作,呃,当然在这的话,你不要忘记把这些语句啊都给它关闭掉,呃,以及把连接对吧,给它关闭掉,这也是不能忘记的,好,那这样的话呢,我们删除用户信息的,呃,这个操作呢,我们就都已经写完了啊,对吧?然后接下来的话呢,我们还要写一个什么呢?写一个。
11:26
添加新用户的服务对吧?呃,因为你肯定是说就是我们要在前端对吧,你可以添加一个新的用户进来对吧,不管是呃什么样的角色的用户,但是你都应该给他呃添加进来,所以说在这的话呢,我们就是public state void对吧,你你往呃这个添加新用户的操作,实际上就是往数据库里面插入一条数据,呃,当然他这个插入数据的操作呢,也可以是一个avoidid,对吧,也可以是个avoidid,当然你可以写的把它更复杂一点,也就是说呃,比方说如果我们插入数据的这个操作,它抛异常的话呢,你可以把异常信息包装,然后返回一下,对吧,当然我们在这的话,我们就直接VO了,我们就直接好ADD user,然后呢,String username。
12:16
对吧,然后呢,还有呢,就是string password,好,我们要把用户名和密码呢,给它呃写进去,对吧,给他写进去,然后在这的话呢,当然我们还是呃就是说try catch,呃,CQ异常,然后呢,Class not found这样的一个异常,然后呢1.print。啊,然后接下来的话呢,当然我们用的驱动类以及连接都是呃,完全一样的,对吧,在我们的这个服务里边,好,所以说啊,我们直接给它贴过来,不要忘记把这个链接给它关闭掉,对吧,你用完一个链接,你肯定是要关闭掉的,好然后呢,我们在这儿的话呢,是写一个插入语句,connection.prepare statement,然后呢,这个插入语句的话就是insert into。
13:16
对吧?User,然后呢,我们要插入的是用户名密码啊,当然在这儿的话呢,这个密码实际上它是经过MD5加密以后的密文密码,对吧?呃,那么MD5加密操作呢,我们会放在控制器里边,我们会放在控制器里边,我们这里面服务的话呢,就直接写,呃,实际上我们的服务呢,非常简单,就是写的是对呃,这个数据库的一个增删查改对吧?我们把这个增删查感的给它包装一下,好,然后呢,Insert statement set string,第一个站位服呢,当然就是user nameme了,对吧?呃,那么第二个占位符呢,就是密码。好,然后呢,不要忘记执行它,OK,那执行完以后呢,我们就把用户密钥密码呢,给它写到数据库里边了,然后呢,不要忘记,呃,把这个插入语句呢给它关闭掉对吧?呃,那到这儿的话呢,我们把这个用户表,呃,实际上就是user service对吧?呃。
14:21
这个服务呢,它就已经写完了,所以说我们从这就可以看得出来,实际上这个service它的作用就是呃,针对我们的数据库呢,对吧,把增删查改的呃这样的一些对吧,对数据库进行增删查改的操作呢,给它封装成函数对吧?给它封装成函数,然后由控制器呢,来调用我们的,呃。一些service对吧,所以说我们写完这个user service以后呢,呃,我们就可以开始写其他了,比方说什么呢,比如说role service对吧,也就是呃,我们的这个角色操作,当然这些增山查海操作呢,你都可以在这个main函数里边呢,呃对它进行一些测试对吧,看一下它有没有bug,是不是好,然后呢,我们开始写这个。
15:10
我们user service写完以后呢,我们就可以呃开始写road service了,对吧?呃,当然你在这儿呢,你就会发现,诶这个road service可能它就是呃做什么呢,它实际上基本上就是针对。对吧,若角色表进行的增删查改,呃,当然由于我们的这个角色它跟权限呢是一个多对多的关系,所以说我们在呃,Road service里边呢,可能会去调用一些对吧permission service,也就是权限service的一些,呃,一些东西,对吧,权限服务的一些呃,方法好,我们现在我们先来写一些什么呢?呃,比方说我我可以写一个叫做获取所有角色的对吧方法,对不对?那么这个方法呢,它叫做什么呢?Public state list,它返回的是一个role这样的一个B对象对吧组成的列表,然后呢,Get or对吧,没有任何呃,接收的参数好,然后接下来的话呢,呃,当然我们还是一个try catch对吧,还是一个try catch啊。
16:28
啊,那你TRY的话呢,你肯定是要把这个连接和呃驱动类我们都给它设置好对吧,然后呢,在这的话呢,我们是一个呃,一个是SQL exception,然后。竖杠这个是货操作对吧?呃,也就是说我们补货的异常呢,是SQL exception或者。Class not found exception对吧,1.printstas,呃然后呢,我们再返回一个空列表,也就是说如果没有任何角色的能被查找到呢,我们就返回一个空列表,然后在这儿的话呢,你不要忘记把这个连接给它关闭掉,呃,不要忘记把连接关闭掉,然后呢,我们在这儿的话呢,呃,我们要构建一个select statement这样的一个语句,对吧?呃然后呢,connection.statement其实基本上他呃写的代码都差不多啊,基本上就是写CQ,或者说叫做呃增删查改对吧?它并没有说呃有些什么有特别高的技术含量的地方对吧?当然就是说我们这里面实际上每调一次这些方法呢,都会开辟一个连接,然后就把它关闭掉,可能这个呃如果说是高并发的情况下,可能它的性能会存在问题对吧,呃。
17:50
但是呃,你可以进一步优化对吧?去实现一些连接池啊之类的,呃并且我们这种写法呢,实际上很有助于大家理解,说是哎,我们对数据库的增删查看它,呃到底是做什么,我们需要对这个使用JDBC对数据库进行增删查看呢,要很熟练对吧?而且最重要的一点就是我们的数据中台一般是供内部人员使用的,呃你供内部人员使用的话呢,那么一般来讲,它并不会有同时有特别特别多的人去访问这个呃中台的后端,对吧?呃,那么既然没有人去访问,呃没有很多人去访问这个中台的后端呢?那它的并发量并不是会特别大对吧?它并不是说呃是TOC或者说是呃针对外部人员使用的,那它可能并发会比较高一些,对吧?那你可能需要呃上一些处理高并发的呃这样的一些手段,但是一般来讲这个中台项目,呃,他可能。
18:50
我们。呃,就是说用的人可能并不是那么那么多对吧,并不是那么那么多,当然这些表的话呢,他呃,因为你也是内部人员的一些,就是说用户表嘛,所以说呃,访问他的呃频率可能并没有那么高,对吧?所以说我们这样写其实问题也不是太大对吧,问题也不是太大,呃关键就是方便大家理解对吧,方便大家理解呃,好,那么接下来的话呢,我们来写一下这个代码呢,就是c like ID,然后就是用户,呃就是角色名row name from row对吧?然后呢,哇,Rose等于new一个list啊,这个list里边的类型呢,是呃,Row这样的一个并类对吧?呃,用来存放我们查询的结果,然后呢,Result set结果的集合呢,是一个select statement execute query,对吧,然后呢。
19:52
当result set.next如果呃,我们查询的这个结果集里面它不为空的话呢,我们就把它一条一条取出来,然后组成一个Rose这样的一个并类的实例,对吧?然后再把它添加到Rose这个列表里面去,呃,这个都是一个常规操作了,好new肉,然后呢,roll.set ID对吧?那就是result.get long ID,然后呢,roll.get row name对吧?
20:27
呃,这个应该是set name result set.get string吧,那这个就是字段名呢,是name好我们set好以后呢,我们呃,就把这个角色对吧,查出来的角色的这样的一个并实力呢,给它放进去对吧?给它放进去,然后不要忘记把这个查询语句给它关闭掉,然后呢,我们把这个Rose这个列表返回就可以了啊,所以说你可以看到这个获取所有角色啊和。获取呃,所有用户的,呃,这样的一个操作基本上是差不多的,对吧,基本上是差不多几乎是一样的,呃,几乎是一样的啊。
21:11
呃,然后呢,我们在这边我们还要写一个什么呢?比如说我们在这里面我们还可以写一个就是添加新角色,呃,呃,这样的一个操作,对吧,添加新角色这样一个操作,呃,那我们如何去添加呢?当然和添加新用户的这个操作呢,基本上是一样的,对吧?呃,At roll,当然它还是没有返回值的,String roll name,好,然后接下来的话呢,我们还是一个try catch,然后把上面的这个驱动类。以及connection,对吧?创建连接的呢,给他呃,直接拷贝过来对吧,然后呢,补货异常的我们也直接给他写好一点,Print stares OK,呃,每创建一个连接呢,你就要写一个配对的关闭连接的操作,这样的话呢,防止我们忘掉,呃,关闭关闭连接这样的一个操作好,然后我们有了连接以后呢,我们就可以写这个插入语句了,对吧,connection.prepare statement,然后呢,Insert into。
22:28
Row这张表对吧?我们要插入的字段名或者叫列名呢,是row下滑name,然后呢,Values,然后在这的话有一个占位符是问号,我们把这个占位符呢给它写一下对吧,Real name好,那这样的话呢,然后呢,我们再执行一个呃,插入操作,呃,当然你不要忘记把这个语句关闭掉,那这样的话呢,我们就完成了呃,添加新角色这样的一个操作,对吧?呃,当然除了添加新角色以外呢,我们还会用到什么样的服务呢?呃,那还会用到的就是删除角色的服务,对吧,删除一个呃,当然我们这个删除角色是什么呢?是根据角色ID删除一个呃角色这样的一个操作啊,当然你要删除角色的话呢,呃,同样的。
23:29
啊,我们还需要对吧?呃,就是说同时将角色权限表中对应的数据删除对吧?因为你一个角色不存在了,那么角色权限表里边对不对?这个角色所拥有的权限,反映这个角色所呃拥有的权限的那些数据对吧?那些关系数据它也就不存在了,所以说你还需要呃,同时把这个角色权限表里面的呃对应数据给它删除掉,呃,当然public static删除操作还是avoid,呃,Delete。
24:16
Long若ID还是一个串对吧,好,我们直接把这里边给它贴过来对吧,直接指纹给他贴过来,OK,然后呢。不要忘记对吧,捕获异常,其实这个我们也可以直接给它贴过来了,好,因为现在大家应该都比较理解了,当然你不要忘记把连接关闭掉对吧?OK,那首先在角色表中删除数据对吧?在角色表中删除数据啊,那在这里面的话呢。的delete,若statement等于什么呢?对吧,我们赋值为connection prepare statement,呃,然后呢,我们在这的话呢,是。
25:09
From若where ID等于问号对吧?然后呢,我们给它把占位符给它填上,然后呢,Delete row excu执行就可以了,对吧?呃,然后呢,我们在角色表里边删除了数据以后呢,我们还要在什么呀?在角色权限表中删除数据对吧?在角色权限表中删除数据当然就是说呃,这两个删除操作你可以,呃,把他们放到一个事物里边也是没有问题的对吧?就是说我在角色表里面删除数据和在角色权限表里面删除数据,这两个必须是原子性的对吧?要么呃,全都执行,要么全都不执行,这个也是没有问题,对吧?你可以使用GDBC,呃。
26:03
然后编写一段这个什么呢?编写一段事务性的呃这样的代码对吧?呃也是没有问题的对吧?当然这个也不太复杂,呃大家可以下去,如果有有兴趣的话,可以自己呃来把它修改一下,对吧?来把它修改一下啊。然后呢,我们在这的话呢,我们就是delete role permission statement对吧,等于connection.prepare statement好,那么在这的话就是delete from role permission对吧?Where若ID等于一个问号,然后呢,Delete row permission statement,然后我们在这边还是把站位符给它填上,然后不要忘记执行它好。啊,当然在这的话呢,我们在角色表里边删除的角色,然后在角色权限表里边呢,把角色的权限对应的关系的这个数据呢也删除了,呃,当然我们还需要做什么呢?我们还需要在什么呀?在用户角色表中删除数据对吧?因为你这个角色都已经不存在了,那么反映用户和角色的这个关系的数据对不对?那你也应该对应的把它删除掉对吧?也应该对应把它删除掉,所以在这的话,我们继续挖一个delete什么呢?Delete user rule等于点好,Delete from user,若where,若ID等于问号,对吧?还是一个单位。
27:56
OK,然后呢?
28:00
Delete user statement.set long1user ID对,应该是rule ID,好,然后呢?The little user Rose statement.x对吧?不要忘记执行它,OK,也就是在这的话呢,我们根据角色删ID删除一个角色呢,同时将角色权限表中对应的数据删除,对吧?以及将用户角色表中对应的数据删除好。在这,诶我们这些操作都已经完成了,当然上面这些语句呢,你都可以把它关闭掉,对吧,你都可以把它关闭掉,好那一个是the little statement。点close对吧,然后呢,Delete permiss statement对吧,把它关掉,然后delete user statement把它关闭掉,好,那这样的话呢,所有的角色服务对吧。
29:14
也就是说针对角色的增删查改的代码呢,我们就都已经写完了,我们就都已经写完了。
我来说两句