版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Web后端框架现代Web开发与应用
内容提要Spring概述Web层框架-SpringMVC(SpringBoot)持久层框架-SpringData以及MyBatisSpring概述
4Spring概述RodJohnson《ExpertOne-on-OneJ2EEDevelopmentwithoutEJB》Spring是Rod主创的一个应用于JavaEE领域的轻量应用程序框架,其核心是一个IOC容器以及AOP实现。Spring框架模块核心容器:Core,Beans,Context,ExpressionLanguage数据访问和整合模块:JDBC,ORM,OXM,JMS,TransactionWeb模块:Web,Web-Servlet,Web-Struts,Web-PortletAOP模块测试模块Spring框架的特点轻量级框架IOC(控制反转)容器AOP(面向切面编程)的支持声明式的事务支持封装和简化了JavaEE的很多API对各种框架的整合
6
7SpringCoreBeanFactory是springIOC的核心组件,是工厂模式的一种实现,将实际代码和依赖配置进行了分离。
8控制反转IoCIoC(Inversionofcontrol)也称为依赖注入DI(DependencyInjection)好莱坞原则:“Don‘tcallme,I’llcallyou.”控制:对象的生命周期和对象间的关系
实现目标功能的松耦合:替换实现功能模块方法一:将所有可能出现的实现模块都准备好,使用不同的调用方法。方法二:不改变调用方的调用方式,面向接口编程,并且用到工厂模式;分解依赖,按照需要自动“注入”相关对象;一般通过XML配置文件或注释来决定注入方式。
9控制反转IoC传统做法不使用容器publicclassGreeting{publicvoidgreet(){Speakers=newSpeaker();s.sayHello();}}
10控制反转IoC传统做法注册容器中的受管对象,通过JNDI等API访问classXxxDAO{privateDataSourceds;private
static
finalStringdataSourceJNDI="jdbcDataSource";privateConnectiongetConnection()throwsException{if(ds==null){InitialContextcontext=newInitialContext();ds=(DataSource)PortableRemoteObject.narrow(context.lookup(dataSourceJNDI),DataSource.class);}return
ds.getConnection();}public
voidadd(Objectxxx){ //...}}
11控制反转IoCIoC(Inversionofcontrol)面向接口编程publicinterfacePCComponent{StringgetName();//名称doublegetPrice();//价格StringgetCompany();//厂家}publicinterfaceRamextendsPCComponent{intgetSize();//内存大小voidinData();//读数据voidoutData();//取数据}
12控制反转IoCIoC(Inversionofcontrol)面向接口编程publicclassKingmaxRamimplementsRam{
publicintgetSize(){return512;}
publicvoidinData(){//读入数据}
publicvoidoutData(){//输出数据}
publicStringgetName(){return"Kingmax内存";}
publicdoublegetPrice(){return300;}
publicStringgetCompany(){return"Kingmax公司";
}
}publicclassKingstoneRamimplementsRam{
publicintgetSize(){return512;}
publicvoidinData(){//读入数据}
publicvoidoutData(){//输出数据}
publicStringgetName(){return"Kingstone内存";}
publicdoublegetPrice(){return200;}
publicStringgetCompany(){return"Kingstone公司";
}
}
13控制反转IoCIoC(Inversionofcontrol)工厂模式publicclassBeanFactory{//框架化publicstaticObjectgetBean(StringaName){StringclassName=“**”;//根据读取的类名;returnClass.forName(className).newInstance();}}//设置配置文件,定义别名和类名的映射…Ramram=(KingstoneRam)BeanFactory.getBean(“别名”);ram.getCompany();..从外部文件中获取
14控制反转IoCIoC(Inversionofcontrol)结合前两者ApplicationContextcontext=newFileSystemXmlApplicationContext("applicationContext.xml");Computercomputer=(Computer)context.getBean("myComputer");computer.doWork();<beans><beanid="myMainboard"class="ioc.IntelBoard"><propertyname="ram"><beanclass="ioc.KingmaxRam"/></property><propertyname="cpu">
<beanclass="ioc.AMDCpu"/>
</property></bean><beanid="myComputer"class="ioc.Computer"><propertyname="mainboard"ref="myMainboard"/></bean></beans>控制反转IoCIoC的优势将寻找和产生相关对象的责任交给了配置文件和读取配置文件的工厂类对象。减少了实现之间的紧耦合,鼓励面向接口的设计。
允许应用在代码之外进行重新设置关系。支持编写方便测试的独立组件。
15Bean工厂采用配置的机制管理Bean,如XmlBeanFactory理论上可以采用各种配置文件格式–XML–属性文件–数据库–目录LDAP
16<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans><beanid="..."class="...">...</bean><beanid="..."class="...">...</bean>...</beans>ApplicationContextApplicationContext是BeanFactory的子接口,添加了许多有用特征:–支持文本信息的解析–装在文件资源的通用方法–发布事件WebApplicationContext是ApplicationContext的子接口XmlWebApplicationContext是WebApplicationContext的实现,用于web应用中
17
18BeanFactory位于org.springframework.beans
包下org.springframework.beans.factory接口
19XMLConfigurationFile<?xmlversion="1.0"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans><beanid="messageDisplay"class="test.SystemOutMessageDisplay"></bean><beanid="messageProducer"class="test.HelloMessageProducer"></bean><beanid="helloApp"class="test.HelloApp"><propertyname="display"> <reflocal="messageDisplay"/></property><propertyname="producer"> <reflocal="messageProducer"/></property></bean></beans>Beans.xml
20BeanFactoryExamplepublic
classTest{public
static
voidmain(String[]args){BeanFactoryfactory=newXmlBeanFactory(
newClassPathResource("/Beans.xml"));HelloApphelloApp=(HelloApp)factory.getBean("helloApp");helloApp.displayProducedMessage();}}ApplicationContextcontext=newFileSystemXmlApplicationContext("applicationContext.xml");Greetinggreeting=(Greeting)context.getBean("Greeting");实际中更多采用
21SpringIOC容器非入侵式框架侵入式框架:一组类与对象按照既定的规则交互。如果需要使用框架的功能,用户必须实现框架的接口。于是代码与框架耦合,可移植性降低。publicclassxxximplementsEJBHome{ create(){} …….}
22SpringDependentInjection:依赖注入的三种方式constructor注入:在实例化时完成注入。运行时难以改变(spring推荐),非侵入式编程。setter注入通过setXXX()方法注入,非侵入式编程。接口注入实现容器接口,由容器完成对象关系的建立。侵入式编程。
23SpringIOC容器容器:容纳对象,并维护各个对象之间的关系通过配置文件管理对象间关系创建由容器完成“注入”(对象关系的建立)也由容器完成
24SpringDependentInjection:依赖注入注入方式——setter注入:setXXX()。
25SpringDependentInjection:依赖注入注入方式——constructor注入。在实例化时完成注入。
26SpringDependentInjection:依赖注入对其他bean的引用。
27Spring依赖注入采用注释的配置@Component:定义一个通用组件,容器将POJO转为容器管理的bean@Repository:Dao@Service:Service实现类@Controller:Controller实现类@Autowired:自动装配
28SpringSpring容器高层视图Bean生命周期启动关闭
29
30SpringAOP
31AOP概念跨越多个模块的关注点称为横切关注点或交叉关注点(CrosscuttingConcerns)
32SpringAOPAspect(切面)解决跨越多个模块的交叉关注点问题,大多数是一些系统级的或者核心关注点外围的问题。是包含通知和切点的模块化单元。
比如Log,Exception,Security,TransactionJoinpoint(
连接点)应用程序执行过程中,切点匹配的特定点。比如方法调用前,方法执行返回后,抛出异常时Advice(通知)一段代码,定义了切面中的实际逻辑,即实现Pointcut(切点)插入Advice的连接点,定义了通知应该在何处执行。切点的描述比较具体,而且一般会跟连接点上下文环境结合。
33SpringAOPIntroduction(
引入)向现有的类添加新方法和属性。Target:(目标对象)通知所针对的对象Proxy(代理)代理是将通知(Advice)应用到目标对象后创建的对象。Weaving(织入)将切面与应用程序的目标对象连接起来的过程。运行时织入:大多数AOP采用,代理方式编译器织入:使用专门的编译器来编译基于语言的扩展,AspectJinterceptor(拦截器)实现对连接点进行拦截,从而在连接点前或后加入自定义的切面模块功能
34SpringAOP示例–业务接口packageaop;public
interfaceSayHello{ public
voidsayHello(Stringname);}
35SpringAOP示例–实现packageaop;public
classSayHelloImplimplementsSayHello{public
voidsayHello(Stringname){ System.out.println("Hello,"+name);}}
36SpringAOP示例-Advicepackageaop;importjava.lang.reflect.Method;importorg.springframework.aop.MethodBeforeAdvice;public
classMyAdviceimplementsMethodBeforeAdvice{public
voidbefore(Methodmethod,Object[]args,Objecttarget) throwsThrowable{ System.out.println(method.getName()+":");}}
37SpringAOP示例–beans.xml<?xmlversion="1.0"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans><beanid="sayHello"class="aop.SayHelloImpl"></bean><beanid="myAdvice"class="aop.MyAdvice"></bean><beanid="mySayHello"class="org.springframework.aop.framework.ProxyFactoryBean"><propertyname="proxyInterfaces"> <list><value>aop.SayHello</value></list></property><propertyname="target"><reflocal="sayHello"/></property><propertyname="interceptorNames"> <list><value>myAdvice</value></list></property></bean></beans>
38SpringAOP示例–调用Adviced方法packageaop;importorg.springframework.beans.factory.BeanFactory;importorg.springframework.beans.factory.xml.XmlBeanFactory;importorg.springframework.core.io.ClassPathResource;public
classTest{ public
static
voidmain(String[]args){BeanFactoryfactory=newXmlBeanFactory(newClassPathResource("aop/beans.xml"));SayHellohello=(SayHello)factory.getBean("mySayHello");hello.sayHello("Leo"); }}
39SpringAOP示例-输出结果sayHello:Hello,LeoDemoSpringAOPDemoinDOSenv
40Advice类型前置通知(BeforeAdvice)在目标方法执行前执行后置通知(AfterAdvice)在目标方法执行后执行,不考虑方法的返回值或异常。返回通知(AfterReturningAdvice)在目标方法成功执行并返回结果后执行。异常通知(AfterThrowingAdvice)在目标方法抛出异常后执行。环绕通知(AroundAdvice)在目标方法前后执行,可以控制目标方法的执行过程。Advice类型--SpringBeforeAdvice
41importjava.lang.reflect.Method;
importorg.springframework.aop.MethodBeforeAdvice;
publicclassBeforeAdviceimplementsMethodBeforeAdvice
{
//实现MethodBeforeAdvice的before方法
publicvoidbefore(Methodmethod,Object[]args,Objecttarget)
{
System.out.println("beforadvice");
}//endbefore
}//endclassBeforeAdvice
Advice类型--SpringAfterreturningadvice
42importjava.lang.reflect.Method;
importorg.springframework.aop.AfterReturningAdvice;
publicclassAfterReturningAdviceImpimplementsAfterReturningAdvice
{
publicvoidafterReturning(ObjectreturnValue,Methodmethod,Object[]arg2,Objecttarget)throwsThrowable
{
System.out.println("afterReturning“);
}
}
Advice类型--SpringAroundadvice
43importercept.MethodInterceptor;
importercept.MethodInvocation;
publicclassAroundAdviceimplementsMethodInterceptor
{
publicObjectinvoke(MethodInvocationmi)
{
Objectobj=null;
//dosomething....
returnobj;
}//endinvoke(...)
}//endclassAroundAdvice()
DemoSpring2AOPAroundinMyeclipseenvAdvice类型--SpringAfterthrowingadvice
44importjava.lang.reflect.Method;
importorg.springframework.aop.ThrowsAdvice;
publicclassAfterThorwsAdviceimplementsThrowsAdvice
{
publicvoidafterThorwing(Throwablethrowable)
{
//dosomething....
}
publicvoidafterThrowing(Methodmethod,Object[]args,Objecttarget)
{
//dosomething....
}
}
SpringMVC
46SpringWeb
47SpringMVCSpringMVC概述SpringMVC是Spring技术栈为展现层提供的基于MVC设计理念的优秀的Web框架。SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无须实现任何接口。支持REST风格的URL请求。采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵活性。
48SpringMVC
49SpringMVC处理流程
50SpringMVCDispatcherServlet前端控制器,进行调度
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
51SpringMVC控制器类HandlerMapping
52SpringMVCHandlerAdapter框架内部使用,使得DispatcherServlet知道调用哪个Controller
53SpringMVC简单示例:HelloWorld步骤:加入SpringMVC所需要的jar包在web.xml中配置DispatcherServlet加入SpringMVC的配置文件编写处理请求的处理器,并标识为处理器编写视图
54SpringMVC简单示例:HelloWorld步骤:加入SpringMVC所需要的jar包在web.xml中配置DispatcherServlet加入SpringMVC的配置文件编写处理请求的处理器,并标识为处理器编写视图<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
55SpringMVC简单示例:HelloWorld步骤:加入SpringMVC所需要的jar包在web.xml中配置DispatcherServlet加入SpringMVC的配置文件编写处理请求的处理器,并标识为处理器编写视图<!--配置视图解析器:如何把handler方法返回值解析为实际的物理视图--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/views/"></property><propertyname="suffix"value=".jsp"></property></bean><!--配置自定扫描的包--><context:component-scanbase-package="fudan.adweb.springmvc"></context:component-scan>
56SpringMVC简单示例:HelloWorld步骤:加入SpringMVC所需要的jar包在web.xml中配置DispatcherServlet加入SpringMVC的配置文件编写处理请求的处理器,并标识为处理器编写视图
57SpringMVC简单示例:HelloWorld
58SpringMVC映射请求参数、请求方法或请求头@RequestMapping的value、method、params及heads属性值
分别表示请求URL、请求方法、请求参数及请求头。它们之间是“与”的关系。
59SpringMVC映射请求参数、请求方法或请求头@RequestMapping的value、method、params及heads分别表示请求URL、请求方法、请求参数及请求头
60SpringMVC映射请求参数、请求方法或请求头:注解通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中。即URL中的{xxx}占位符可以通过@PathVariable(“xxx”)绑定到操作方法的入参中。这对REST化提供了很好的支持。
61SpringMVC映射请求参数、请求方法或请求头:注解在处理方法入参处使用@RequestParam可以把请求参数传递给处理方法。@RequestMapping(value="/testRequestParam")publicStringtestRequestParam(@RequestParam(value="username")Stringun,@RequestParam(value="age",required=false,defaultValue="0")intage){System.out.println("testRequestParam,username:"+un+",age:"+age);returnSUCCESS;}
62SpringMVC对REST的支持HTTP协议里面,四个表示操作方式的动词:GET:/order/1HTTPGET:得到id=1的orderPOST:/orderHTTPPOST:新增orderPUT:/order/1HTTPPUT:更新id=1的orderDELETE:/order/1HTTPDELETE:删除id=1的orderHiddenHttpMethodFilter浏览器form表单只支持GET与POST请求Spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求。
63SpringMVC对REST的支持在Web.xml中注册HiddenHttpMethodFilter表单中通过隐藏域通过post传递操作方法put<filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><formaction="springmvc/testRest/1"method="post"><inputtype="hidden"name="_method"value="PUT"/><inputtype="submit"value="TestRestPUT"/></form>
64SpringMVC映射请求参数、请求方法或请求头:注解通过@RequestHeader即可将请求头中的属性值绑定到处理方法的入参中。@CookieValue可让处理方法入参绑定某个Cookie值。
65SpringMVC使用POJO对象绑定请求参数值SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。@RequestMapping("/testPojo")publicStringtestPojo(Useruser){System.out.println("testPojo:"+user);returnSUCCESS;}<formaction="springmvc/testPojo"method="post">username:<inputtype="text"name="username"/>password:<inputtype="password"name="password"/>email:<inputtype="text"name="email"/>age:<inputtype="text"name="age"/>city:<inputtype="text"name="address.city"/>province:<inputtype="text"name="vince"/><inputtype="submit"value="Submit"/></form>写一个User类,属性和表单中的属性一一对应
66SpringMVC使用ServletAPI作为入参可以直接使用一些ServletAPI作为入参。@RequestMapping("/testServletAPI")publicvoidtestServletAPI(HttpServletRequestrequest,HttpServletResponseresponse,Writerout)throwsIOException{System.out.println("testServletAPI,"+request+","+response);out.write("hellospringmvc");}支持的servletAPI
67SpringMVC处理数据模型SpringMVC提供了以下几种途径输出模型数据:ModelAndView:处理方法体可通过该对象添加模型数据Map及Model:处理方法返回时,Map中的数据会自动添加到模型中。@SessionAttributes:将模型中的某个属性暂存到HttpSession中@ModelAttribute :方法入参标注该注解后,入参的对象就会放到数据模型中
68SpringMVC处理数据模型ModelAndView既包含视图信息,也包含模型数据信息。添加模型数据:addObject方法,SpringMVC会把ModelAndView的model中数据放入到request域对象中。设置视图:setViewName方法。视图中访问通过${requestScope.user}
69SpringMVC处理数据模型Map及ModelSpringMVC在内部使用了一个org.springframework.ui.Model接口存储模型数据。或者入参为org.springframework.ui.ModelMap或java.uti.Map存放信息。 @RequestMapping("/testMap") publicStringtestMap(Map<String,Object>map){ System.out.println(map.getClass().getName()); map.put("names",Arrays.asList("Tom","Jerry","Mike")); returnSUCCESS; }names:${requestSs}<br><br>
70SpringMVC处理数据模型@SessionAttributes在模型中对应的属性暂存到HttpSession中。除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。例如@SessionAttributes(types=User.class)会将隐含模型中所有类型为User.class的属性添加到会话中。@SessionAttributes(value={“user1”,“user2”})@SessionAttributes(types={User.class,Dept.class})@SessionAttributes(value={“user1”,“user2”},types={Dept.class})
71SpringMVC处理数据模型@ModelAttribute:方法定义上时:SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法。在方法的入参前使用
@ModelAttribute注解:将方法入参对象和模型中对应。
72SpringMVCSpringMVC如何解析视图对于那些返回String,View或ModelMap等类型的处理方法,SpringMVC也会在内部将它们装配成一个ModelAndView对象。
73SpringMVCSpringMVC如何解析视图InternalResourceViewResolverJSP是最常见的视图技术,可以使用InternalResourceViewResolver作为视图解析器:
74SpringMVCSpringMVC如何解析视图重定向一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理。如果返回的字符串中带forward:或redirect:前缀时,SpringMVC会对他们进行特殊处理:将forward:和redirect:当成指示符,其后的字符串作为URL来处理redirect:success.jsp:会完成一个到success.jsp的重定向的操作forward:success.jsp:会完成一个到success.jsp的转发操作
75SpringMVC拦截器SpringMVC使用拦截器对请求进行拦截处理。在Handler处理前后可以通过拦截实现一些功能
76SpringMVC用户自定义拦截器实现HandlerInterceptor接口
77SpringMVC用户自定义拦截器多个拦截器的执行顺序
不再调用其他的组件去处理请求,则使其返回false。
78SpringMVCSpringMVC详细运行流程
79SpringBootSpringBoot精要自动配置:针对常见的应用功能,SpringBoot自动提供相关配置。起步依赖:告诉SpringBoot需要什么功能,它就能引入需要的库。命令行界面:SpringBoot的可选特性,只需写代码就能完成完整的应用程序,无需传统项目构建。Actuator:提供在运行时检视应用程序内部情况的能力。
80SpringBoot添加springboot核心依赖
81SpringBoot一个提供Rest化服务的简单示例数据访问与ORM框架什么是持久层持久层的作用:在系统逻辑层面上,专注于实现数据持久化的一个相对独立的领域(Domain),将数据使用者和数据实体相关联。类比:消费者商业流通渠道商品数据使用者持久化层数据什么是持久层解耦合表现层VIEW数据处理层MODEL业务逻辑数据逻辑JdbcTemplate简介JdbcTemplate是Spring框架对JDBC的封装JdbcTemplate可处理连接的获取和释放,以及异常情况下的资源回收。将JDBC的异常封装为Spring的DataAccessException,使异常处理更容易。支持SQL参数化,可防范SQL注入攻击,使代码更安全。可以将查询结果映射到Java对象,简化了数据提取和转换的过程。支持批处理操作,可以一次性执行多个SQL语句,提高了性能。JdbcTemplate简介配置JdbcTemplate在Spring配置文件中配置数据源和JdbcTemplate的Bean。JdbcTemplate简介使用JdbcTemplate常用方法:execute()、query()、update()、call()。用jdbcTemplate.query()方法接收两个参数:SQL查询字符串和一个RowMapper对象。RowMapper对象用于将查询结果的每一行映射到Java对象User中,查询结果映射为User对象的列表,并返回该列表。SpringDataSpringData简介由Spring社区维护的项目,旨在提供各种数据访问技术的简化和集成。提供了一个通用的、统一的数据访问编程模型。提供了自动化的数据访问功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上半年贵州省遵义市直事业单位招聘98人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年贵州省六枝特区事业单位考调77人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年贵州广播电影电视局所属事业单位招考笔试易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年贵州六盘水市事业单位招聘应征入伍大学毕业生136人重点基础提升(共500题)附带答案详解-1
- 2025年上半年蚌埠蚌山区市政所招考养护辅助工易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年绍兴市沥海镇环保所招考编外用工人员易考易错模拟试题(共500题)试卷后附参考答案
- 二零二五年度高端制造业材料员职务聘用合同62篇
- 2025年医疗报销索赔协议
- 2025年国际贸易合作分成协议
- 2025年共同开发项目合作协议
- 英语名著阅读老人与海教学课件(the-old-man-and-the-sea-)
- 学校食品安全知识培训课件
- 全国医学博士英语统一考试词汇表(10000词全) - 打印版
- 最新《会计职业道德》课件
- DB64∕T 1776-2021 水土保持生态监测站点建设与监测技术规范
- 中医院医院等级复评实施方案
- 数学-九宫数独100题(附答案)
- 理正深基坑之钢板桩受力计算
- 学校年级组管理经验
- 10KV高压环网柜(交接)试验
- 未来水电工程建设抽水蓄能电站BIM项目解决方案
评论
0/150
提交评论