00:01
好,那么我把这个刚刚我们已经分析完了啊,我把这个页面啊,我把它纳入进来啊,CSS frame image JS index log,就这几个。拷贝。拷贝到我们当前的这个web里面去,打开它,根据V粘进来。好,这样我就全部把它粘进来了,这个JSP把它删掉吧,不需要。我们打开试试看。点一下它看能不能访问,哎,也是没问题的,点击登录也是可以的吧,啊说明这个静态页面的这个CSS啊,这这些都是正常的行。下面好,我们继续啊,我们下面一步我们把数据库把它建起来,那这个数据库呢,我已经提前给他建好了。好在这个地方。K歌在这里。然后这里面有这么几张表。我们有这么几张表。第一张表。叫user basic表。
01:00
这是用户的基本信息表。啊,这个当中有账号。有昵称。有登录的密码以及他的头像。然后以他的详情表,但是详情表我什么信息都没放啊,咱们写代码反正用不到。然后呢,我们有日志表,Topic日志表。这是一,这是一篇日志。标题内容日志,日志的这个时间,以及谁谁写的日志是吧,这边一个日志就是这样的。再来。我们还有reply reply是不是回复?针对某一篇日志所做的回复,当前这篇日志他的ID号是三号,ID是自制列。我们在进行数据库表设计的时候,一般情况下,现在我们一张表的主键的设计原则是和业务无关。我们使用自造列。不要让主件和业务有关联。
02:00
一旦和业务有关联,那么就会发生一些风险,什么风险呢?现在你认为这个这个键它是唯一的,但是你不排除将来这个键它就不能保证唯一了。我举个举个例子啊,举个不太恰当的例子,比如说咱们学校里面的学员的档案管理系统。假设我们以学号作为主键,这是没有问题的,学号嘛,当然不重复了是吧?所以我们用学号作为主键。所以我们这个系统跑的好好的,但是可能在不久的将来,我们这两个学校进行合并,那么也意味着这两个学校的学生的档案要进行合并,能听懂吗?那这个时候是不是两个学校的学号都有可能会出现一号呀?那不就出问题了吗?明白我的意思吗?啊,所以呢,我们在建立组件的时候,我们有一个原则,就是尽量的不要和业务逻辑有产生关系。我们的组件应该是没有实际意义的,没有实际业务意义的这么一这么一些列。那我们最好的选择就是自增列。
03:01
好,这是再往下是我们的reply,再往下是reply。再往下说我们的friend,为什么会出现friend这张表呢?多对多关联会产生第三张中间表。多对多关联会产生中间的第三张表。啊,所以这边就描述了一号用户和二号啊,一号用户他一个好友是二号,一号用户有个好友是三号,一号用户有个好友是四号,能看得到吗。哎,就是这样。好,这是我们的一个表结构,我们总共有六张表。啊,五个实体有六张表,因为有个多利多。啊,也就是用户和用户自己,我们把它画在这。他自己和他自己啊,就这么画一下吧,意思一下。好,放在这边。这边把它画一下。那么我们这边写一下,这是多N。这是M。好多里多。这个是好友关系。
04:05
好友。好,就这样吧。OK。保存一下。那下面呢,我们要来新建P5接类。回到src这个这个地方了。我们回到use basic啊,都不知道啥意思了。这个一下子吓得我一激灵了。com.at硅谷点QQ中点P好点,我们第一个叫user basic行吗同学们?好,这是第一个类。我们新建第二个类叫user,这个类。我们新建第三个类叫topic类。我们新建第四个叫reply。我们先接第五个叫host reply。好,再往下一个啊,没有了,就这么五个。好,Basic里面有哪些信息呢?我们有这么几个信息。
05:04
Use bicycle。Private。In ID。Private logging ID。Private stream。好,Nickname。Private string pw private string的image,没错吧,它总有这么一些信息,养成一个好的习惯,不管三加之一,请你先把默认的无三购的方法把它加进去。好,没问题。再来下面一个是user detail,所以我们再回到user detail。那么user我们这边写了哪几个呢?我们也把它写一下private in ID。Private real。Name最好要大写。我们保证和数据库里面的列名大小写都要一致。Private。有没有?好,这个是date类型。啊生日,那么这个生日呢,我们使用哪个呢?Java有还是java.circle。
06:01
好,我们使用的是circle。为什么加法点搜狗是我们Java u对的一个子类?Java UT date,它指的是年、月、日,十分秒、毫秒。加点so date,它指的是年、月、日。好,加法点u.date这是一个负类。好,他指的是年月日十分秒。十分秒。好,他有一个子类。Java点点data。好,这个指的是年月日。生日的话,一般我们问人家哪一年哪一天生的,你总不能问人家几点几分几秒对吧,问人家你几毫秒生的是吧,人家会觉得你这个脑子长胖是吧,就这样。那么我们还有什么呢?我们还有一个叫java.circle点点time。点点time,还有这个东西。啊,Time表示的是时间嘛,你看他是不是也继承将维也。那行,咱们也把它写在这四类。
07:01
好,Time,他指的是十分秒。啊,当然还有其他的,比如说time STEM等等等等,咱们先不介绍了啊。还有一个叫星座叫star star是我们的星座。子俊。好了,就这样吧。那么这是user。Public used detail。好,再来。优质底贴我写完了,再往下我们看一下topic。Topic是我们的日志,我们找到他。那么日志里面我们有哪些信息呢?Private ineg ID。Private。他多。Private。Content。再往下,我们有topic date。
08:04
Did。再往下我们有作者,作者我们用的是什么类型呢?这里面我们用的是use basic。Also。好,这是这是不太一样的地方,稍等啊这个应这个应该是有,因为咱们日志最好有十分秒是吧。啊,这边我们写的是also,注意我用的是user basic,那它这边类型对应的是一个数字,但是我用的是user basic。表示当前这个topic属于某一个作者。都对。再来。这是。再往下,我们就reply。所以我们找到reply。Reply里面有这么一些信息,Private in ID。Private string content。Private data类型,Reply date。Private。作者。
09:00
Use the basic。好。Private,看好了,我写的是。是吧?Reply。好,又是地铁,没问题。再来。下面一个reply。Horse reply里面有private integer。I。Private。Content private date类型。Host reply date。Private use the basic also。Private reply。是吧,当前这个主人回复到底是回复的哪一个回复是吧,同学们,哎,就这样。下面我们看一下P9它们之间的关系。
10:00
我们先回到user。User basic当中我们应该拥有user detail y,我们需要查看用户的详情。Private user detail。User detail,咱把它写在这。这个是一对一。再来一个用户,他会拥有多个日志。是吧?Topic。List。一。再来。然后呢?我们的topic当中,我们的topic里面一个topic是不是会对应有多个reply啊?所以再回到topic里面去。Reply。List。Reply。Repl list。好,就这样吧。
11:00
OK。好了。先回到topic里面去。稍等啊。Reply。没问题,再回到user,好,没问题。再来use当中还应该有什么呢?是不是好友啊。哎,是不是好友。好友是不是也是use bicycle?好,我们称之叫friend list。啊,这个是多利多。OK。再来。我们再回到topic里面去,Topic里面有个叫rely,然后咱们这边还有一个叫also。啊,这边对应的是多对一。啊,这个是对应的是多一对多。再往下reply reply里面这边一个叫topic,好,这个是多对一。那么我们还应该有一个private。啊,叫host reply。一个回复嘛。他应该会有主人回复嘛,一堆,那这边有个U字了,那么这个是多对。
12:04
OK。就这样子,那么回到house reply里面,我们这边一个reply,它也是一对一。上面这个我们也认为是一对一啊,其实可以写成是叫多对应。多个主人回复对应的是同一个作者,叫多对应。差不多大家不用害怕,哪怕你哪一个分析哦,一个属性忘记加了,忘加就忘加呗。到后面再补。啊,没有关系的,不用担心。差不多吧。有没有,有没有哪边写少了,同学们。差不多啊,就这样吧,好,我们找到user basic,我们补一下get set。再回到优质底,咱们再补一下。Get a set。我们再回到topic。
13:00
再来。Get a。Reply。Get set。好,再回到house。行P类,我已经把它全部设计好了再来。我们把一些准备工作把它做一做。呃,我们之前在上一个项目当中,我们在这个包里面。打开打开,在这个包里面是不是都是通用代码。所以我就直接跟you c。直接CTRLC。回到我当前的I com at硅谷这一集,CTRLV。行吧,同学们,我直接把它粘进来了,把整个的这个包把它粘过来了。Com at、硅谷MYSSM是不是全占过来了,就放在这,然后是不是还有个配置文件。哎,是不是配文件,咱们把它粘到SC里面去。粘过来,然后呢,我们web.XM文件好像还做了一些设置。
14:00
是不是啊,是不是time left这个设置啊,那行从这到这儿,根据C拷贝一下。其实这玩意儿也有。因为是不是我们已经加了接定器了,接定器是要读这个东西啊,咱们上一次把那个注释的是让他报错的,还记得不。故意让他报错的,所以全部都要选就C。好,放到我们的项目里面去。打开。好,回到这边来。好,把这个注释拿掉。就这样。全部关闭。下面呢,我们就要开始写代码。把这个关掉啊,这个重。大家帮我一起来思考一下QQ中我们现在已经写的PGO,我们应该有哪些功能呢?我们先从do开始,Do层我们需要一个叫优质的basic do。它里面有哪些功能呢?第一个。根据账号。账号和密码获取特定用户信息是不是?
15:05
Public used basic get basic get used basic。试卷。ID password。是不是这样的,这第一个。再来。想象一下,我们一个用户登录成功之后。登录成功之后,我们要在左侧加载他的所有的好友。获取指定。用户的所有好友列表。Public list user basic。叫get friend list。啊,或者叫get list都可以。Get user biclist。好,那么你要告诉我一个一个user basic。是吧?根据你的user bicycle,找到你所有的user basiccyc list是不是这样的?好,就这个方法。再来一个用户登录成功之后,左侧显示好友列表有了。
16:04
那右边是不是要显示日志的列表?所以我们需要再写一个topic deal。Topic接口。写错了,不叫top,叫topic。好,File。Deal再来。Topic里面应该有哪些功能呢?第一个。获取指定用户的所有日志。所以public list。Get topic list。User。是吧?应该有basic。再来我是不是需要有添加日志这样的功能啊。添加日志public void。爱的。那我当然也有删除日志这样的功能。
17:00
啊,就写word的算了啊,反正咱们这里面都是都是这个,呃,Public类接口嘛。啊,删除日志,还有获取特定日志信息。当我点某一个超链接啊,日志的超链接topic。Get。In。D。好,就是这样的,那你说老师不是还有根据日志查到所有的回复列表吗?那是回复的点是吧,同学们。好,所以我们再写一个回复。Reply,点。那么在这里面我们要写一个叫获取指定日志的回复列表。所以list。Reply。Get reply,好,我们这边出现的是不是叫呀。哎,是不是获取某一个topic,它的所有的回复列表。也可以添加回复。添加回word ADD reply。Reply,那当然我也可以删除恢复。
18:03
是吧?Void delete reply。啊,就根据ID删除算了。好添加啊删除。就这啊,大家也可以获取吧,获取指定的这个回复,等等等等,不写了啊,就这样。那么我是不是还应该有host reply业务啊?我们再写一下reply。那么这里面是不是也有一些接口,是不是应该也有一些方法呀?好,我们先不再往下追加。再继续。那么user basic,我们得需要有它的实现类,我们来写一下。点user basic。Use basic deal。然后呢,我们来继承。User basic deal。啊,不写错了。想啥呢?继承best do是不是把user basic把它放进去?
19:01
啊,别放错了啊,放的是use basic,放的不是use basic do,有同学写着写着就写乱掉了啊。继承use basic丢实呃,实现use basic丢是吧,同学们实现那面所有的方法就这样。第一个我们来写一下。好点漏的。搜索一句selection from t-user-basic,我们看一下这个表。T杠对的吧,然后有log ID和PWD。Selection from basic。Well locking ID等于一个值,And password等于一个值,是不是这样的?然后我们把locking ID把它放进去,把password把它放进去。就行了吧,这第一个方法,第二个方法是获取他的好友列表,好,那我们也得写一下。好友列表。好友列表怎么做呢?使俊搜过一句,我的确用了表连接。
20:00
Selection。Selection from t user basic。这是我们的basic表,执行一下。这个工具工具忘了叫什么了啊。给他找一下。还不太好找啊。截图的工具。好,我把这个图把它截下来。好,这是我们的user basic表。好了,我把它放到这个画图里面去啊。放到这里面。好,再来。好把它这个往这边挪一点。
21:01
OK,我们再来看一张表。我们再来看一个select新T杠表。好,查一下这张表。好,那么我把这个表的信息把它放在中间。把它放到中间。请大家帮我查一下用户一用户一的他与所有好友列表。用户一的所有好友列表。好,这是用户1ID为一。是吧?那么用户一稍等啊。用户一号。一号这个用户。那么也就是会找到找到这个用户。没错吧,找他。找到这个一号。那这个一号。我技能啊,这个一号我就能什么呢,就能找到哪里呢,稍等啊,我画错地方了。稍等啊这个线。
22:01
这个是吧,发错了啊。好,我把它现在补的补的长一点。我到这来。没错吧,同学们是找到这个一号,那么这个一号我就看有哪些有哪些,这个一号我们会发现有这么多。啊,我们会发现有这么多。是不是?这些都是一号。啊,那这些都是一号,我们就能找到后面的这些。就能找这些是吧,同学们,那我找到这些,哎,我二号我就能对上它。是不是三号就能对应上的号。啊,四号就能对应上它。五号就能对应上他没错吧,就是这样的。所以。我们把这个表,把这个表看成是T。T。我们把这个表。看的是T2。我们把这个表看到是T3,或者这样吧,它是T2。
23:04
换一下位置无所谓啊。随便啊。这是T3。我们的搜狗语句应该怎么写呢,同学们?首先是T1和T2进行相连。Selection。From t表left join tr表on,条件是T里面的ID等于TR里面的UID是不是这样就把它连上去了,然后再继续。In a join。T3表。二条件是TR里面的fid等于T3里面的ID是不是啊?哎,我的蓝色的箭头画在这边,ID指向这边的ID。就这样的。那么我们把T写进去,T杠,User杠,Basic。是不是?Left join tr表示什么?T杠,Friend。对不对,TR表。
24:00
好。Left join写在这啊,On,条件是他。再继续in the join t3是谁?是不是T-user-basic?是不是T3好,那我们这个语句写好了,CTRLC。好,回到这里面,来来执行一下。执行你看。U001,我们就查到,你看U001这个人是不是有四个好友啊,啊,四个好友,Tom cat Lucy,张三丰。Tom这个人是不是有三个好友啊,Cat,小峰,Lucy。K的这个人有几个好友啊,两个肖峰,汤姆,张三丰,这个人有一个好友,是不是这样的我们就能看到。啊,这样就能看到他们的信息了,就是这样。当然了,你说老师,那我这边能不能硬的,我能不能把它换成啊,能不能把它换成这个叫叫叫叫叫left。也可以。你也可以换成left left就表示左表不丢失嘛。
25:00
保证左表的数据不丢失,我们这么去查就多了一条11条,刚才是十条稍等啊,慢一点慢一点说啊。我给他印了,你查一下你看看。好执行一下,你看一下少了一个U004这个人。因为U004这个人他没有好友。啊,他没有好友,我们把这in的改成left。改成left之后,是不是我们右表其实就是TR表,TR表如果没有符合和T匹配的,是不是TR里面就是now。然后浪这一条,如果你写的是inner join inner join,如果没有和T3匹配的,那是不是就不会展示啊?那我用left是不是表示右表左表不允许丢失啊,那那这条数就不允许丢失,你看一下你看。全是浪,它不允许丢失,那右边也没有人愿意和它相连,我一起浪。这样我这个U004LUCY Lucy就是一个好友都没有吗?就是这样。那这个时候我们再把这个新号再换,再再把它改掉。
26:01
啊,我们可以把它信号再再把它再变换一下,我们想查的是某某某人的好友吗。哎,这是我们的一个。一个搜狗语句。我们其实所需要的。就是这边的信息,这是本人的信息。那本人的信息对应的是不是这边是好友的信息啊。哎,就是这样。啊,所以说这个搜狗语句呢,大家其实你去看一下,其实是能看得懂。啊,那大家如果说不想写这么复杂的话,也没有关系的,我们可以分开来写。我们可以分开来写,我们先查询某一个人,他有哪些好友吗?啊,我们写一下。比如说我们去查单表,操作selection from。啊,Selection from这张表,然后可以写物条件。Will u ID,比如说等于一号,那请问一下我查到的是不是就是一号的,所有的他的好友的ID是不是就有了。没问题,我只查fid,没问题的,可以的。
27:01
可以的。啊,这样我就能得到ID。然后我可以再根据ID再去查询吗。是不是啊,没有问题的,那比如说就这样吧,我就这么去做。那行。简单一点啊,所以说这个里面我想查询所有的use bicycle啊,其实就是好友,那我就把这句话放进来。Select from u ID等于一个值啊的一个问号。Return。super.xq的qua。搜狗一句把我们use basic.get ID把它扔进去。啊,根据我当前这个用户的ID,我要去查询。好,这是我们右侧basic丢里面的。再来topic do,它应该也会有时间类,我们对于它我们也需要写个时间类。MP点。好,我们要让他继承。
28:00
Best deal。好。然后实现。Topic,然后实际上里面所有的方法。啊,实现其中的四个方法。再来。那么这个get topic list,我们得把它写一下,Return super.query selection from t杠。Topic well,是不是要根据作者查询啊,作者author的一个值。那么我们这边use basic.get ID把它放进去。这样我就能查到这个作者的所有的topic日志都能查到了,其他的先不看。就这样子。好,那其他的我暂时暂时可以先不管了。啊,暂时咱们就就就先这样。那么我们需要在配置文件里面把它把它配一下,这些全部把它删掉。好,下面呢,咱们也把它删掉。在我们的病字里面,首先我得配DABID,第一个use。
29:03
User basic。Class等于。com。Com点爱硅谷点。点个中。点DAO点点use basic点是吧,同学们。这是第一个,第二个ID叫。Class com.at硅谷点QQ中点do.ipl.topic好,这第二个。再来请问一下,我是不是得需要有service?没错,确实需要有service,所以我得再加service这一层。好接口。Service。好,那么借口的话,我暂时先写一个叫used啊,叫稍等一下啊service.use basic service。好,这是我们的接口,那么这里面我们得需要一个登录方法,它是面向业务的,它是面向业务的user basic。Use basic,好,Log啊,我就称之为叫logging,那我这里面可以需要一个叫loging ID。
30:01
Passor。这是个方法。然后我们再实现一下,按p.user。Basic。Service。然后让他实现一下use basic。Service好实现它,然后我需要去实现一个log方法。啊,我需要去实现一下doing方法。然后这个log方法,它只完成一个登录嘛,所以我这里面要做一件事情,第一步。我现在去做一下登录验证,或者我直接写吧。就到这,我们补一个private user basic。DA,是不是?看对吧,同学们,我得需要丢,然后选中它放到这里面来点。Get user basic把我们的log ID放进去,把我们的password进去。对吧,我们会得到一个use basic。那么是不是我们可以把这个use basic可以把它出去,当然你这个use basic不行的,是不是我们,我觉得我们好像。
31:06
对,学校有什么好友列表不?对不对啊,当然没关系,如果我们仅仅是想做登录验证也行。也可以,我就这么返回。好,再来。再来。大家想象一下,我登录成功之后,我登录成功之后我应该干嘛呢。我应该跳转到那个index页面上去。但是我那个index页面上是不是在左侧要有好友的列表。那好友列表我觉得我在这个service里面,我觉得好像我得补个方法。获取好友列表的那个方法。是不是因此我再补一个方法?List use basic,我写个get friend。Get a friend list。好,我这边写的叫use basic use basic。那行,我再回去实现一下。
32:01
再追加一个。好,把它放在这。然后呢,它也是通过use basic回到这边来,Use basic do.get get user basic list,把我们的user basic放进去,那其实同学们。Least use basic。这边叫user basic list,其实同学们这边其实user basic list里面所查到的全部都只有ID。全部都只有ID。有印象吗?再回到这边来,再看一眼,你看一下我是不是只根据ID查询啊。它只有fid,它最后虽然说返回的是user basic,但是它只有fid啊,只有一个ID的值,那怎么办呢?那怎么办呢?所以我这边得到user basic之后,我得再重新查一次。我得再重新查一次。啊,负循环。List点啥意思?
33:02
取出每一个user basic。叫friend等于use basic list.get。取到其中的一个,然后再根据它去查询他的详细信息。所以use basic do get。哎,这边好像我们没有写根据ID查询的是吧,同学们补一个。回到这边来。根据ID查询啊。Use basic的信息。好,就叫use basiccycle get。User。BY,写个by ID吧,啊,In ID。就这样的。然后我们得去实现一下这个方法。好实现一下它,那么super应该是用漏的方法,Selection from t user。Basic where ID等于一个值,然后把ID放进去,没错吧?
34:01
好,咱们再回去,Out,向左回去再回去,再回去,再回去,好,回到这边来,那么get use by ID把我们的friend.get ID是不放进去啊。哎,这样他就能得到一个。上得到一个软,可以重新重新复制。我们给friend重新复制。啊,重新给他复制。就这样子。那么重新复制之后,你这个user basic list里面其实没有变。因为你把这个指向,把这个变量的指向改掉了,那对于这个以前的集合其实没有变。啊,所以说这边稍微有那么一点点小问题。啊,稍微有一点点小问题,我们可以再准备一个集合。List use the basic。好,我这称叫friend。Friend list they you。A。好,Use basic list.size我们可以给他一个相同容量的是吧,相同容量的。然后front list。
35:01
可以吧?把它往里面扔,那么最后我们返回的是不是这个friend list?没问题。好,我们的解决方法其实也很多,当前我解决的使用的是其中一个解决方法。啊,没有办法,因为现在我这里面写的是。呃,回到do,不是啊,Use basic do回到这,因为没办法,我当前我是单表查询的。如果我使用多表查询,其实是有办法的啊,不着急,我先用一个方法先解决了,解决之后我再使用第二个方法再给他演示。再来注意听啊。再来。呃,Use basic service,现在这边我已经搞定了,最后我们return,所以这块啊,左侧的好友列表我已经把它搞定了,再来右边是不是要显示日志的列表。所以我们回到topic里面去,Topic这边我们写了一个,所以我们要去找service。Service再新建个接口。Service。
36:00
这里面我得需要有一个叫list。Topic。Get。Topic list user basic basic啊,查询特定用户。查询特定用户的日志列表。那行吧,我得写个时间类。Service。实现。Service。实现它里面的方法。然后在这个地方,我得借助于topic do。Private。Topic do you。然后呢,我在这边我得写一下。丢点get list,把我们的user把它放进去是吧?就是这样的。好了,那么我们在配置文件里面,我们得把它配一下。两个DA已经写好了,下面我需要设ID。Service class com.at硅谷点QQ重点service.ip点好user basic service。
37:03
它里面有什么呢。它里面是不是需要user basic?所以我得把它扔进来。Property。Name等于它。Ref等于它basic。再来。ID等于。Service。com.at硅谷点QQ自动点service.i点好service I,那么这个里面property我们看一下。他是个。所以name。Topic deal ref topic deal,没错吧,把它全部写上去。那行,现在我们设备尺寸也把它加进去了,下面我得需要写CTRL了,没错吧。我得需要去写CTRL了,没问题吧,同学们CTRL组件吗?好,再来CTRL。
38:01
在controller当中,我需要第一个user controller。他帮我们做登录验证。所以这里面我有一个方法,Public string login。稍等一下啊,我把视频。
我来说两句