00:00
但是做完之后,他看我说这个代码我们说功能能实现了,说我们再来再次分析一下这个代码,虽然功能能实现,但是我说它的效率是非常低的啊,怎么低的,那我们再次分析知道吗。是吧,只要是牵扯到这种是吧,读写文件你就最好再分析一下知道吧,像我们这个的,我说哪一行代码比较低啊,你看你觉得哪一行代码比较低,是第几行代码运营效率低。第几行295。对这一行还有哪一行?还有哪一,还有哪一行比较低,然后呢,大家看这一行比较低,还有哪一行比较低。对,这这这一行这一行比较低。创建流,创建流这个这个就这个地方就创建个流对象,它没有读数据,其实这个这个不低,下边这一横低,真正写数据的低,所以大伙说这一行跟这一行他俩是最效率是最低的。
01:09
怎么低了,你分析一下这一行执行代,这一行代码执行之前数据在哪存着呢?对,是不是在这个文件里边存着的文件,这不是在这个对象里边存着,对象是不是在内存里边,内存里边这一行代码执行完之后呢?对数据写到文件里边,写到文件,文件在磁盘上写到磁上,所以这个代码虽然你调的时候就简单,简简单单这成代码,但是它这个方法里边肯定做了大量的写磁盘那些操作。知道吧,那怎么写的,但你感兴趣,你可以看他源码,知道吧,然后呢,再看他肯定包含着这么一个过程,把内存里边数据,然后写到磁盘上。写到磁盘上,我说它这什么连接磁盘连接之后在上面得找磁道,然后往上刻0101的电信号,所以它的效率也是非常低的,这一行代码好,下面再看这一行代码,我说它也也非常低。
02:06
就为什么低对这个代码执行之前,这些数据在哪存着呢?对在硬盘在这个文件里边存到的,就在这边存到的,这行代码执行完之后呢,对读到这个对象里边,对象你的内存里边吧。知道吧,他这行代码一定是什么,在底层也去读磁盘了,连接磁盘,然后找磁道,它是不是,它不是往他是找磁道,不是往磁道上写电信号,他是把磁道上电信号读出来,读到内存里边去。他写的跟他读的是同样是同样的数据吗。同样的数据,那就是用户上传这个文件里边数据吗?对,那同样的数据,一开始本来在内存里边,你非要写到磁盘上边,然后又从磁盘上边读到内存里边,这不是多此一举吗?所以我们就想办法,能不能这样,这个数据本来在内存里边,在这个对象里边了,能不能直接从这个对象到这个对象里边去,从这一块内存到这块内存,你别往这写了,你也别这么那读了,能不能从这个内存到直接到这个内存里边。
03:18
对,也就说从这个对象里边直接到这个对象里边,那可不可以,你就看这俩对象,一个active fire,一个work work work不,那你来看看,那怎么来看,首先那最终我要把数据放到这个work book里边,那这个work book里边,Work book得需要一个啥?对,需要一个流,需要这个流干什么,就是读一个文,读一个数据去,以前这个流是直接连这个什么,直接连这个磁盘,那能不能也给他一个瘤,让这个流直接连这个什么内存距。可不可以,正好巧了是吧,对在这个类里边是吧,正好有个方法,这个方法干什么了,正好能获取一个输入流,这个输入流干什么?就是连他这块内存,对通过这个什么流就可以读到它里边数据了,对它里边对有个方法,哪一个方法就这个方法,我就直接在那写了,对。
04:15
对,它里边这样有方法,它里边哪一个方法叫获取流入的,就获取数据的,是不是get get里边哪一个方法,你看看看吧,你不是就要一个输入流吗?我正好给你返回一个输入流,这个输入流就连这块内存本身知吧,然后呢,他得到一个叫印input的,对,然后呢,Is知。当然这个地方呢,我们就不读磁盘了,这个地方就不要了。然后呢,那这个不读词方,你也别往磁盘上写了啊,所以这个地方也不要了啊。直接从这个内存到这个内存了好吗。是,所以那这个大功能啊,功能肯定一样的,功能读的写的都是同样的数据,但功能当然一样了啊,就是不再读写磁盘了,这种效率知道吧,就提高了啊,这个文件也不用生成了,知道好,下边我们再启动服务再来测一测,你效果肯定完全一样,知好下我们再次来做一个。
05:27
嗯。啊。然后呢,这个地方来个张三YF123点掉了,然后呢,我们这个市场活动,然后呢,大家看导入市场活动导入的话,大家看我还导入这个文件啊,导这个文件,这个里边数据我再改一改,然后呢,这个地方可烂到里边了啊,可烂到里边我这个数据再给他改一改,改的话,因为我这个数据数据名要不然就重名了,又导一次,咱这个地方再加一改,说明第二次导入的数据这是。
06:03
然后呢,这个地方再来给它加一个这样然这样好了,然后呢,这个地方点保存,保存完了之后,他让我再去选,去在这里选,然后呢,这个地方来这这这这样大,我这样啊,我为了测试更好一些,我说呢,我别在这一页了,每页显示两这个每页显示两条,我拿第二页这然后呢,我在这个地方导入,然后导成功之后,他应该跑到第一页去,然后保持每页显示投入不变,你看啊,然后这个地方再去选市场活动克拉里边点打开点导入打卡成功,导入两条,一点确定打卡关了之后,你看又跑到第一页,保持每页线投入股标,这是我们刚刚第二次导入的市场功啊,那当然我们说刚才导入的都在这里边啊。好,这样的话,看看我们这个导入市场活动,我们就给大家说到这儿了啊。这是导入的功能,那下边我们做呢,要做这个叫查看市场活动明细。
07:01
要跑到这个页面上来做了,知道吧,这个这个页面相关功能知道吧,好下面那我做这做了,我我们首先也还是分析它这个需求,那我们首先给大家介绍一下这种什么查看明细的这种功能也是基础功能,它的应用场景就这样说,用户在查看我们系统里边数据的时候,现在它有两种途径,第一个导出来就不第一个在列表中的看,列表当中看,我说第一个列表中不会把所有的数据列出来。因为列表中只会列关键数据,为什么?因为列表比较这内容,这空间比较小啊,万一我们说一个表里边可能有几十个字段。那咱们这个地方其实就这几个字段,你看还没列出来完呢,像什么修创这个成本啊,描述啊,创建者创建时间,修改者,修改者都没列出来,列表中只会列出关键数据。那用户想看最详细的,他对就对这个数据感兴趣了,那这个时候他说列在列表上看不见了,再一个我说我们他能导出来看,导出来看也只是导出一些什么。
08:00
对,也是导出来这个是吧,这一条这个表里边儿关于这条记录的这些信息。那关键是我我们说用户还有这样的想查看,不但要查看这条记录的信息,还要查看跟这条记录相关的信息。相关的信息有哪些,那你点进来之后,我们以前给大家介绍过,说用户可以在这里发表一些意见,对这个市场活动。一点,他能发表意见,这些意见都存在意见表里边,叫备注表里报告,那每一个市场活动下边都可以有一些意见,都可以有很多意见。那用户说了,我想查看一条市场活动的时候,我不但要看这个市场活动最详细的信息。我还要看跟这个市场活动相关的,就对这个市场活动发表的意见信息怎么办?你导出来的时候,导出那个Excel文件里边就没有了,你知道吗?所以大刚我说我们现在说做这种从列表从导出来看的话,那么我们系统里边数据一个是你看不全,再一个即使能看全,但是呢,跟这条记录相关的别的一些记录的信息你看不到了,所以那怎么办呢?那用户肯定有这种需求,要查看这一条某一条记录最详细的信息,而且不但要显示他最详细的息,还要显示给他相关的,对他进行说明,或者给他相关的别的表里边那些相关的记录的信息,那怎么办呢?这个时候就要什么,就要专门在一个页面里边,专门展示这一条市场活动的这些相关的最详细的以及相关的信息。
09:30
啊,这个时候就是查看明细了这种功能,那查看明细他到底怎么做,他的需求应该是这样,我再再大概给大家,给大家这个演示一下,谈一下,这样说用户在查查看市场活动,在查看数据列表的时候,他对哪一个哪一条记录感兴趣,对我们这个呢,对市场活动,就是他对哪一条市场活动感兴趣,他就点这个市场活动名称,这名称一般都做成超级链接。那一点它然后呢,就跳转到市场活动的这个明细页面,在明细页面上面就来展示这条市场活动的最详细的,就市场活动表里边关于这条记录所有的字段的信息都应该展示出来,知道吗?这是我们说市场活动这个这个表里边最详细啊,这个不但这这条表里边最详细的信息,我们还得显示什么,还得显示跟这一条信息相关的别的表的信息,就市场活动备注表里边对这个市场红动发表的意见也都么列出来,应该要列出谁列的等等,这些都应该显示出来。
10:28
啊,这是我们说到这儿,当然我们说以后做别的查看明细的时候,还很有可能相关的还有别的兴趣。那我们这个地方只有一个备注信息就行了啊,反正做法都是类似的,跳转到明细页面展示这条市场活动最详细的,以及跟他相关的别的表格信息,知道吧,好,这时候我们知道,那来到这个页面用户就看到了,看到之后那在这个页面上他可以做别的操作,我们后边再做别的功能,知道吧,好,这是总之跳转到明细页面就能查看这条市场中的明细信息了,知道吧。
11:00
好,这是我们大概这个需求就是这样,下边大我们来看这需求文档描述,需求文档中查看市场活动明细,他说用户在市场活动主页面点击市场活动名称超级链接,然后来跳转到市场活动明细页面,完成查看市场活动明细的功能,然后呢,他这个地方说用户那个就是他有些特殊要求,他说在市场明细页面时来展示市场活动基本信息,他这个基本信息就是关于这一条市场活动在市场活动表里边的最详细的信息。也就是说所有字段的信息都显示出来,而且大家你看这些所有者,创建者、修改者都是显示的名字,那么将来从受有者查的时候肯定进行连接查询,知道吗?所以这是我们的最基本信息,还有大纲还要展示该市场活动下的所有的备注信息,所以对于这一条市场活动发表的一些意见,一些信息,知道吗?好,这是我们这个关于这个市场活动的,关于市场上的明细的,他这个需求我们就简单给大家说到这,好,这是下边发请求,什么时候发请求链接,对一点,这个超级链接是不是发请求了,下边我们来改这个超级链接了,改超级链接,那来改成超级链接,你看改一改超级链接在哪呢。
12:19
对是不是在那个什么主页面上面,主页面那这超级链接是怎么产生的,对扉页查询拼出来在拼扉页查询都是拼出来的,就是这个地方看这是这个超级链接啊对这个看吗?就一点这个名字想获得判情了。像后大发,你大哥他怎么发的,我也弄点老可忍后大发的。那我们是不是把这个URL改一改就行了,改一改改一下吧,改成我们刚才这个CTRL了,哪个地方就这个把它拿过来CTRLC,然后呢,把它写过来。这东西写过了,这样去了,是不是它的带个参数啊,带个参数,那带参数怎么带。
13:04
对,通过UR的问号,参数名叫什么对ID参数值叫什么?对,是不是每次变出来这个OB接那个ID啊对ID,那么那从obg里边取是不是它这个变量,是不是得把这个字符串拆开了,拆开那拆开加一个两个啊这个地方啊这这个地方来对ID。等他让他拆一下。看这。对,然后呢,这个这个拆拆开这个怎么怎么拆呢?对这个这个是谁呢?哎,这这个是不是忘少写了一个东西啊。这个是不是少写了一个这个东西。对。是不是少点一个斜杠啊。
14:01
温前,对,咱们上上次是不是少写行,我说呢,怎么写都不对了,嗯,这少写这个斜杠,那这个是不是带前面带什么,问你说ID等于后边这个值是不是这样才是对的,对这样才是对的,对,少写一个,嗯,然后呢,点二叫什么ID,嗯啊哪一个。诶这样啊,这样按理说这样就可以了,是吧,但是这样好像有点问题啊,这样有点问题,好下面你比如说大概我们这段来启动一下,我们来测一下啊,我们来启测一下,这样有问题的,你看看啊启动。港澳。探。对。这样跳转不过去是吧,有有人做过吗?没啊没测呀,这样没问题啊,没用这种方法来看着吧,这样做有问题,你看吧,跳不跳不过去看看啊,看着你这个看着没问题,但是他美工拼这个拼这个人啊,拼这个超级链接的时候拼的有有点问题你看啊,然后这个地方你要我一点它,点它按理说是不是能跳转过去了,你点它跳转不过去看吧,点不动是吧。
15:23
点不动,那咋解决?对点点不动,说明这个超级链接拼的有问题是吧,拼的有什么有什么问题大家可以看一下按什么对F12是吧,可以看一看啊。你看这个超级链接,你看它有问题,把它拷过来,品出C拷贝过来,然后它放到咱们这里边看啊好把这个超级链接。这是个超级链接,你点的时候再看它是不是执行这个执给他加一个单击事件,然后一点的话,是不是执行这里边代码,这里边是不是JS代码,这GS代码你看啊,你看这是GS代码,我把它拷过了,这一段GS代码你看吧,对这个代码干什么,这个代码干什么的?对是不是给这个变量赋值附着这么一个字符串,你要这么写,这是字符串吗?这不是这是啥。
16:21
干啥?对,这是一个变量,这他说他说变量它不是字符串,这是变量,GS认为是变量,字符串是啥?字符串是不是得加引号啊,他没加引号了吗?这是变量,变量的话,那你是吧,他他就去找前面有没有定义这个变量,前面定义这个变量吗?没有没有,就是按底方的按点方,那就跳转不过去了。那我们要是让跳转过去咋办呢?对加引号就行了,单引号双引号无所谓了,因为前台前台就是弱弱类型的语言,是单引号双引号无所谓了,所这么为了这我区分开来,是不是我们别的就加双引号这个东西,加单引号是不是就可以了,对在哪儿加,对是不是就在这个,把这个把这个变量把这个把这个组括起来,对在这个地方加个单引号,你这加一个。
17:14
加到哪后边那个加到哪个对。是不是把这个ID把这个D也括起来,哪个地方对,是不是加到这个地方,加到这个地方就行了,知道吧,好,下边来启动服务,再家看一看。这样就能跳转过去了,嗯。对,他跳转包去肯定是有超级链接的事是。然后呢,这个地方来一个张三,然后呢,这个地方来一个YS5123回车登录,然后呢市场活动,然后呢,随便点一个了,随便一点开,这样就跳转过来了好吗。
18:02
当然这是基本信息,下边备注,当然现在咱们没有备注呢,一会儿我们来填备注就行了。好,这是我们这个关于查看明细,这个我们就做到这儿了,好好大家休息一会儿休息,我们来看看后边这些内容,好,大家对这个需求有个大概了解之后呢,下边我们准备一块儿来看看这个查看市场的明细到底怎么来做。那做之前我们什么在这个查看明细的时候牵扯到两张表,我们先给大家回顾一下这两张表,第一个表市场活动表,第二个表对市场活动备注表,所以这俩表我们一块来看看,以前其实设计物理模型的时候已经跟大家简单说过这张表是吧,这个是查看市场活动明细,明细这个表牵扯到两张表,第一个表是一个市场活动这个表啊是吧,这里边是存的关于市场活动的基本信息都在这里边呢,还有一个叫市场活动备注表I,然后呢,Remark这个表,这两个表。
19:03
啊,它里边存的都是所有市场活动的备注性,就对所有市场活动发表的意见都在这个表给我存,它是存意见的,它是存那吧市场活动嘛,知道吧,那这个时候我们说这两张表就有关系了,知道吧,这两张表有关系了,那这两张表大看你看有什么关系,我们首先来看看他们的字段,假如说我这简单写一下三字段,这是市场ID,市场部的名字,然后呢,这是备注的ID,然后呢,备注的内容叫note content,备注的内容知道吧。这是我们做到这两个是吧,那说假如说有一个市场活动1001,然后呢,市场活动叫一,然后呢1002,然后呢ACTIVITY2,然后呢还有个备注,你比说这个备注来一个,这个呢来一个1111,然后呢备注有一个备注的叫REMARK1啊,然后呢,再来这个地方来一个备注来个二,然后呢备注来一个remark啊REMARK2,我们说这两张表有关系。
20:10
因为现实世界中就有关系,有啥关系对一个一个市场活动下边可以有多个备注。一个备注。只能属于一个市场活动,所以它俩是一个什么1 : 6的关系,谁是一对,这个是一,这个什么多知道吧,所以我们设计数据库的时候,他俩那应该比反映这种关系,这种关系咋怎么来设计一对多的关系。对,是不是在多的一端加外键引用一端一端主键,在多的一端,那在里边加外键引用一端一端组件,它的外键就IID引用它的主件啊,那这样的话就能反映一对多的关系了,怎么反应?假如你比如说大哥是说这个备注是属于市场幅度一的备注,那应该怎么对,这里边应该写个1001是吧?这个备注假如也是属于市场温度一的,那就什对1001啊,假如还有一个备注是属于啊,是属于我们的市场活动二的备注。
21:20
那这是什么?这是100。所以说他这里边儿全部存了备注的信息。然后他们也用市场公共性知道吧,哪这个一个备注属于哪个市场公作知道吧。这是我们说的,这那我们将来在查看某一个市场活动的时候,名义信息的时候,还得把它下边所有的备注都得查出来,知道吗。所以这是我们要说到这儿,那你比如说大家现在我想这让你让你这样写个写个三数句,我想让你查询市场活动一下边的所有的备注,你给我写个骚主义,你怎么写。
22:01
查询是一下所有的所有的备注,你应该怎么给我写。从哪个表里边抄对查备注是不是备注表格长知道吧,那查询他是哪一次呢。对,假如说我们写所有字段,是不是直接这样啊,这是查所有备注,我要查市场一下子备注Y根据哪个哪根据什么查。对,根据第三张表,根据这个什么外建有程查人查市场活动一下子备注,那市场活动一个ID是不是我已经有了,对有了还就什么1001这样就行了。啊,所以我们一会儿再查看市场活动明细的时候,你肯定是吧,要查询它下边备注,那查询下备注怎么查,根据市场活动的ID去查,查询他下果不,所以这是我们说的,这好这那你说老师这个地方怎么不进行连接查询了,这个地方因为我不需要连接查询,所以不需要,如果说需要连接查写一个招数据,既要把这个备注都查出来,还要把备注所属的市场活动的名字也查出来,是不是这个时候就需要连接查询了,连接查询那我这个不需要查询它,我只需要查备注信息,那这个时候不用连接查询,但是我得去根据外键去查,就这个意思。
23:34
好,这是我们关于这个市场活动明细的,你看这两张表,大家知道他们的关系就行了。那这两张表在我们这个数据库里边也是这样的,当然这是市场活动,这是备注这个表,你看这个备注表有个外键看吧,最重要的这个字段就是这个外键,就这个对艾的ID。所以这是我们说的这种好,这样的话,大家对这张表,对这两张表大家有一定的认识之后,下边我们就准备来设计一下,看如何做这个查看市场活动明细了,好小朋咱来做的话,还是设计一个流程图。
24:10
我们这个我们做一个功能,最重要的就是分析这个流程,剩下的语法都是很简单,下边我们来看查看市场的媒体,来查看市场活动明细啊。好,然后呢,我们这个地方把它双击打开,下边呢画出流程,所有的流程都是从客户端发起的,所以我们第一个环节还是客户端。那这客户端如何发起需求说的很明白了,譬如说用户在市场活动列表当中,他对哪一个市场活动感兴趣,他就点击那个市场活动名称的超级链接,所以我们这个地方大家记住了,用户点击,然后呢,市场活动名称它是个超级链接,超级链接啊,大家看他一点超级链接发生了什么事啊,进入对应的。
25:01
对,是不是跳转到明细页面了,对,跳转了明细页面,明细页面在哪呢?对,但是不是在外部音份里边呢?对,在外部infer里边,我们所有的这些页面在外部iner里边,对,就跳转到这个页面。就就这个页面跳转这个页面,这个页面在外部iner里边,然后从客户端能不能直接跳转过去,对不能受保护的是不是必须得经过CTRL的,对所以他一点超级链接应该先经过ctrler,向后台CTRL发一个请图,这个CTRL再跳整。但是大家再一分析,CTRL跳转页面好,跳转关键这个页面上所需要的这些基本信息,备注信息,你跳转过去是不是你得先查出来,查出来显示出来你才能跳转,你不能说我跳转过去这些数据还都没显示,用户看到是空页面是不是没意义啊,没意义,所以说大家是这样,应该这样,用户一点超级链接应该去向一个CTRL,这个CTRL就做两件事,第一件事把明细页面所需要的基本信息和备注信息先查出来,查出来之后呢,放到作用里边,然后再跳转到明细页面,明细页面通过作用域就把这些数据取出来就显示上面了。
26:18
这样用户就看见了,大家明白这个意思吧,就这样对,所以他一点超级链接应该向后台发一个,请先去向一个ctrler cler,把数据查出来再跳转啊,那这个cler,那显然还是做市场活动的,所以这个cler是不是还是市场活动cler,对还是市场中C,在市场活动controller controller上面加方法就行。在上面加一个方法,然后他去接收和处理这个请求,一点超级链接,向他发一个叫查看的请求,查看明细的请求,知道吧,那这个请求大家想想同步的还是异步的。同步到二一步导跳转,对他一点这个地方,一点这个地方大,看是不是跳转页面了,跳转页面,那跳转页面整个窗口都刷新了,全局刷新同步请求,诶你说老师不对啊,这边没刷,他俩不是一个,对他俩不是一个窗口,这是一个FM,它就是一个独立的窗口,所以只要独立的窗口指定的这个窗口变了,所以我们知道整个窗口都刷了,整个窗口上同步前同步请求,那同步请求需要提交什么参数,对,那提交什么参数,你看CTRL处理请求时需要同,那CTRL处理请求时候需要什么他你看他干什么事,他干什么事,我们刚才给大家分析了他干两件事,第一件事把数据查出来,查什么数据,查这一条市场活动的明细信息。
27:52
查明细,到市场活动表里边查市场活动那么多的记录,表里边那么多的记录,你要查哪一条记录,根据谁查?
28:01
对,根据市场活动主见去查,再一个查这一条市场活线所有的备注,到备注里边去查,备注边说,那么多的备注,你查哪一条市场活动下的备注?对,是不是也是根据市场活动ID去查,所以他查数据,不管查哪个数据都是根据ID去找,所以你这个查到D找,然后呢,第二件事,跳转页面是不是不需要这么参数,所以总的而言,后台CT出L了,只需要一个ID,你要你查呢,是哪一个市场活动的信明细进去,把那一条市场活动ID传过就行了。对把它传过去,所以我们这个地方把它传回去,那传回之后CTRL接触到请求之后呢,三个知道,第一个知道对有参数获取,参数怎么获取,通过行参获取啊。然后呢,通过行单获取,那获取到之后只有一个参数不用封装了,所以他的第一个知道断了第一个职责完成了下边第二个制作,第二个处理业务,处理业务就处理数据,处理什么数据,对就对我们这个地方来讲,是不是就查他两个数据啊,查市场活动的基本信息,以及查市场活动下的备注信息,那一个一个查办,先查基本信息,那查市场活动的基本信息是不是他不能直接查,他得掉错二字。
29:18
那查市长活度的基本信息,是不是得叫市长活度费,所以我们这叫市长活度,这我来一个叫activity activity知道呢,咋然后呢,我们这个地方来在市场中的surface里边加一个方。这个方法是干什么?就是根据ID去查询这一条市场规模最详细的信息了,所以我们这个地方来加一个方法了,这个方法来一个叫query查询的方法,然后呢叫艾克pay,那这个地方查的时候跟我们以前查的都不一样,为什么?因为这个查的时候,这方查这一条市场活动这个表里边的应该是详细的详细信息,那就是最详细的信息了,那就是所有的字段都得查出来,而且相关的字段都得查名字。
30:05
给用户看了嘛,所以这个,所以这个方法,像这一类方法,一般来讲,我们都会给他加一个叫for detail,叫查看最详细的信息,Detail是明细详细的意思,详情的意思叫for detail。只要是for,基本基本上就是查这个表里边所有字段,而且相关字段连接查询查名字好,然后下边它这个方法那加一个小括号,小括号里边有参数,这个参数就个什么ID对。然后呢,这个service就可以访问数据库,根据ID查询这一条市场活动最详细的信息了,那它不能直接访问数它的调map,那调map查看市场活动,调市场活动的map activity map,这好,然后呢,Activity map,然后呢,我在map里边也得加这个方法,这个方法干什么?根据ID查询市场活动的明细信息,然后呢,这个方法我就直接起起名字了,叫select for detail by ID在这边传了一个ID,然后呢,这个map就可以通过买八访问数据库来执行S,这个S现在大家我们写到这儿,这个搜索语句你就大概能够想象一下是个什么样的搜索语句。
31:27
的查询市场活动的明细信息,就这样,那查询完了之后,把查询的结果往回发,那返回值是个什么类型的一个。对,根据ID去查ID,由于不能重复,如果能查出来是不是一定只有一条记录,那一条记录封装一个什么实体类对象,那就那只有一个实体对象,它不可能查出来多个对方的例子的,所以它一定只有一一个,那就是实体类对象。知道吗?把这一条记录最详细的,然后反复装实际对象,你要实对象对应数据库里边标志标到什么,就是记录啊,知道吗?好,那把这个实际对象继续往外返,返回给ctler艾知道吧,这样cler就达到这一条市场活动最详细的信息了,那这最详细的信息,我们说这些数据查出来了,下边是不是还有这条市场环境下的备注信息?
32:25
所以还得查备注,那查备注他也不能直接调,他得调service,调service,调谁的service。对调备注的service,我们说后台的map service和实体类的代码操作,一张表对应一个实体类,对应一个map接口,对应个映射文件,对应一个service词,我们要查询备注表了,那得调备注的service词,所以我这个地方创建一个市场活动备注的service词activity remark啊,Remark是备注的1SERVICE,一会儿我们还得创建这么一个service,然后在这个service里边加一个方法,这个方法是干什么?根据市场活动的ID去查询这一条市场活动下所有备注的明细信息,所以让这个CL调过来。
33:15
然后呢,我们这个地方调过来,它里边加一个方法,这个方法这个que来一个叫activ remark查备注,那查备注,这些备注也是给用户看的,那也是最详细的信息都得查出来,那这个信息那也是for给Q把备注表里边所有字段都得查出来,而且相关的字段查名字。然后呢,BY根据谁长,根据市场波动的ID by activity ID,诶你说老师你这个咋不buy ID了,因为我现在站在备注的角度上来讲。根据ID去找,你要如果是这个时候不写active,你只要写ID,那这个他是什么用户一看好像是根据备注的ID去找。那我要根据市场活动的ID找,那我就叫市场活动ID知道吧,所以大家我们说这些什么,你看你设计方法的时候,你站谁的角度上来说。
34:07
你要是说我是根据备注的I,那就是这个状,就是查询备注给你拜ID就行了,我根据市场活动ID,那就拜市场活动ID。角度站的角度不一样,所以那还这个方法,小朋友在这边传一个参数,这个参数这个IKID这样就行了,这样的话,当我们这个这个方法就设计好了,那这个service它就可以访问数据库,根据市场公ID查询该市场问下所有的备注了,那它不能直接访问数据库,它得调map,所以这个地方来调过来map。那调哪个map,调市场活度备注的map,那市场活备注嘛,来一个I,然后呢叫remark map,然后呢,我们这个地方拉过来一个这个地方,然后呢,这个地方把它拖大一点,然后呢在这里边加一个方法,这一个方法也是根据市场活动ID查询该市场容量所有的备注,查询c selectiv,然后呢,这个是mark by,这个for detail by activity activityiv啊activity activityiv ID在这成了一个activity activityiv ID讲了。
35:16
然后呢,大家在这个麦里边,他就可以通过买巴蒂S去访问数据库,执行骚数据了,那这个骚扰据现在你就能够大概想象一下这个操数据是什么样子的啊执行操数据,然后呢,这个地方是查询什么市场活动备度。那这个什么执行完之后,把执行的结果往往说这个返回值类型,返回什么类型的,对,这是个备注的例思,因为一个市场温度下可以有多个备注,每一个备注分成一个备注的设计对象,多个备注list,然后把这个list的继续往外发,把list继续往放,然后呢,这个地方有一个什么list放下。
36:03
好,这样的话大看我们CTRLL存到第二个字就完成了处理业务,把数据都准备好了,一会儿就准备显示了啊,这个地方有同学就有疑问了是吧?诶老师一个CTRL怎么能掉两个,Sorry次方。可以不对,可以CTRL让我说就是掉分组。他调几个都无所谓,而且不一定非要调它的座子,还是调别的别的表对应的座子,只要他需要了,我们代码分层的原理,就这CTRL就是掉座位,调几个都无所谓。好service掉白粉啊好,这是我们这样啊,这样这是这样,还有再看那你说分多个surface是不是不在一个事物里边了,这我跟在在咱们班说过吗。查询的时候是无所谓了,对查询的如果是做什么写数据,那必须放在一个字位字知道吧,好,这是我们说到这好第二个职责完成了,那什么数据都准备好了,下边怎么往回反馈,往做出响应了,那做出响应的话,这个响应信息是个什么类型的一个信息。
37:14
啊对,那是个什么类型的,从格式上来讲,你看前面发请求同步请求,浏览器发的响应信息给到浏览器,浏览器能解入,是不是一定是个网页网页网页这个CTRLL能不能直接访问网页。不能,因为他不擅长访问网页,你得拼一个网页才行,那谁擅长访问网页,JSP知,所以他要访问网页,他要跳转到JSP,然后让JSP运行,运行了一个网页,然后呢再返回就行了,所以它要跳转网页了,那跳转网页之前是不是把这个数据得先传给网页,那传的话怎么传,对request通过作文预传,所以那我们说跳转之前先把数据保存到作用域中,保存到筷啊,那为什么保存request中,我们前面其实给大家分析过了,你要知道那四个作用域应用的场景,对这是我这那保存完了之后,下边跳转JSP,跳转JSP下边有一个环节,这个JSP我就用这么一个环节来代替了,那这个JSP就叫de de.jsv。
38:24
就是这个网页,然后呢,把这个地方跳转过来,这个其实这个跳转我们说有两种跳转,一个请求转换,一个重定向是吧,这个是请求转化是重电项,对转化其实就是请求转化,其实就是请求转化知道吧,那请求转化,那这个可这个JP接入到转过的请求,他怎么办呢。预对他那他什么,他要从属相从作用里边把数据取出来,那么从作文玉中啊获取数据,怎么从作文中获取数据了,GP从作文时获取数据导过去了,对E表达式对获取完了之后是吧,还要显示出来,我们把它渲染页面,其实EL表格式就具有渲染的功能,取出来就直接显示到页面上,那如果有些list似是不是还得借助GTL去变历啊去变历这样,总之我们把这过程叫渲染页面,那渲染页面的页面数据都显示完了,显示完了之后它就运行完了,然后呢,把这个网页往回返就行了,这数据都显示出来了,然后呢,这个地方往回返,然后呢,这个地方我们都响应响应知道吧。
39:40
那这个响应信息,大家看看是个什么样的信息,刚才我们分析了。浏览器发送请求返回给浏览器,浏览器能解析的数据,对网页是个HTML的一个网页,返回给网页返回前的一个网页,知道吧,那前台这个网页,我们说前台网浏览器拿到这个网页之后,对他最擅长的是就是限制网页了,对那他浏览器就在工作区那个窗口当中,直接显示这个市场活动明细,浏览器就在工作区,为什么在工作区,因为指定的就在工作区中显示的,在工作区中来显示市场活动的市场活动的明细页面,这样用户就看到这样页面了。
40:29
他就看到民营信息了,看到民营信息,那我们这个就做完了,做完之后后边还可以发表意见,我们到后边再做它发表意见,完了之后还以修改意见,删除意见。所以这是我们说到这,所以后边我们接下来中应该一两次课,我们都是来在这个页面上来做了,这个页面做完我们第一个市场工作应该就做完了。第一个做完了,后边这些我就加快了是吧,后边这些我就我就跳着做了吧,重复的功能我就不做了是吧,我只做那些以前没做过的,几乎就没做过的功能。
41:05
啊,所以大家我们这个地方呢,我们这个你课下有时间,包括休息的时候,当认为应该是周是吧,马上是周末了是吧,休息的时候你要有特别着急的事儿,你处理一下,没有着急事你们啥做就行了啊这些你别等我到最后我就跳着做了,嗯,对好,这样的话呢,我们这个关于查看市场上的明细,这个流程我们就设计好了,知道吧,那然后呢,那这个代码的话呢,我们还是从底层开始写,先写写map知吧。这然后呢,在市场活动map里边加一个方法,这个方法根据ID来查询市场活动的明细信息,所以下边我们来这个直接写这个方法了,这些方法都是设计好的,我们说然后呢,下边我们直接写,然后呢在市场活动办法在这里边加一个方法。这个方法来加一个这一值访问值,这个地方来一个仿值,来看这是什么类型的,对这个实体类对象,然后呢,这个方法名来一个select activity activity,然后呢,For by ID,根据ID去查询某一条市场中的这个明细信息,你等会。
42:19
然后呢,这个地方ID,然后呢,我给他一个注释,这个地方一个,然后呢,这个注释就是根据ID来查询市场活动的明细信息,知道吧。好,然后呢,这个方法就定义好了,那方法定义好了,那下边我们来写那词写词首句了,那在这边写四首句,这个地方来一个,哎,这个东西来一个搜索句,然后他查询的搜索句来一个select,然后呢,接着来ID要和方法名一样,那后把这方法名拷贝过来,我说这些方法名也都是设计好的知参数查尔米的态,根据ID去查,那ID是个字符块类型的。然后结果result map,因为我们要访问的是实体的对象,所以我们这个地方来访问一个map map吧,是吧,然后呢,这个地方大家这样的话,这个标签就定义好了,标签定义好了下面写搜句查询到所句这个是select,知道吗?然后from从哪个表里边查,从市场活动表里边查,因为查询市场幅的信。
43:25
那查询哪些字段,你看前台需要哪些字段,前台需要哪些字段,那根据我们的需求,他要查看明细信息,那肯定所有字段他都想知道。因为查询最详细的信息吧,所以我们说所有阶段所就所有字段都已经操作,而且大家像这个时候所有者,创建者,修改者这些我们说都是外界。然后引用用户表的主件,像这些字段,数据库里边,字段里边存的是ID,那我们要让用户看应该存名字,应该查名字,那名字在哪个标准存着,在用户表里边存在,对,所以我们这像这些字段查的时候一定是连接查询。
44:06
连接用户表去查,所以那这个地方呢,我们说根据我们的分析,我们这个搜数据就应该查询市场活动这个表格所有字段,而且相关联的字段关联查询查名字。所以那我就直接写了啊,那写的话,我一会儿这个不可避免或进行连接查询,所以给他起个别名,连接查询能起别名,对,然后呢,我就叫做A了,那我这个地方,因为我取到这个单词到首字母,这个表明这个单词的首字母知道吧,然后呢,在这边查所有字段吗?那看这个市场活动这个表格有哪些字段呢。对,那看到S段,你看来对照这个什么表去查去,那就查吧,设计表来看这个S段,首先一个ID,那ID那查出来吧,这个地方ID不是外键,那就直接查就行了,ID还有哪些字段,看看所有者,所有者是不是个外键,外键我们说查要查询它里边存的是所有者的ID,我们要查所有者的名字,所有者名字在用户表格呢。
45:07
那我们要查询,要查用户表里那个名字那个字段,那这个时候要进行连接查询连接查询内连接还是外连接。对内连接为什么内链接所有者不能为空?我你怎么知道所有者不能创建的时候,那个所有者那字段带星号不能为空,所以它一定不为空,那外键不会为空,连接查询内连接外连接查询结果一样,优先使用内连接,所以我们这个内连接叫来我们这个U这边起个边名叫UE连接条件啊叫a.o的这个字段等于Ue.ID那外键等于这个主键吗?然后连上用用户这个表了,那就可以用用户表这个表里所有字段了,那我们要查询U1这个表里边的名字叫内容,那查出来之后放到哪个字段里边呢?对O的字段就这样子。
46:02
好,这是我们这个字段的,找了下边这个市场活动的名字,它不是外件,直接成A的内,然后呢,继续来再看这个开始日期,那它不是外键,直接成A点开始日期,还有一个结束日期,N的对口来一个a.N的对口,知道吧,然后呢,这个地方再往里往下看。还有cos的成本,来这个地方来个A点成本,还有继续来A点描述,叫A点描述,这些都不是外径,直接查就行了,还有什么你看啊,还有这个可谓的碳创建时间,那就直接查A点创建时间,还有什么字段大家可以看啊,还有科别的吧。我们说是创建者,他保存的是创建者的ID,我们要查要查询创建者的名字,那他这个外键引用用户表的主件。那我要查询创建者名字,连接查询连接用户那个表,那连接的时候内连接还是外连接,对内连接创建者不得为空,一般我们创建的时候都是当前用户,所以不可为空,连接表还是连接用户这个表,U侧数表,起个别名U2和表,然后呢,连接条件啊叫A点,可谓的Y轴段等于U2.id。
47:20
那这个地方去查叫u2.name放在哪个字段里边as,可这个字段知道吗?然后呢,继续大看我下边这些字段,然后呢,这个地方还有哪些字段,还有修改时间,那这个不是外键,直接长A点修改时间,还有一个这个地方对吧,还有一个修改者,修改者也是个外键引用用户表的组件。那战者存的是用修改者的ID,我们要查修改者的名字,连接查询连接用户的者内连接外连接。对外连接,因为这个字段可能为空,那即使它为空,只要符合我的查询条件,我也要把这条记录查出来,所以这个时候有外连接主表在什么左边,左外连接这个地方个叫left交连接用户这个表,U3这个表连接条件啊叫A角IY等于U三角ID,然后我们这个地方来个U三角内U3NAME,然后呢,As as上放到as y这个字段,这样的话呢,我们就把市场活动这个表格所有字段都查出来了,而且相关联字段连接查询查的名字下边查询条件Y根据什么去查。
48:38
ID对,根据谁的ID对市场活动的id.ID然后呢,这个地方值值,那就传来那个参数,我们就叫ID了,这样的话,当然我们这个骚扰义就行了。查看就查询市场活动的名义信息,Serve预写了map层就写完了,Map层写完了,下边我们就要写service层了,在市场活动的service加一个方法,根据ID查询市场幅度的名气经济。所以在这里边。
49:07
拿这个放,放个这,来个艾特。实体类对象activity实体类对象方法名我就直接写了,叫query activity for8D在这找传送参数,这个参数是个ID。知道吧,方法定好了,实践类里边也得加这个方法,那在这边加这个方法吧,别记住了。那按out in employment这样就行了。好,那service层放的实现肯定调map,那调map我就直接调过来activity map调哪一个方法,就是调刚才咱们刚刚写那个方法,Select activity for by ID,然后呢,把这个ID直接成功了。这样的话,那我们这个service就行了,看了你只要设计好流程。那这个行了,这个我没有。
我来说两句