00:01
下面一个我要考虑的是。第三个下面一个我要考虑的是呃,日志详情啊。日志详情页面。日志详情页面实现,第四个是删除日志功能实现。我们先看第三个啊。日志详情页面的实现,我们找到慢页面。在脉上面我们有一个。For一起。啊,或者一个一个循环,呃,循环一个一个的日志,那么这个日志呢,我可以点这点这个标题啊,点这个标题可以进入到这个日志的详情页面上去,是吧,同学们。我点他,哎,他应该能给我进到详情页面上去,没错吧。那大家帮我想一想,我想进入到详情页面。我想进入到详情页面。我应该怎么做呢?首先第一个已知。已知。
01:00
已知。的ID。需要根据topic。ID。获取特定topic,这是第一步。第二步,获取这个topic关联的所有的回复。第三个,如果某个回复。如果某个回复由主人回复,需要关联查询出来。需要查询啊出来。应该是这样的,那行第一步已知topic的ID,我们要根据这个ID获取特定的topic,咱们一起来看一下。回到麦。好,其他的我全把它关掉了啊。到这边来。也就在这。咱们需要把这个窗帘接,把它改一下。TH冒号。大括号杠,我这里面写的是topic点读。因为我当前发请求,我主要查询的是和日志相关的,所以就不要写user点读了,我写的是topic电镀。
02:04
然后问号。等于我就写个叫topic detail。并且我要把ID传过去。ID应该是什么呢?到了大括号,我们当前是有一个for each。啊,这个topic,所以我应该写的是topic.id是吧,把这个删掉。好,就是这样。那行吧。咱们来看一看这个超链接,它能不能给我显示出来。刷新一下。啊,一定有问题。是吧,有问题啊,只要看到这种莫名其妙的,那就说明time的表达式有问题。好看一下,这不是我故意的,我看一下是什么问题。看一下topic点。Operate,他。啊,它的解析的表达式有问题。这表达式能有什么问题啊?
03:00
往下走。这一行的表达式有问题,看一下啊。A标签,Th topic do oper等于topic detail。ID等于Dollar。这是topic对的呀。topic.id没有问题啊。嗯。这边也是对的呀。来一步一步来,我先把它先剪切掉,一点一点往里面加,看一下啊,我知道了,怪不得你看这个左大括号,我右边少了一个。是吧?少了一个大括号是吧,同学们少了一个啊。再刷一次。好,现在有了,我们把鼠标放上去,你看下面已经没问题了是吧,然后咱们把它换成数字,换成数字很简单,咱们只需要加个竖线。
04:03
这边加一个竖线,OK,这样就搞定了。好,再继续啊。我加错了。到外面去了。刷一下。把鼠标放上去还没显示,他还没刷新过来,稍等一下啊。发表日志二。还没刷新过来啊,还是显示的一。哎呀,这好奇怪,不管他了啊,这次肯定没问题了,我们再抓紧时间再继续啊。那现在同学们。现在是topic点,那请问我是不是得需要一个topic controller哟?行,新建一个topic评出了。然后在topic control里面,我得写个方法,名字叫啥。名字叫什么?
05:01
不是刚刚写的吗?Topic detail是不是啊?那我是不是得有个ID啊。没错吧,这个ID行了,那么我得根据topic service去去查呗。所以private topic service service对吧,然后service.get哦,还缺少一个根据ID获取的方法吧,那行,补一个吧。根据ID获取特定topic,没错吧?Public。Get。By ID。Intake ID。那行。加个方法。然后它得需要do给C给v.get topic,诶,有的ID放进去,Return。好,所以回到这边来调用一下,点get topic by ID扔进去,好,这样我就能得到一个topic。
06:02
然后请问一下这个topic,我是不是要把它扔到三线里面去。要得吧,因为一会儿我要去跳转到那个日志的详情页面嘛,我在详情页面上,我再去展示它里面的信息嘛,所以我得把它保存到三星里面去。当然有人说,老师,你为什么总保存了三星,保存了软筷子行不行?可以的吧,你保存了三星也行啊,这个随便你。三线点赛。行,把它保存进去,然后DT。好,那这个底贴我们应该怎么写呢?来看一下啊,当前在这。它外面一层是不是有frame。我们准确的写法,我们是不是得写frame杠啊?哎,是不是啊。啊,应该就这样子,没错吧,当前是基于根目录的,你得从外表开始。那你这个detail你不是放在里面吗?假设我现在不知道,我们一起来看一下效果啊,假设我现在不知道,一会我们报404,然后我们通过404再来分析啊,就这样。
07:04
那行,Topic和C有了,Service有了,我们是不是得把它配到这里面去啊?配置一下。好,回到这边来。并ddd等于topic。com.at v谷点中点,controller.topic controller。好,它里面是不是需要一个叫topic service是吧,它需要一个topic service,好,If service行。那topic里面需要do这边咱们已经配过了。好,那这个我已经把它配上去了。OK。那行吧,咱们刷新一下。下面呢,我需要在这边来设个断点。我们第一步先看一下这个topic能不能查到。
08:14
OK,没问题。我回到页面上去。啊,点击登录。好,现在已经进来了。进来之后我们可以点一个。点进去好,进入到断点,咱们一起来看一下。往下走查询一下。有问题啊。没查到。怎么会没查到?为啥?难道是我第五里面没写啊,他可能真实的原因。点进去。再顶进去。再点进去按住CTRL键啊,按住CTRL点进去,然后再点他,哎,果然没写是吧。写一下吧。Loader。Select,新from t-ID的一个值。
09:01
ID可以吧,就这样。已知topic的ID,根据topic的ID获取特定topic,好,第一步我们应该已经搞定了,那下面一步获取这个topic关联的所有的回复。获取他关联的所有的回复。也就是说,我们需要根据。我们需要根据topic它的ID获取所有的它所关联的回复信息。那么我们得需要有reply service。是吧?我们得需要有reply service。新建一个。Reply,然后这里面第一个方法。根据topic的ID。
10:01
获取啊,获取关联的。关联的所有的回复。Get reply list by topic ID。In ID。就这是吧,我得需要有有这么一个方法。那行吧,咱们先把现在启动好的这个现在再来检查一次。回到这边来。登录进去。行,再点一个。好,他进入断点了,咱们现在再来看一次,下一步。你看这次topic就有值了吧,打开哎,没有问题,对的。啊,对的,但是现在这个list是不还没有值。因为咱们还没写呢,是吧,现在这个topic已经有了,行,咱们把这个问题来看一下,叫return detail这个问题啊。那我就直接运行了啊。好运行了,他这边给我报错了。他会报我们这个资源他找不到。啊,他找不到这资源。叫这个template叫点H是吧,他说找不到啊。
11:05
点HTML does not exist说它不存在吧?那当然不存在了,你这个根目录下面哪里有?我们应该是在根目录下面的frame下面这个detail吗。是吧?啊,我们看一下404。这还看不见是吧?哎,还看不见啊,因为咱们用timeli了是吧。没关系,反正通过这个也能看得出来啊,所以因此我这边我需要加一个叫frames,没错吧,把这玩意加进去就没问题了。好,这个我们就就不再去试它了啊,我们再继续回到我们刚才的话题上来。Read me。刚才我们已经获得topic,然后我们要获取所有关联的回复,因此我们就新建了一个reply service,然后我们新建这个方法。实现一下呗。Reply。Service。然后实现一下reply service。
12:01
好,那你实现实现它,实现它里面所有的方法,那他是不是得需要reply。Private reply deal。得需要他。然后我们看一下rely里面rely.get来有个get rely list把把我们topic放进去,那这边有个topic ID,那行吗?封装出一个topic。可以的吧,把它封装一下,然后再。OK,搞定。那这边报错啊,报错水果没有的构造方法补一个。In construct ID可以了吧,补了一个O向左再回去,再回去,好,这边没问题再回去,没问题再回去。好,那就应该问题不大。那我们得把这个他们对象之间的依赖关系,是不是得把它写上去啊?现在我的topic里面需要一个topic service。看一下啊。里面topic controller里面有topic service。然后service。
13:00
里面需要有topic do。没问题。再来。N。回到这边来,我这个店已经得到topic了,我还需要怎么做呢?我是不是得需要reply service啊?因此我在这边写一个private Rep service。然后reply service.get reply list by ID,好,把我们的把它放进去。Get ID。这样我就能得到一个list。OK。再来,你拿到这个reply list之后。点set reply。是不是?得把它设置进去。同学们再接着帮我看,这是第二个问题,再来看第三步。第三步是什么呢?如果某一个回复由主人回复。如果某一个回复有主人回复,我们也需要查询出来。
14:04
但也就是意味着同学们。你这个方法我点进去。他就用do的get reply service这个方法。我们获取到的是所有的reply。同学们,我们获取的是所有的reply。但是如果某一个reply有。Host'the reply。我们是不是也要一并把它查出来啊?所以。我感觉。我需要一个host rely service。回到这边来新建一个。Host the reply service。好,我得写个方法。Host reply get a host Rep。Reply ID。In reply。坚持一下啊,快结束了。Replied。那行吧,我得写一个时时现类回到这边来。
15:03
注意啊,这个我们思考的过程是一步一步一步把它套套起来的啊,一步一步来的service。好,我们实现一下reply。好,我实现一下其中的方法,那么他肯定需要do嘛,他肯定是需要do的private host reply。Host the reply be old host radio。那行,他肯定需要。查询一下,点get哦,还没有呢,那写一个呗。Reply回到这。好像我们都没写它的时间类,是不是啊,还没写到时现类。那行吧。这边有四个。又是白色有的。Topic也有,哎,那连你看连这个reply都没有是吧,那要不这两个咱们都写一下行吗?反正现在已经有他了啊,已经有了借口了。咱们得写个方法。根据reply ID查询的方法。根据。
16:00
Reply ID。查询啊,查询关联的host。Reply,尸体。行。Get a byly。ID。In reply ID。那新建一个host the reply。DAMP。好,继承。Best deal。Host reply。实现。Reply deal,接着它好实现一下其中的方法。那我们在这边写一下return。肉。Selection from t杠,Host reply will reply ID的一个值。Replied。我回到数据库看一下列名啊。Horse reply。
17:01
Reply,它叫reply,是不是不叫reply?那这个方法我就把它写好了。写好之后,我们再回到这边来,把它补全了,Get a host reply by reply ID,把我们的reply ID放进去可以吧?一下。一下好,那service把它好了。第几行?第几行?这个。哦,这边少了一个是吧,把它赶紧补一下,改一下啊。Reply。可以吧?行,改过来了吧。再来再继续,那你的reply设怎么样,是不是你这边你这个地方啊,呃,我们得到所有的reply,你得到所有的reply,如果人家reply有house reply,所以我们不能直接返回吧。我们写一下。
18:01
Replied。Reply list等于。然后咱们是不是得需要循环一下呀。是吧?Reply list.size。好,回到这里面来,我们取出其中的一个reply。Repl.get。好取到一个,然后呢,我们怎么做,我们是不是要去把我们的host reply service拿进来啊。是不是把它拿进来。service.get host reply by reply reply.get ID。我们就会得到一个host reply。然后把它设置进去,reply.set。这边就不要再去判断是否为空了,为空无所谓,你为空我赛就赛。那么。行吧,同学们啊,就把它写成这样,最后负循环之后我们再return。Rely。
19:00
就这样。好,这边一个小的细节,这个小的细节就是在这个地方。此处啊,此处引入的是其他po接对应的service。Service结构。而不是不是DA接口。也就是说我这个地方引用的是post reply叫reply。不是house。我的依据是什么?我的想法是。其他PU对应的。业务逻辑。是封装在service层的。封装的设备是什么?我需要调用。别人的。业务逻辑方法。而。不要去深入考虑人家内部的细节。
20:01
啊,这个话反正就这么去琢磨一下吧,我调用的是host reply service,而不是host the reply do,如果我们考虑do do的方法是不是单精度方法。请问我现在需要的是什么?我现在需要的是根据某一个reply,它的ID是不是获取主动回复?那我就调用你的service层的你的业务方法获取主动恢复,而不是第五层的方法,万一第五层的方法里面的逻辑不止调用这一个方法呢?所以我这边用的是service。啊,如果能听懂,听懂就听啊,如果听不懂的也没有关系啊。退1万步讲,这个地方你就用do。效果是一样的。因为咱们这个业务不复杂,但是这个理解的理念是不一样的。就像什么?就像我需要造一个火箭。那造一个火箭呢,你想一想啊,我们以前这个国家啊,制造这个神舟飞船。是吧,这个神舟几号几号,我们以前是受限于国外的,你像我们现在我们咱们国家对吧,咱们现在祖国强大了啊,我们造这个鱼,这个叫叫什么太空站。
21:05
你像美国想和我们合作是吧,进行太空一些项目的合作,不合作。啊,直接拒,直接把他拒绝掉,不合作,为什么不合作,因为我们这个被美国打压了好多年。啊,你像这个这个神舟飞腾上面有一个,呃,有一个很小很小的一个,一个一个零零配件就是一个橡胶圈。很小的一个橡胶圈,但是咱们国家就当时这个技术啊,就没办法生产这个东西,这是一个非常非常小的一个零件,所以我们以前发射这个火箭的时候呢,对吧,发射这个神舟飞船的时候呢,我们总是从每很多的国家去进货各种各样的零部件。那我问一下,我们以前是不是不了解人家零零部件内部的细节啊?我们只要购买过来嘛,购买过来然后组装起来,咱们就可以发售嘛。哎,是吧,同学们,那现在因为咱们国家这个叫方奋图强是吧,现在各种零部件咱们很多全是国产化的。啊,就是这样的,那咱们这边也是一样的,我们需要完成我们我们的一个功能,我们需要去借助于别人的功能,那么我们是不是只要去操作service啊。
22:06
你没有必要去操作内部的细节。do层。嗯,我打这个比方,大家能听懂吗?就像哎,我们购买购买人家这个,这个叫所谓的叫密封圈,那就购买过了就就直接用。啊,但是我们却不知道它内部的细节。哎,就是这样的。啊,所以呢,我们调用的时候,大家尽量的去调用service支撑。而不去,而不要去利用人家内部的DA层。所以我这边我就把它写成这样了。再来,再继续。再我们再把思路再拉回来啊,Reply service。那么re repair service。我们再回到。再回到我们的CT上面去。回到我们的control了。应该是在,应该是在controller。在这儿。我们这边的topic。Reply service,然后把它设置上去。
23:01
然后我们这个service内部要去获取它。所以。我们找到reply service就是它,它内部又去考虑这个主人回复的事情,这是一环套一环的。所以主人回复的事情在我们topic这一层应该是隔代的是吧?Topic关联reply reply,关联host reply是吧?同学们,所以我们在topic这一层。我们在这一层的时候。我们只需要考虑和reply之间的关系。是不是我只需要考虑和reply之间的关系,然后在reply这一层你再去考虑和house reply的关系?我这边写了一个方法叫get replaced by topic ID。那行。我们再回到topic service里面去。回到这边来,这边有个叫get topic8id,这边是不是获取了一个topic呀?那肯定不能直接返回吧。你直接返回是不是就只返回一个topic本身的信息啊。
24:01
好。然后。然后我们这边要写一下。同样的道理。Topic service里面需要去借助于reply的相关的业务才能完成我的功能,那我这边要引入的是不是reply service,而不是reply。能听懂吗?我写一下reply service。得把它写进去。好,我写一下啊,此处。引用的是。Reply service。而不是。Reply you。啊,就这样子。Reply。Service get repl by topic ID。Get ID。好,这样我就能得到一个list。好。然后把它放进去,点set reply list。好Du,把它扔进去。这样我们再return topic。
25:00
然后再回到CTRL里面去CTRL。这个地方,那这个地方的咱们还要吗。还要吗?不要了吧?是不是啊,我是不是已经把topic内部的关联哪些reply这两句话,其实你看一下是不是和刚才一样的同学们。回到账。你看这不一样的吗?啊。是不是啊,其实是一样的啊。删掉了啊,我删掉了,我是不是把topic内部的reply如何去获取,我是不是封装到这个业务方法里面去了。那我的CT了,还要再考虑在这边再加这两句话吗?你不要去考虑了,你就根据ID获取topic就行了。具体这个topic内部到底关联多少个reply,是人家这个service内部的事情。能听懂吗?但是一上来我还是写在这儿的,因为一上来我写在这儿比较符合大家这个逻辑上的这个考虑第一步,第二步。然后我发现哦,应该是它内部的事情,所以我就把它放到这个service内部去了,因此这个还要吗。
26:05
不要了,删掉。这部其实我也把它转移到这个内部去了。是不是啊,把它转移放到这边来了。那行。那么整个的这个我就把它串起来了。我们回到C去了,然后我们在这边设个断点。我们看一下这个topic能不能获取到。如果能获取成功了,咱们再去考虑页面上怎么展示行吗,同学们?好,现场试一试。启动。在。在topic controller。获取指定的topic。具体这个中关联。
27:04
多少个?关联。多少个reply?You。Reply service内部实现。同理。同理。Reply。Service。内部是否有关联的host reply。有。稍等一下啊。嗯,算了,同理就不写太啰嗦,就这样吧,啊,我们来看一下。登录进去。好,现在进来点一个点。哎,怎么点了报错了呢。啥情况?看一下啊。我知道为什么报错了,真是的。为啥报错犯了个低级错误,我们写了一大坨,你在配置文件里面注册了吗?
28:00
真是的是吧?还没注册呢是吧。也没人提醒我啊。打开。来看一下啊,检查一下topic在这呢。刚才这个错误给大家看一下啊。我给他看一下。这个地方。这个错误是咱们反射发生的错误。啊,再往下看,往下往下往下往下往下在这看到了吗。它报了个控制帧哦,这个方法报控制帧,你点进去topic service I里面26行报控制帧,那就这一行报控制帧。这一行报控制针是他是空行吗,同学们?是是空,那他是空就说明你没有给他注入呗。是吧,为了住,就这意思,行啊。好,再继续啊。来看一下啊。嗯,Topic检查一下啊,里面有一个topic service行。Topic里面有个service,没错,再继续topic service里面咱们来看一下。回到社会资产。
29:00
Service打开。它里面需要两个topic和reply那行。Service就topic do有了,咱们还需要一个property。Reply是吧?If reply service是不是?那reply是好像还没有诶。那咱们就加一个呗,回到这。ID reply service class com点硅谷点QQ重点service.ip点。好,Reply service是它吧,那再看一下它里面需要的是什么?Do和service那行补两个。Property。Name等于reply do。等于。Reply,好,第二个name等于post reply service if post reply是吧?咱们需要把这两个把它补上,然后咱们还缺这两个再补一下呗。Reply丢,咱们把它补到上面去。
30:02
这个顺序没有,没有什么要求啊,我只是习惯性的把do全放在一坨,Service放在一坨,肯的放在一坨行吗?同学们。好com点艾特硅谷点QQ中好do.mp点。Reply。没有啊。我就不知道,好像我们还没写呢是吧。真是的。好,再写一个。新建一个reply do,幸好咱们这个best do封装的还可以啊,所以不至于do层写的很麻烦啊。Reply you。稍等写错了啊S。实现。可以吧,就这样行,实现一下它里面的方法。有三个方法,消息这么多。咱们这个方法肯定是要写的,其他两个就不管了啊,就写这一个。这方法怎么写?Q corre select、新from t杠、reply。
31:01
Topic等于一个值,然后把topic点该ID放进去可以吧?哎,这样咱们就修好了。好了,就这一个,其他先不管了啊,再来。所以咱们这边写一下reply。DA,安平。现在咱们需要去维护这个配置文件啊,大家可能会觉得蛮痛苦的是吧,因为咱们业务越来越复杂,这个配置文件里面东西会越来越多。等到我们下个阶段,等我等到我们学了框架的时候,等我们学了叫组件扫描和自动装配,那么这个配置文件咱们就可以省略了。啊,我们其实就可以把它识别掉,就不需要再做这么繁琐的配置了。OK。所以回到这边来,Host reply service还没有呢,咱们补一个。ID host rely service。Com点艾特硅谷点QQ重点service.ip点。A host repl with。那咱们得需要看一下这玩意儿里面需要啥,点进去哦,它需要丢那行再回去。
32:05
再回到这边来,咱补一个。Profit。坚持一下,一分钟啊。Could you see。所以有同学频频繁的对我讲课,对你进行认可啊,一直在点头。com.at硅谷点QQ重点DA,点安。这个说明听得很认真是吧,一直在点头啊,实在太困就站一下啊,实在太我我这个我很能理解大家,因为让我听课我也困是吧。行,现在我已经应该已经全部配好了,再启动一次。
33:05
把它全部关掉,关掉。再登录进来。好,咱们再点进去。还有错?不可能吧,怎么还有错呢?Reply,这啥意思啊?这是咱们讲过的,这啥意思啊。只要大家看到兼括号in,哎,对了,咱们同学说的是对的,只要你看到兼括号in,就说明调用了它的造方法,然后这边传了一个参数intake参数,那说明啥?是不是少了reply带一个intake参数的构造方法。为什么会出现这情况?为什么?是不是因为我们数据库里面有一个列叫reply?而我们那一列对应的类型是in。然后我们best do就想了一个办法,我们best do就去调用它带一个in参数的构造方法,把它封装出一个reply,然后再付给那个属性,还记得不?咱们补一下吧,Reply。
34:02
好,回到P59。找到reply。好,补一个吧啊。Construction。好,接着是吧,其他的检查一下吧,How the reply,咱们也补一个吧,行不行?反正加上去它即使不调用它也他也没错啊。好,这个没问题,就是basic。也没问题,行,现在应该差不多了。再启动。
35:01
登录进去,我们来看一下啊。看一下好。然后点进去。好,我们进入断点看一下啊,往下走。看一下这个topic对象打开好,这些都有值,哎,Reply也有值是吧,两个对的,打开两个reply,再看有没有主动回复第一个。Rely,里面你看。有了吧。House reply,没问题。再往下下面一个reply,哎,这个没有好对的啊,确实和我数据库是一致的。那行,说明咱们这个topic应该是没有问题的。啊,应该是没有问题的行。再来。这边我看一下他报的什么错啊。32号。Style more than once in element说,在我这个element里面出现了两次style这个属性。啊,在32号。是哪个页面的三杀,我看一下。这是小问题啊。
36:01
在detail页面上是吧,Detail页面32行找一下吧,Detail detail这个页面。32号往下走这一行。两个是不是啊,这边有一个style,后面一个style是吧,同学们所了,那咱把它剪切过去啊。就剪切一下,把它删掉行吧,同学们,这是小问题啊。好,再把它放进去。OK,那我们暂时我们就先说这么多啊,大家稍微休息一会儿,一会儿呢,我们就把这个底特页面上把它换成真实的数据行吗?同学们。
我来说两句