00:00
好,然后下面呢,咱们就来实现一下我们的这个rest案例,对吧,那首先呢,那我们肯定是要先来创建一个咱们的没门工程的,是不是啊啊来咱们把这些东西呢都给它关掉,然后在这咱们来new一个module。好,Next,然后名字呢,然后咱们就叫做spring,然后MVC,然后杠rest OK吧啊包名com.atv5.mvc好啊行,然后设置完之后啊,然后呢,我们是不是就可以在先配置我们的依赖,然后呢,再去配置咱们的web的叉ML,然后最后呢,去创建咱们spring m VC的配置文件,对不对啊首先呢,大家来看咱们来设置一下咱们的打包方式,然后应该打成吧,对不对,好,然后咱们来找到咱们的某一个工程,或者说咱们这样,咱们直接开看咱们的笔记OK吧,来找到咱们的开发环境,好,然后来设置啊,找到咱们当前这个hello word,然后来找到我们当前的依赖,然后把这些依赖呢,然后都复制过来啊好,因为我们是模拟的数据,所以说咱们就不连数据库了。
01:18
DAO呢,直接就给大家写好了,大家直接复制上去就行,OK吧,啊行,然后依赖引入之后,然后下面呢,我们就要配置咱们当前的这个ma文工程,然后配置它的web模块了,是不是啊好,我说过这web APP你可以自己手动去创建,其实我们在咱们的项目结构里面,然后你设置完之后,它是不是直接就会就会自动创建对不对啊,来找到咱们的we部模块,然后这个应该是没问题的,Src下面的慢,下面的web是不是啊,然后在这咱们再来创建咱们的web的XL,应该是src下边的慢,然后再往下是web APP,然后下边的这个web in for web的插条,OK吧,啊行,来点击apply,然后点击OK完事。
02:10
能看懂吧,好啊,来找到我们的web的XL,大家说这里面咱们是不是要先来配置两个过滤器,然后再来配置咱们的前端控制器,因为咱们说过以后咱们的SPAVC的工程工程,对吧?这两个过滤器,一个前端控制器,这就是标配是不是啊啊,首先咱们先来配置咱们的编码过滤器,OK啊,先应该是一个future,然后呢,Future name,咱们一会再写future class char including including future OK吧,好,那这个东西咱们刚才呢,咱们回顾的时候,咱们也说过,对吧?如果说我们现在呢,两个过滤器咱们都要用,那我们一定要先来配置咱们的编码过滤器。然后再来配置咱们处理请求方式put跟delete的过滤器,对不对,为什么呢?因为编码过滤器它用到了set charco,而我们的这一句话在此之前是不是不能获取任何的请求参数,一旦获取了我们当前设置的编码是不是就没有效果了,对不对?但是在咱们的hidden httb method filter里面,大家都看过源码里面是不是就获取了一个请求参数下划线method,对不对?而我们的过滤器它的一个执行顺序就跟我们的future making的顺序有关,是不是啊啊,行,来再往下,那在这咱们是不是要来设置一个什么in para en COD,然后这是utf,杠8UTF,然后杠8OK,然后如果我们要想来设置相应的编码,那咱们是不是还要再设置一个,然后叫做false responsequ。
03:59
顶,有印象吗?哎,如果说不知道,咱们直接打开复制一下就可以,是不是啊,啊行,然后在这来把它设置为处是不是就可以了,是不是啊,好,然后下面呢,我们就可以来设置future map,然后character including,然后对所有请求进行处理,OK吧,好,然后再往下咱们的第二个过滤器是不是应该是来配置,然后咱们处理请求方式put,然后和de delete的什么过滤器,Hi hiddentt be method future是不是好,然后也是一个future future,然后呢,咱们先写future class,然后叫hidden http method future啊好,这个东西需要设置初始化参数吗?不需要啊,直接配置上去就可以有功能,因为咱们在处理请求方式的时候,它的两个要求是不是固定的,第一个。
04:59
的要求,请求方式必须为post的第二个要求,必须传输下划线method这个请求请求参数啊,好OK,然后这个地方咱们写个杠先生对所有请求进行处理就OK了啊,然后再往下,那我们就需要来配置咱们spring mvc spring,然后M的什么叫做前端控制器dpar solve,首先serve that标签里面,然后在这你随便写,那咱们就跟类名保持一致行吧,好,然后dispart serve a that OK。
05:40
好,然后设置完之后,咱们是不是就可以来设置一些初始化参数,Context con location,大家说这是干嘛的?这是不是应该是来设置spring VC的配置文件自定义的位置和名称是不是啊,啊,行,然后class pass,然后这个地方应该是spring MVc.RML,没问题吧?啊,行,然后再往下,咱们在这还可以再加一个漏,On start up,将咱们前端控制器的一个初始化时间提前到服务器启动时,是不是对吧?好,那咱们等到明天咱们再看源码的时候啊,然后大家就会发现。
06:23
如果说就是为什么咱们要把这个东西啊,然后提前到服务器启动时,因为咱们的spring VC在初始化的时候要做的要做的工作非常的多啊,如果说咱们是让第一次访问时进行初始化,那这个时候咱们第一次访问时就会花费大量时间,知道吧,那我们就可以将当前它的这个比较麻烦,比较比较复杂的一个初始化的操作,把它给提前到服务器启动时,那这个时候还会影响咱们每一次的访问,访问速度,不会了,不会了啊好,然后再往下,在这是solve letter map,然后是dispat solve letter,在这咱们来写的是一个斜线,OK吧,啊行,然后那我们就来创建它的配置文件啊,然后在这来创建一个spring的配置文件,好,OK,然后再往下的话。
07:16
创建咱们的控制器at硅谷点咱们就叫rest吧,可不可以啊,可以吧,好,然后点count control,然后点那我们当前咱们操作的这个东西啊,大家注意咱们所操作的这个资源呢,是员工信息,那所以说咱们在这咱们的控制器就叫做什么叫做employee controller,可不可以啊,Em employ啊能看懂吧,啊行好,在这儿咱们是不是要加上一个control的主解对不对,将它标识为控制层组件,但是咱们说过你要用注解加扫描的方式,然后是然后我们当前注解所标识分类是不是才会被作为组件进行管理,是不是啊,所以说我们来找到springc的配置文件,那第一个咱们是不是应该就是扫描组件,OK,是text。
08:17
Contact,然后冒号come的看咱们所扫描的包com.and硅谷点rest点没问题吧,好,然后再往下,大家说咱们应该干嘛呢?是不是来配置咱们的SIM leaf,然后试图解析器,OK,好,这个怎么写呢?啊,想自己写的话也可以自己写这个东西,其实也不怎么难,对吧?然后大家来看啊,然后来找到我们当前咱们的配置文件,然后咱们把这个B复制过来就可以,是不是啊,是吧?啊,咱们把这个B复制过来就行啊,叫做similar similar live view overver,那我们在讲咱们的视图的时候,咱们就说过,如果说我们当前视图名称中在什么情况下会被这个视图解析器解析啊,没有任何前缀的时候,对吧?那咱们能用的前缀有两种,一种是ready we的冒号转发,一种是forward冒号啊啊。
09:17
Ready rap冒号重定向,然后forward冒号是转发没问题吧,啊行,那我们下面那这个咱们就已经配置完了啊好,那我们当前咱们的准备工作是不是基本上就做完了,对吧?然后下面呢,我们再去创建我们的实体类跟咱们的dau就行,对不对?好,然后咱们点击右键再来创建一个包,比如说这个包咱们来放实体类,然后呢,创建一个B这个包,然后把我们当前咱们这个笔记里面啊来大家看好,把咱们笔记里面咱们的这个类复制过来是不是就可以了,对不对,好复制,然后把它给放在我们来,咱们创建一个类叫em employee啊。
10:03
啊,把它拿过来就OK了,没问题吧,好,这是员工这个对啊好,然后下面因为咱们的数据呢,是模拟的,那所以说在这啊,大家看好,我再来创建一个包,这个包咱们就叫DAO里面虽然说咱们不连接数据库,但是呢,其中为我们提供了一个静态的map集合,能听懂吧,好然后呢,所以我们是不是就可以在服务器运行的过程中,咱们就可以操作这个map集合中的数据了,对不对,对吧,好,DAo.em employee DAO OK,啊来,咱们复制一下,非常的简单,好往下走,走到这,好然后下面呢,我们复制粘贴,好大家看好来。来map集合导一下包,对吧?应该是加va.u求中没问题吧?啊,行,那我们把包给导完之后,咱们的employ do呢也就有了对吧?好,那大家看这个东西是不是应该是我们当前的持久层,那我们是不是也要将它标识为咱们的持久层组件,只有当它是组件的时候,那我们现在因为没有service呀,那所以说我们需要在控制层里面是不是直接去访问咱们的DAO对不对,对吧?好,那所以说我要想在控制层中去访问咱们的DAO啊,那我是不是就需要在这来创建一个play DAO对象,大家说是不是对吧?那我们原来是怎么写的,咱们是不是可以直接在这通过等号,然后六,然后来为当前的对象进行复值,是不是啊,但是咱们学了spring之后,我们是不是就可以将咱们依赖注入的过程交给谁来管理呀,交给我们的IOC容器管理是不是啊,对吧。
11:51
所以说我们现在要做的是把employee DAO上加上咱们标识19层组件的注解,叫做repersity,有印象没有,有印象吗?叫repositatory啊好,然后当然加上注解之后不够,咱们是不是还要扫描是不是啊,好,然后我们刚才咱们应该扫描的只有咱们的控制层这个包,那我们现在要想去扫描其他的这个包的话,怎么做?那家说啊,把controller给它删掉,可不可以,可以对吧?好,当然咱们也可以这这中间写一个逗号,然后咱们在这把这个包复制一下,后边咱们在这再加上一个点DAO就可以能看懂不好,如果说我们有多个包的话,那咱们就可以这样去写,OK吧,那就可以这样去写,或者说咱们要想写的简单一点的话,那我们直接让他扫描rest的这个包,那这个包下边所有的类是不是都会被扫描对不对。
12:51
好啊,行,那咱们怎么写,咱们就把它删掉,可不可以啊,可以吧,好啊,行,那大家来看,那我们当前咱们的组件呢,咱们已经扫描了,所以说咱们扫描完组件之后,是不是就可以找到我们的控制层组件,也可以来找到我们的dau组件,对不对,对吧?好,那所以说既然我们当前咱们的employee DA和employee controller,然后他们两个都是作为组件被IOC管理的,那所以我们是不是就可以呀,干什么在我们的controller里面,然后对我们的DAO来进行一个自动装配,是不是啊,那自动装配大家还有印象没有,默认根据by type,如果by type不行,根据by name是不是啊?好,然后它是不是就会在我们IC容器的范围内去找到一个对象,然后找到一个B来为我们当前的属性复制,大家说有没有啊?
13:49
有没有有能够为他赋值的病吗?有啊,是不是咱们通过注解加扫描,然后咱们的IOC容器中是不是就有employee DA这个病对不对?所以说能够为它进行自动装配吗?可以啊,没有任何问题,OK啊,行,那这个就是我们当前这个工程,这是我们的实体类,然后这个是我们当前的DAO,咱们简单看一下这里面所写的代码啊,首先呢,它在这创建了一个静态的map集合,叫employees,然后什么类型map集合类型是不是啊,好,然后在这呢,对它进行实例化,然后往我们当前的map集合中去放值,然后把谁作为键,把咱们当前员工的ID作为键,把员工对象作为值,能看懂吗?那我们当前的员工信息都有哪些呢?首先1001ID,然后这个是名字last name,然后这个是email邮箱,然后这个是。
14:50
的性别OK吧,哎,好,然后咱们初始的这个map集合中,一共是五个员工信息啊好,再往下大家看,他在这又创建了一个静态的in ID等于几1006,能看懂吗?好,然后那save里面有几个方法呀,比如说第一个save方法是不是应该就是什么功能添加的功能保存,保存是不是应该可能是添加,也可能是修改,对不对,对吧。
15:20
好,然后大家来看,首先咱们需要传过来一个音E对象,然后大家看好,你看在这儿啊,它先判断了咱们的音E,它的ID是否等于空,而咱们从这一句话上,咱们就能够看出来,这个东西应该不单是添加它还是修改对不对,因为我们修改的时候这个ID一定是有值的,而咱们添加的时候,这个ID有没有值,没有值对不对,那如果没有值的话,它会怎么办?大家看它是不是会把咱们的in ID,然后赋值给咱们当前的ID属性,并且让in ID加加对不对,那加加在后是不是应该是先先干什么,先赋值,然后再自增对不对?所以说如果我们当前咱们第一次来实现添加功能的时候,那我们当前的ID是空,然后我们所使用的ID应该是从应该是1006,那下一次应该就是1007,能听懂吧,但是如果他要是有ID的话,那咱们是不是就直接往里面去放,是不是就完事了,对不对,对吧,怎么去报,把我们当前员工的ID作为键,员工对象作为值,那因为咱们用的是map集合,所以说相同的键,不同的值,就会将原来的值给覆盖掉,是不是啊,能听懂吧?啊行,这个大家注意啊,好,再往下在这get off,这就不说了吧,你看怎么写的M。
16:51
集合点values干啥的?获取map集合的值,那谁是值,值不就是我们当前的员工信息吗?是不是对吧?好,在这返回一个connection集合没问题吧?好,再往下大家看get,那get的话既然传ID了,那是不是应该就是根据ID来获取某个员工信息是不是对吧?好,再往下看delete,然后是删除,那这个就是根据咱们的ID去删除数据是不是啊,对吧?哎,行啊,好,那这个map集合的功能是不是比较多,对不对,对吧?就像是我们在上一个阶段大家在做什么的时候,在做购物车的时候。
17:32
大家哦,大家上个阶段购物车应该用的是数据库是吧?啊,大家是不是写了好几个版本,刚开始用的是session,最后又存数据库里面了,直接用数据库是吧?嗯,行啊,那就不说了啊,好,行,来大家来看啊,然后这个就是我们的dau中的方法,这几个方法大家都能看懂吗?咱们的save是干嘛的,实现添加和修改的知道吧,这能看懂不好?然后这个呢,是来查询咱们所有的员工信息,这个呢是根据ID来获取某个员工信息,然后这个是删除员工信息,OK吧啊。
我来说两句