00:00
我们还差个什么功能啊,是不是还差最后的一个,嗯,查看。看这个吧,我把这个PPT。在吗?喂?好,我们来看我们的最后一个功能叫查看交易记录,就是说我在admin这个页面啊,输入这样的一个用户信息,点sum,我可以在另外一个页面怎么的把这个用户名,用户交易的时间,以及用户的交易项单价和数量都显示出来。就是就是这么一个要求,我们来分析一下这个怎么写好。看我首先的话呢。
01:00
我要输入一个用户名。好了,我这个用户名输完之后的话呢,我在那个里边能干什么。大家想想,无非就是在service里边干一件事呗,然后呢,我需要在这块把这个信息都显示出来,这些信息是个什么东西啊?这个信息是什么东西啊,这些信息应该是一个。是不是大家看我可以由什么呀,我可以由这个汤姆获取到这个优吧,啊,我首先我由由name我得到。对应的U的对象可以得到吧,啊这个对象吗?然后的话,那个U的我可以得到。一个什么呀,U得里边我一个优德是不是有有多个交易呀,我可以得到。Trade的集合是这样吗?叫tree,看我们的数据库。
02:04
打开bookstore。Table Yoga。打开看,我们先看user的user name可以得到U的ID,然后的话呢,我可以得到我有哪些个trade。T,你看这个T里边是不是有个new ID啊,然后的话呢,我这一个trade,我是不是还有多个t item啊。你看trade里边这个trade item里边是不是是不是有个trade ID啊,哎,整个这个关联关系的话就可以了,所以说应该是由由name得到U,然后得到一个,嗯。子集合,然后再得。在得到每一个T的item的集合,然后就显示就可以了吧,这就是我们整个的流程,那这一块的话呢,我们就需要用到我们这个食品类的设计了。
03:03
我们看怎么设计的呢?啊,是这样设计的啊,我有一个U的,我可以得到U啊trade的一个集合,Trade的集合我可以得到T的item,这T的item里面是不是还有book呀,我显示中显示的东西它就全有了。所以说这就是我们整个这个实体类之间的一个依赖关系,这个依赖关系特别重要,在一个复杂的开发流程里面,我们就是靠这些依赖关系。来完成的最终的这个业务操作,所以说我们在这块的话,这个流程呢,给大家来说一下。大家看一看应该如何来写啊?首先第一步我需要新建一个啊,比方说叫这个T吧t.JXP,然后呢,该页面中有一个表单。
04:08
表单。表单中只有一个字段。叫什么呢?叫user name,然后提交。我提提交到OK,我是不上获获取一个user,所以说我们提交到user solid。好了,什么方法的话,我就不写了啊,提交好了,这完了之后的话呢,我们看我们在这个so方法里边,在sol中。啊,干什么呢?啊,干这样一件事,我说呀,获取u name请求参数的值必须的。
05:01
好了,第二步呢,调用user service get user,注意是get优哈,根据user name来获取优的对象,获取U的对象,但是我们要求这个不一样啊,我们要求获取这个优得对象,这个优得对象里面的trade是。种会好的。然后呢,Trade里边的trade item是都配好的,这个不一样,怎么不一样呢,来看它。看这个,我们找到我们的优等。我这个U里边是不是有个推呀啊,其中我要求这个是被装配好的。要求。这个是。
06:02
他是啊,被被。装配好的,就是说你得呀,你得在我们这个service里边,不但拿这个去获取优,获取完优之后的话呢,优我是不是可以有可以有UID啊,我还需要把这个锤子搞好,然后呢,而且而且每每一个。Trade的对象的什么呢?每一个trade的对象它有一个什么呀?是不是items这个也被转为好。他也被。装配好他是这样。好了,这是我们的要求。那具体怎么做呢,具体。我们再看具体的话呢,应该这么写,第一个就是说,呃,我首先啊。
07:03
或许有的理想。呃,这么说吧。调用UDA的。方法获取U的对象,好了,第二个呢,我要调用的。DAO的方法获取。的的集合。第三再调用。Trade item DAO的方法获取每一个每一个。中的。
08:01
吹的X的集合,并把其。装配。为trade的属性吧。属性,那这个呢,我需要把其。装配为U德尔的属性,哎,这块的话呢,就算写完好了,这个完事以后。干什么呀,把U的对象。放入gone。Request中,然后。转发页面到我得显示啊,那这个是锤子板。trade.jp这个的话呢,我们这样写啊,Web INF for目录下的,Page目录下的,而这个呢,我写成user。
09:04
更录下的OK,到这个页面好了,到这个页面之后呢。到这个医院之后呢。获取获取什么,获取优吧,然后呢便利。刘德刚。集合吧,这然后呢,便利。的对吧,集合吧,这就完了,就这么改。哎,这一块的话呢,会有很强烈的RM的思想在里面,就是说回头我们要写harmle的时候你就知道了,是吧?Harmle就是我获取一个username,它会自动的把和其关联的trade以及Twitter都装备好,所以说一行代码就可以搞定,当前呢,我们没有have ne,我们只能是自己啊,先获取优点,然后的话呢,再去获取这个T,然后再去获取每一个t item一个一个往里边装,但是整个这个步骤呢,也不是特别的复杂。
10:24
哎,那这块我们需要用到这个实体的类设计,当然也需要用到我们对前边的这个,呃。什么图啊,这个图。Could see。女时用到它,我们看一下。看这个吧,你看我获取U的U的啊,U的ID,我拿这个UID的话呢,我可以获取一个推的集合,为什么呀,就这么个U待ID啊,我拿每一个trade,我还可以获取一个trade item集合吧,导致着整个我有一个U就可以了吧,我把这个U盾传到页面上。
11:11
然后呢,诶我从优德里边获取的是什么呢?获取的是看获取的是这个内,然后呢,我遍利优的trade。Trade得到啊,时间,然后呢,我在便利trade的每一个trade item,得到书名,单价和数量,数据和单价应该是谁呀?这应该是book吧,二这个呢,是空呀,这些我们都已经写好,那大家需要做的是把这个流程搞清楚,自己尝试着来写一下,发给大家,大家看一下。首先呢,我们要在这个根目录下建一个user的JSP。
12:06
然后呢,这个页面里面有个什么呀,有一个缝。去的是问号,Method等于bad。Username。Name username。然后写一个sum time sum value。三保存写完好,这个写完之后的话呢。
13:01
我们要。去写这样的一个。溜到下一步。第一个字母是小写。子,请求。因为我这个so啊,目前怎么样,它只应答一个请求,所以说我可以省点事,把这个可以先不写,写个method表单,一般都使用post请求,所以说这个改过来了,然后呢,这个写法跟这个就一样一样的了。
14:02
呃,CTRLC。我来。当然我们需要一个一个呢哈,这个代码的话呢,不完全都是这个里边的第一个获取u name。啊,然后呢,我拿这个username去搞user service。好了,我想获取一个优等于user service.get user,我们以前是不是有一个呀?但以前这个仅限于获取那个优的对象本身吧,我们不需要去装备属性。
15:07
同学说,老师这两个对象,这两个方法能合在一起吗?这两个方法能合一起吗?能合一起,但是我们不建议合一起,为什么呀?如果你合一起的话,我给你写上啊合一起,你合一起的话,是不是就意味着我即便是简单获取一个U的话,它也会把那些跟U关联的trade以及跟trade关联的trade的怎都组装过来啊,这个时候会。造成内存的极大的浪费,懂我的意思吧,我可能就需要,我实际上我获取优条的目的是什么呀?以前我想知道那个矿开地吧,但是现在的话,我弄那个U点,你把那个属性都给我整了,那太太浪费资源了,所以说在hale里边有一个著名的一个这个嗯,策略叫延迟加载,我不需要的话,我不需要下载这些内容的话,我就不要。
16:11
我说比方说呃,希望大家上这个学校去报名。呃,仅需要你过来填个表就可以了,不需要你把你的对象也带过来。你把你对象带过来多不安全呢,是吧啊,甚至把你的全家的什么什么这个姑姑伯伯,什么这个舅舅,什么阿姨都带过来,用不着。就是一个填一张表就可以了,这就一样,所以说这个的话呢,还还留着我们再写一个说public来get这个呢,那我说with。Trees就告诉你啊,是带这个集合的,我先写个return now写它回来再写这个方法哈。
17:05
点get,对,当然写的不对哈,User name得写。You name写完好了,写完之后的话呢,这就完了哈,下边有点搞定了,搞定之后呢,在这儿呢,搞定之后就说一定要把这个右字放里边吗?不一定吧,可能是空吧,告诉你如果是空的话呀,就U的等于空,那你就直接response.send request啊request.get request。加加什么呢,我直接去一这样这样可以出串对看,否则我才放你吧。
18:09
User user好了,放好之后呢,转到这个页面。这个时我拆转request.get request dispat,根目录下mapb in for下边的pages下边的点J s.OKOK,大家看啊,我这部没写,但你应该能想得到,以后呢,我们讲的东西会越来越多,你不要说,哎,老师这个东西没讲我就不会,这是不对的。那是上小学的时候是吧,比方我们上高中的时候,我们特别爽一份就是老师,老师留了个作业,发现这东西没学过,于是特别爽,这个作业不用写了。现在不是。比方说开发的时候,你说客户没说这个需求你没写,那是你的问题,那是你没从客户那块把这个问题发来的问题。
19:07
客户没说你写出来了,OK,那是正常的。我再说一遍啊,老板、领导、客户没要求的,但是你想到了,你给人写出来了,而且他还觉得特别爽,这是个本事。那这个行了X搞定吧。看具体第一个啊,我需要一个UDAO。我确实是需要这个U的对象啊。Get user好了,If如果怎么的,如果user是空的话就。别扯了啊,每天闹。这块的话呢,一个UR好了,如果不是空意味着什么呀,意味着我这边我是不是有那个UID呀,那我就获取一个string的UID。
20:13
等于U的点点get u.get u ID好了,然后我需要trade。Trade的DA等于new trade的DAOOK,我这块的话呢,应该会得到它的集合。In。S。Trade等于trade DAo.get trade是不是有啊,刚方我们以前写过了,哎,这个时候用搞到control shift o,但是问题是这个trade trade里边还有一个trade item吧,还没有进行初始化,于是呢,再进行初始化做一个循环。
21:21
只能是循环哈,脆的脆脆的。嗯,这个人的记录啊,不应该是空。王康是不是空?过来,你看CT。哦,我直接这样获取的,如果要是空的话呢,应该是一个空集合,所以说你这块为什么我们要看它是不是空啊,如果是空的话,这块是不是可能会有控制异常的问题啊,可能会有这个问题,所以说的话呢,你要判断一下的话是最保险的。Trees不等于now。
22:03
上上就是这么写,肯定不犯毛病。好了,然后呢,我需要把每一个trade的那个trade item给搞出来,于是再来一个private trade item doo。等于new trade it DA。好,我会得到一个一个的推ID吧,等于退的点get,退ID set t的item。等于。Trade item do.get大家看是不是连上了呀,然后我把这个负为trade的set it附上了吧,这个再完事,我再把tree复为优点的tree OK吧,这个就返回了,看你回这个U是不是很强啊,我有脆的,我还有。
23:13
Trade item好了,这个搞定之后的话呢,就用这个呀,就返回了,于是我们看这个tree。CTRLC拿过来。A BFA pages。先搞一个。AC。好,然后的话呢,这里边诶,我们来进行一个便利。第二,第二,首先我想知道是谁。是谁呀?点name吧,怎么来的,是不是有个里边是不是有个user name OK来了,然后啊,我说我交易的记录数。
24:14
边边。CD。For each。谁呢?应该是U的的trade吧,带来or trade,那这个trade的话,我就需要告诉你啊,基本信息啥样的呢,我来看看我们这个结果啊,说take time,告诉你一个时间。对的,Time。退点退看不不记得是不是这样写看看。
25:05
宝们。吹,吹开没问题。好了,这个写完之后的话呢,再写两个B。好,再来里边是不是一个一个的构项呀,够像在c for。脆里边会有什么东西,大家看家看,我这个是脆吧,诶我这个trade里边又有一个it咋写呀。脆点儿item。我得看看是不是这么写哈,就it吧,啊这么写。It,然后再来一个wall it里边放的是什么呢?放的是一个一个推item吧,Trade item OK,差一个事没写完,你看这个trade item我能搞个什么呀?我是不是能搞个quant呀?这个book是不是还没有进行关联的呀?看见了吧?垂说刚才这个没写完哈,再回到我的这个service字里面来。
26:28
User service,诶还有一个事没写完,就是说我这个trade item呢是搞定了,但是我这个trade item里边的里边什么没搞定啊,里边的book没有搞定if。有什么呢?说item不等于now for,循环还没循环。的item item这个放里边吧。然后是item.set book,我需要个book吧,OK,我还需要一个。
27:12
等于new book do,我们在刚才对那个图讲的时候的话,我们讲到了啊比说忘写了点get book ID item.get book ID关联上再回来。OK,书名单价跟数量书名。item.book点开是这写吧,书名单价。item.price最后一个是quantem.qua写完好了,这是什么?这是我其中的一个。
28:05
一个就是一个这个一次交易的搞定了好了,那多次交易的怎么写呢?在这个外边,哎,我们再写。第二。边好了,打一个HR打条线,先看效果。Noodles。来,汤姆。大家看哥哥汤姆吧,就是我买的书。坏了啊,是哈,三本书没问题,这这个时间应该啥也没买。哎,汤姆买的信息就在这儿呢,当然了,我这个的话呢,没有进行很好的格式化,我可以再格式化一下就可以了,但是这个基本信息是没问题的,汤姆,但我这个时间呢有点问题,我们希望最好能按照这个时间排序吧。
29:12
比方说应该是升还是降学?降序就是后买的在前头,先买的在后头,你可以考虑一下如何去写。那我希望他能够排序。但是基本的这个结果的话呢,已经出来了,我们特别看到我这个user service,我来设置这个关联关系,先获取的是一个U,然后为U点去装配其锤子属性,然后为每一个锤子去装配trade的item属性,Trade item集合属性哈,然后再为每一个trade item去装配这个book,我只有这块,我这个关联好了的话,我这块我是不是才会这么潇洒的一个一个去便利,一个一个去关联呢?
30:00
哎,这就是整个的一个效果,那你这块的话呢,写一个table,整个这个样子就特别好了,但是还没完,你考虑一下我如何让他能够降排列。我如何让他能够排练?思考一下这个问题。我们有几种方式可以让它降去排列的一种方式肯定是通过奥B吧,查的时候我直接排一下。那怎么排,排哪个里边啊,可以自己思考一下,然后呢,还有一个问题,我最终的话呢,我这块是一个set,那我set是不是无序的呀,我如何保证它有这个顺序呢。这个都需要同学们下边来进行解决,大家先把这个啊,整个这个关系的话呢,先搞一下,然后第一个问题把这个页面变得漂亮一点,格式化一下,第二个问题使它能够按时间进行降序排列,OK,看一下刚才这个。
31:10
我们给大家说的这个任务来完成一下,首先呢,给它格式化一下,这个格式化是不能格式化的啊,整个加一个大table。这个加上一个H4吧。然后整个加上一个大铁。第二。T。这叫什么呀?这叫嗯,Take time,那么这个take time有多少个呢?我们取决于有多少个。取决于就不要了啊,有多少个,我们取决于什么呀,我们是不是取决于有多少行啊,所以说这个需要往上拿一下。
32:06
上上上上下一个OK,这个放到TR里面去。转一下。一个吧。好了,这也不要了。这完了之后的话呢,别又是个什么呢,可能会有就一个一个t time,然后的话呢,底下可能会有这个多个tem,这是三个,所以说这块我们可以写一个。Co等于三,然后嗯。这是一个TR,这是一个TR,这里边的话呢,可能还会有很多的TR写吧。TR。嗯嗯。
33:03
TD。这个TD需要怎么写啊?这是一个CTRLXCRV。X。座位。X。准备一起玩。好,先看样子哈。Helen。这这太丑了是吧,嗯,这个,然后一个一个的这个time回来。这一个包。嗯。加一个。Cell拍十。在我看下这个是室内的,就是零是吧,零保存回头。
34:05
对看大家看这是什么呀,我们希望的话呢,这是一这是一个吧,底底下这是另外一组吧,中间这隔一下是不就好了是吧,中间再隔一下,那中间咋隔一下呀。你看这属于是一个吧,这是它的一项,然后的话呢,这个是一个,这是一项,这又是一个8月8号这个没有啊,这又是一个,这里边就是一些项吧,哎,我们希望中间这个要是能隔开就好了,那咋隔开呀。嗯。而且的话呢,这块我们最好是再来写上一个,嗯。TR。TD中间隔开一个,隔开一个,我们写个它。第二。CD。
35:01
Sales by3。关闭SP对看。行吧,基本上,但是还是很丑啊,这是一个,那最好是怎么的,最好是这块没有没有这玩意儿吧,没有这玩意儿,如果要是没有这个的话,那这就应该是独立的一个table吧,是这么写吧,是吧,如果要中间没有这个的话呢,就是一个独立的table,所以说我们再给他整一下,把这个table拿里边来。那里边儿来,这个K方也一样,拿里边去。他就不要了,只能往后创个歌。嗯。有。那这样穿完之后的话,它都不对齐是吧。
36:00
咋样对齐呀?这个table都是行的是吧,里边是一个一个的table,但是table最好是对齐呀。这个行了,那里边一个一个的,你这块最好外边再来,再来一个大table就对齐了。写吧。这当然你你也可以用CSS哈,放这中间这里不用这个。再往后串一个格,然后呢说对齐TR。CTRLX。放这整个是一个TD就可以了。想想啊,TD table tr跟TR应该放里边。就这样写吧,TD。
37:00
TDCTRLX放在这这个放前面去。对啊,听错了。行吧,这就比较整齐了啊,基本上就是这样,大家这个之间的话呢,你还可以再加个边儿啥的。比方说这里边儿,我再加个边。行了,哎,这就是我们一次一次的这个记录比较清楚哈,但是这个格式化完成之后的话呢,还差个什么呀,是不是还差个这个时间呢?你看这是零八年,就是8月6号的,8月6号的,12月20号的,11月11月1号的,这个没什么顺序,诶这个顺序可以怎么解决,我们讲了有两种方式,一种方式是all by,它用什么方式啊。拿过来之后的话,我们还是不是还可以用那个吹赛的去排呀,那也可以,那我们现在的话用第一种方式,第一种方式应该是在DA里边do trade的deal在查的时候看一看吧,这个ID是不是可以order by一下,Order by退time降序。
38:23
EOK,那这块这个降距之后的话呢,我们希望它返回的是一个set,那就link哈set吧。因为你要保证以前的那个顺序命的话,去在ctl。OK,这。8月5号。12月20号,11月1号,这应该是这样去吧,这个顺序就OK了吧,那关于这个显示,我们要跟大家讲的就是,诶我们这块。
39:07
在这个节点关系。你只有把这个集成关系理解了,你才能够把这个搞定,我们再说一下啊,应该是我有username可以搞到user ID。我有I,我有UID,我可以搞到UID所对应的T的集合,我有每一个trade ID,我可以搞到每一个trade所对应的t item的集合,我trade item,我是不是有book ID啊,我可以搞找到这个book,整个这个病例就出来了,你看因ID可以显示用户名,然后的话呢,我可以显示交易时间,然后我可以显示每一次交易里边的trade item,我还可以显示每一个trade item里边有的。Title跟price,这就是整个的关联关系。关联关系在开发的时候非常重要,在哈的时候的话呢,我们还会详细来解释一对多,多对一,一对一,多对多这样的关联关系。
我来说两句