00:00
复制一下,然后我这贴过来,这边呢改成33。然后OK。还是练啊,就是练就行了,嗯。来咱们32这个版本的路径,咱们拿一下。这个32呢,我先关了吧,33这边呢,我写一写啊,我要干什么。呃,这边呢,我是这样啊使用。MVC。架构模式修改,保存用户信息。
01:05
这边其实我有必要再把这个说一下是吧。把这个打开,我再提一下吧。这个图得记住啊。这个图是比较官方的一个图了,不是我画的啊。是怎么一个过程,系统职能分工什么?Model view controller是吧?另外Mac呢,是一个架构模式啊,它强制性的将应用程序的输入吧。输出吧,还有什么处理吧,谁管输入啊吗。输出谁管呀,JP呀是吧,处理呢,咱们可能model去处理这个事吧,是吧,所以使用m Mac应用程序分为三个核心部件啊,其实叫组件也行,模型视图控制器,视图是和用户交互的模型,它包括model啊,包括包括数据。
02:13
模型和业务模型,数据模型是到了,业务模型是service啊,控制器是调度中心啊,Mac优点其实你记住这个就行了,业务和以及什么高重用性。高重用性,为什么这个重用性能提高啊,独立了。能重用啊。倒是数据访问对象啊,这是属于谁啊,其实它呢,其实属于Java EE的设计模式里边的啊,Java e设计模式里边的一个单词叫DAO,或者有人喜欢把它叫做down啊,这个反正这个东西你随便吧啊,这个它不是一个,呃,它不是一个单词,它其实是多个单词的字母首字母啊放在一起的。行了,这个呢,我就不再说了啊,接下来呢,我就来。
03:01
把这个说把这个做一下啊,MC架构模式修改,保存用户信息,大家想一想,首先第一步你该做什么。啊,第一步你这个改了吗。这个没改吧,改这个啊,改这边的怎么办?这加什么?哎,就是logo吧,这个得加上去啊,这个写了好几遍了。这个不要死记啊,这个东西就是理解放在thread local中的数据都是线程,什么安全的一个线程,一个连接对象,所以这个时候呢,我们就调吧,Connection吧,Connection吧,调这个th local啊,它里边有一个方法不是叫get吗?啊,你就调就行,就获取吧,是吧,如果不能获取到的话,咱们再考虑什么,再考虑给它创建出来吧,啊创建出来啊,前面这个给它删掉啊,其他情况咱们是不是直接返回就行了。
04:23
啊对,忘了这事,你看这这这是吧,忘了啊哪个忘了local呢,他得往什么往里边存吧,它得存进去啊,你不存不行啊。所以get用了吗?啊,That是不是也用了啊,还有一个什么方法呀,Remove啊,所以connection关的时候呢,解除绑定啊,解除绑定关系怎么解除thread local.remove就行了。行吧,这块得解除掉。好了,你想啊,其实你以后用的时候你记住了,一旦是出现它的地方,必然考虑三个方法,哪个get get和remove啊,这样记的话可能更好一些啊,行了,就这么看吧,啊,咱们工具类就改完了,改完之后呢,接下来你要改用户的话,哪个是用户啊,这边吧,是不是这个是保存用户信息,这是保存用户信息,你想一想你这个怎么设计啊,咱不怎么设计吧,总之呢,你想一想,现在是不是一定得加几个班。
05:25
一个是当是吧。一个是到的什么实现是吧,再加一个吧,Service和service的实现吧,啊写到一块也行啊没问题。写到一块儿也可以。这不倒吗,是吧,实现。有同学会觉得老师这个事不对呀,大包没了。到那个包有吗?有吧,这是不是那个到那个包啊啊。这是几个包啊,123456,这是六个包。
06:04
明白吧,在。com下面能放东西吗?可以吧,语文老师,我想在。com下放东西,怎么放啊?那来呗,建一个类是吧,建类的时候你就把这个删掉不就行了吗?对吧,这是看包吧,这这你得会啊,你说这这这都见不了了,这不看班下面有了吗是。是吧,你这这删了吧,啊这个没有用,删掉,嗯。别在这儿见了啊。行了,那咱们就准备了啊,接口这块怎么准备啊,咱们接口准备一个。这个接口的话放在哪啊。到下边吧,你不能随便写啊,来这边叫user到吧,你看就自动放到这了吧,那实线包下放一个类,这个类叫什么什么user到的I'TL啊,实现什么user到接口是吧,OK了啊,你准备好之后呢,你就继续再往下了啊,你到接口到实现你service这一块的是吧,你就固定就行了啊,这个不用想为什么了啊,就直接写一个什么user service了啊,你继续往下这个实现的话,你就叫什么就叫user service的实现是吧,你这写上user service的啊,写上就行了,嗯,OK了。
07:27
这样就可以了。好,这边呢,就准备好了,排一下队啊,一个是插入,插入的serve light是控制器,控制器呢会调什么?调service接口,Service接口会找谁?Service实现类,Service实现类会调什么?到接口,到接口会调什么倒实现类啊,就这么一个,排个队就行了啊,其实这方里边呢,你先不要写代码啊,先搞定这俩接口再说,因为你想一想,剩下的其他程序都是面向接口编程的吧,所以你要搞定接口啊,你先搞哪个接口都行。
08:06
到跟service你随便定,咱们先搞到接口吧,把这个到接口搞定吧,你想想到接口的提供几个方法。哎,对了,我是不是应该应该再画一画这个图啊,这个图好像跟以前不一样了。这回变成什么了m Mac架构模式了啊,就不一样的,跟原先这样吧,我我我我建议一下啊,这边呢,我给一个,嗯,还是哪块的系统管理里面用户管理吧,有一个什么保存吧,这边呢,还是保存吧,点右键啊,我新建一个什么sequence贴过来,然后呢,写上这是一个MVC的行不行,双击打开系统管理员吧,系统管理员拖过来放到这对吧,他会访问谁,Tomca会访问谁service light调谁调service service调谁调到到调谁,最后跳到什么,接下去吧,你就这么一个过程。
09:02
啊,所以比以前更复杂了。啊,折腾半天没觉得没觉得简单是吧,嗯,就难了,其实这个结构还是比较清晰的啊,Comca,接下来你肯定会调什么保存用户信息的控制器啊,这边我们叫做C。然后呢,控制器呢,会调用什么呢?就是用户service啊用户service。其实我们写user service行吧,User service这个是什么呀?这是model,然后这边会叫什么呀,User到了,那这也属于什么呀,Model啊,这也属于model。来这个推一下吧,这个我拖一下吧,啊这个都往上一点,这个我也拖一下算了,这么着吧,啊行了,那这样的话最后呢,到这儿了吧,它是什么呀,叫杠。
10:02
什么杠,什么配置什么。叫page,叫什么来着?Page query user。是吧,你就认为它是视图方向就行了啊,它其实还是个serve light了,那其实还是我就不再画了啊,那这样的话Mac是不是就全了MVC,它实际上是怎么样。保存吧,保存你就调控制器呗,控制器只需要做一件事,就是什么获取数据,获取完数据之后呢,调什么调service,他其他就不就不用管了,他返回了吧,返回之后呢,他又把这个数据干什么呀。啊,不对,这块还有一个呢。还有一个什么什么什么动作,在保存之前得验证用户的用户代码是否存在吗?好像有这么一个功能是吧,有是吧。那这样的话,他点那个保存,然后这边呢,就是调serve,首先获取用户信息,然后接下来连接数据库,呃,其实是原先是接数据库的是吧,现在看调什么呀。
11:09
就叫就叫service啊,叫service保存数据吧,这样的话service是不是返回了。啊,就返回了。返回之后呢,就接下来是不是重定向啊。是吧,啊,然后整合就行了。这边的话我们就返回吧,嗯,返回啊给tomcat。然后他们开始再返回就行了啊。然后这边呢,我们渲染一下,然后这边我拉一下啊,接下来呢,你就可以可以看这边了,这边怎么办,这个service怎么办,Service首先第一件事是干什么。查询用户代码是否存在吧。您是处理业务吗?你现在搜不管这个事了吧,搜只获取数据掉了,然后返回是不是就可以了,可走。
12:06
这边呢是service,得先验证用户信息。用户代码是否存在吧,如果用户代码存在。怎么办?返回一个值。对吧,如果用户代码不存在的话怎么办。啊。这个得删一下啊,删一下它实际上是这样的啊,首先service呢,它在这应该是去连调用这个到是吧,然后到呢在这。返回,返回一个什么对象,用户对象,但是这个用户对象有没有可能等于空。用户对象如果不等于空的话,这说明什么?用户代码已经存在是吧?如果用户对象它要是等于空的话,这证明用户代码能用吗?所以。
13:03
如果用户对象等于空的话。或者用户量不等于空的话,返回一个值,所以这边我写一写吧啊。这个我都不写了啊,我就写这就行了,这是什么获取用户信息,然后呢。调用吧,调用model。获取了用户信息之后呢,调调用model啊,完成什么保存吧,保存用户,那么保存用户这个事呢,首先第一件事应该是什么。应该是根据什么用户代码查询什么用户信息吧,嗯,那这样的话,它是不是不是返回了用户信息U点对象啊防对象防源对象呢,这边呢,判断一下是吧,如果什么如果有点对象不是空则。
14:03
返回负一吧,还是负一行不行,返回就负一啊,然后呢,如果用户对象是空呢。就干什么。保存吧,返回了吧,啊就行了,来。如果有点对象啊,是浪是空。保存用户吧,保存用户。保存之后呢,就返回就行了,这个返回就不画了啊,返回返回你看啊,这个过程实际上是。控制器调用model model去处理业务是吧,然后呢,在处理过程中,如果涉及到数据的话,就连谁就调谁啊,就调到吧,钓到里啊。
15:00
行,这就是Mac,画完就是这样的。这是M啊。这是V,这是C。他只做数据的接收。调度中心。V的话做一边展示model m这块做我们核心的业务处理以及数据的处理啊,行,那就这样啊,咱们这个就挂到这儿,这个写的时候怎么写呀。我们分析出几个方法。在这。两个是吧,一个方法是返回user,叫select by,什么user code,学啊学什么东西,学这个起名怎么起?这是根据什么用户代码查询用户信息返回那。表示用户什么不存在啊。
16:00
然后接下来还有一个方法是执行的什么insert吧U吧,是不是保存啊,来这边是保存什么用户信息一条啊,返回一表示什么保存成功啊,行这个就写完了,你这边提供几个方法呀。一个吧,这是不是业务啊,所以public啊,不用public VO返回in类型吧,叫save对吧,这边写上什么U吧user就行了啊,保存用户信息,嗯,这样的话,这个就定完了,定完之后呢,这个你就关了吧,这就不用了,这个接口是不是也不用了,你就这三个类了。这个到呢,你就加什么就行了,实现是吧,你service加什么呀,现吧,然后排好队了,看清楚啊,它掉它吧,它掉它吧,它返回吧,它返回吧,还有一个事,这里面有一个什么,记住啊,实际上关系是A里边有BB里边有C,这是一个C,这是B,这是A。
17:14
明白吗?A里边有BB里边有C什么意思,你在这要调service,所以你这service里面应该有个什么service吧?啊private service叫user service吧,啊user service嘛,啊,又一个什么user service的什么实现吧,啊这样做这不多态吗?接下来你这个就写完了,你说A里面有B,你这是B吧,B里边你得有个什么C,所以这个时候你service需要到吧,所以你这就加一个一个到吧,一轮到吧来你用一什么一轮到了什么实现吧,嗯。哎,还有一个事儿我说一下啊,有的有的同学有一个习惯啊,他是往接口上加一个I。有的同学有这个习惯,我说一下啊,你不要感觉这个诧异啊,反正什么东西这加个挨着的,挨着的是什么。
18:06
Interface明白吧,所以它加上I的话,以后就好区分,反正带着I的全是接口。明白我的意思吧,所以这块我就不用了啊,我就我习惯的话是用这种方式啊,加什么I呀,我就知道这实现类这加了个ipl没有加PL全是什么。接口加上全是时间类,我我也能区分开是吧,我不一定非得用加一个I啊行,那这样的话大家想想这边怎么写啊。这我就定完了呀,这都定完了啊,这边的话我一会儿写吧,啊这个怎么办。Save。是不是到都有了,你就调就行了吧,先写service对吧,Select吧,你这有u code吧,U code是谁?一个user对象,不是有一个U对象嘛,所以这个时候user对象点什么呢?叫get user code,那这样的话就可以查它会返回一个什么user吧user,那这个时候user,它如果user要是不等于,那咱们立马返回负一程序能执行到这这说明什么呀。
19:13
程序能执行到光标这个位置,这足以说明这个用户对象是不存在的,用户对象要是不存在的话,咱们就保存吧,怎么保存呀,U到点什么save啊,不是saveser是吧,保存保存会返回一个什么类型的count,那这个时候你就会返回吧,返回什么呀啊。这里边也最好加上事物啊,最好加上来connection connection等于now,然后接下来这边最好先这么写啊,Connection等于什么DB to点盖什么connection吧,嗯,养成习惯啊,模式非常固定,这边呢,我们加上去一个try catch,然后再加上一个finally,一定要注意,这边呢,虽然不需要事物,咱们最好把事物写上点begin,然后呢,D点什么呢?然后呢,在这C点什么呀,Robot啊,在这写db.end吧,然后还有一个事是DB点什么close,好,这个是none吧,这个是吧,这都是none啊,这边呢,你把这个代码给它剪了,剪完之后呢,你给它放到我们这个这个开始和结束的之间,提交的之间啊,这个时候这样啊,就service就先这么写。
20:28
来这边的话,咱们给他放到外边吧,来这边定一下。好,我问大家,大家想一想,在这个方法里边,这个事物代码是这么写吗?我在另外一个下边再写一个方法的话,我问你事物代码是不是还是这么写,所以你想到了面向横切面编程是吗?哎,你还记得那天我讲的那个东西吗?就是那个什么来处理那个字符乱码的问题,你看在一个类里边是不是写一句话叫处理乱码啊,在一个类边是不是还要写一遍啊,是不是还要写一遍,你看这个你在这个方法是不是写这个代码啊,因为我问你在下个方法里面要控制事物的话,是不是还是写个代码。
21:16
你这不是重复工作吗?那代码是不是得复用啊?所以这有缺点。还有一个很重要的,Service里边是不是不应该编写JDBC?你现在不是在编写CBC吗?Service是业务,所以这边的话要注意一个事啊,咱们现在目前阶段就只能先这么写着,你这边怎么办?这边的话你就先注掉所有的是吧,注掉注掉之后呢,怎么写这块,这个不干其他事了,只是数据的输入吧,然后接下来是调用什么model,然后再调用什么view吧,那数据输入怎么办?User user user不是有个工具类吗?工具类叫什么web user,第二,Make request to object,你看这个数据就封装完了吗?封装完数据注意啊,User点还需要去调一下set RA date这个时间,时间等于什么?
22:20
等于date for date you点又一个date是吧?这边写什么叫cost,点叫DATE2,这样的话,这个用户对象是不是才算封装完毕,封装数据完毕之后调model怎么调啊?这有service,你只要调用service一个方法,什么方法save,你save它就保存了吧,它就会返回一个什么return value吧,保存结果,那这个时候的话判断一下,如果return value要是等于等于负一的话,这是一个问题吧,Else if,如果return value要是等于等于一的话,这是一个问题吧,Else是不是又是个问题啊。
23:03
所以等于等于负一怎么办?你这怎么写的?是不是代表这个用户已经存在了,这么做的吧?再继续其他情况呢,保存的成功,嗯,就这么写了吧,这么写了,所以我就直接放过来就行,其他地方是不是没有处理啊,那先这么着吧。好,那这样的话就是保存成功再分页查询,但是这个不用管,那下边是不是可以删掉了,删掉之前我还是留一下吧,啊一会儿我可能还要用,您看这个所现在就只负责这件事了,拿信息之后调service返回值之后,根据值来跳转到某调用某个视图啊就行了,呃,这个service也写完了,你想这是业务吗?这是不是先查呀,查完之后如果不等于空的话,证明有了返回负一吧,程序如果往下继续走的话,这说明什么?这说明没有用户吧,是不是保存啊保存返回直就保存就返回就行了吧,嗯,那接下来就剩谁了,就剩这了吧,这个ins色的我我我从这从这从这copy一下行吗。
24:10
我就懒得写了,因为写这个东西也没有意义了,来copy的时候一定要注意一个问题啊。切过来什么问题呢?呃。需要把这个改一改,这个连接对象这一块的不能关是吧,这边呢,你是可以关的啊,但是这个里边不需要结果集。然后还有一个问题,什么问题就是在这啊6RUNTIME exception这块我写上这是什么呀,就是插入用户异常行吧,你随便写吧,这边的话我就删掉啊,该删的我删了,嗯,往下走这边都不用了,所以我删了它,哎,不对,这个得用吧。这个得用这是一个什么词后语句吧,来这边的往前点。
25:07
这个我删了。然后加上去,然后这个删掉。最后返回什么,这个对吗?这是不是不用了吧?创的类型connection搜索语句编译赋值赋值赋值赋值赋值执行执行完之后呢,如果出现异常抛出去啊这边呢,我们关闭返回,嗯,行,那这边怎么办啊。这边也得这样做吧,这个不能关闭吧,也要往上抛啊,都要往上抛,这边最后返回的是个什么对象,是个UR是吧,UR返回就行了啊,这边呢,返回一个,这还需要有什么结果集,因为是查询语句嘛,好,那这边的话,咱们这个语句得变一下啊。
26:15
是吧,好,这样的话,咱把这个思语句写一下啊,这个思语句呢,就是叫做select。呃,Yoga。Name。呃,User password or type,然后还有一个是。其他的不需要了是吧。Re,也,也查出来吧,From user啊,关条件是咱们的user code等于问号,大家一定要记住啊,这个方法跟业务有关系吗?所以这个方法你是不是要把所有的都查出来,将来有没有可能这个方法要重复使用,因为大家还记得吗?在那个分页查询那个页面上是不是有个修改的图片,你只要点修改图片还记得吗?这是一条数据吧,你点修改的话,是不是会跳到下个页面啊,在下个页面是不是要把信息展示出来啊,那那个时候需要查询吗?这个方法能重复使用吗?可以啊,所以你要注意这个是跟业务没有关系的,它的目的就是为了查数据。
27:23
就是根据用户代码查,你把它写全了啊,接下来你就。等于connection.prepare定义,然后叫set string,给这个问号附一个什么值,应该扣的吧?附上之后呢,就可以查询反问结果集了吧,反问结果集判断结果集有数据的话怎么办啊,如果有数据怎么办?就你有对象吧,User,你有一个什么user吧,你完之后呢,User去叫set方法啊,Set user code一个,Set user name一个,Site or type一个,Set user password一个,还有R一个,都给它设上值啊,这边咱们给它减了。
28:05
那结果里边取就行了,是吧,这个是不是也从结果这边取啊,嗯,取吧,这边也是一样啊,点get string贴过来放在这,这边也一样,Get three啊接过来放在这。这样的话就完成了,造也完成了,Service就是处理业务的,到就是处理增长改善CD的,这个呢,Service现在全删了,这都不用了,你看现在这个就是变得很很很少了,这个数据就这么点了。New对象调model处理事儿调试图完成展示model这一块的话,处理业务到这块处理数据的增生改查。能理解意思吧,所以总体的设计呢,就是这样啊,好,我们一起来运行一下,看行不行,这个改完之后一定要运行啊,不运行呢,这个哎,你不知道它是是不是有问题啊。好了,那这样的话,咱们这边呢,给它清掉啊来清掉。
29:01
惊调啊,这边咱们打开,打开之后呢,我们访问一下EGOV这个项目,访问的时候我们访问哪个呀,加个断点吧先啊。我们就访问这个,嗯,登录,然后我再访问我这个用户管理这边呢,我点一个新增,新增我写上信息这边我写上啊走可以吧,可以啊。行走。底层呢,应该是走我们这个控制器了吧,控制器这边走走走,哎,你看这个用户对象啊,你先确认一下这个用户对象呢,对不对啊,什么RG date呀,嗯,什么u code呀,什么U那排是不是都有啊,都有值的啊,接下来你就调service嘛,那service往下调就行了,调service你一调service就往下走啊,往下走往下走,再往下走掉谁了,是不是掉道了,调到你就进去了,进去了啊。
30:04
啊,走到这儿了啊,返回再进去啊,它其实是其这条语句里边先执行的是这个括号里面的东西吧,它执行的用这个get的方法吧,就再进再进去啊再进去,进到这个select啊再往下再往下往下往下往下往下你查询这个用户肯定是什么。是当吧,那肯定是捺,你看看这里边是不是当。这说明什么?用户根本就不存在了,用户不存在的话,你想一想,这个等于none,那U等于none啊是吧?U等于none的话,它就往下走了,它就插入了,那插入的话它就走了进去了,进的插入的话往下走,往下走走走走它插入了,插入成功是吧?返回个几啊。返回值你看com几啊,变成一了啊,接下来你就往下走就行了,往下走关闭连接了,返回了,返回你给这个了,给这个之后往下走,这个成Y就等于什么呀,等于一吧,你往下走成立了是吧,这个成立了,这就走了,就到这了,分线查询了。
31:02
能看懂吗?这是一个MC的架构模式的一个书写方式啊,是这样去做的。是不是又比又比以前麻烦了。你想以前的话,咱们是不是都写到这儿了,但是这样不好,不能复用,咱们这样分开还是好的,虽然累多了几个啊,虽然是累多了几个。咱们就得这么写啊,以后。你得适应一下,不适应的话你得适应啊。好,这是一个保存用户信息,那咱们其实可以再来一个啊,比如说这边呢,我再新增我这边写上去啊李这个李色对吧,这个用户代码是不是已经存在了啊,存在了来走点保存。点保存的话,你想一想这边这个用户哪啊这个呀,是吧,那我就点了啊来我就点了啊,走点嗯。密码来再点再点啊,点完之后你看过来了,过来之后你看那个U。
32:05
有没有?U,是不是有了有了你就你就往下走成立了。是吧,走了是吧,返回了吧,返回负一了啊返回返回负一,往下走了就等于负一了,往下走就走到这了是吧,存消息走,走完之后你看就这样了。是吧?没事吧,可以啊,可以就是这样,我说一下啊,大家必须掌握这个工具叫debug,如果不会的话,如果你没有用过deug,你在公司怎么混啊?是吧,比如说调个程序,在你旁边一看,调程序调半天不会调,哎,你没有用过debug吗?哎,咱们这个不底棒了,也不会吗?是这样怎么个情况是吧,所以你这个得会啊。而且你最好不要在这点啊。
33:00
最好不要在这点是快捷键的方式。56784个快用上去。嗯,行了,咱们这节课就先到这儿啊,先休息一下吧啊。
我来说两句