2018年3月20日第一次写博客---SSM题库

时间:2022-12-31 14:24:18

SSM题库18题

 

一、MyBatis中#和$的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。

(如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by"id")

2. $将传入的数据直接显示生成在sql中。

(如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id)

3. #方式能够很大程度防止sql注入。

4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名.

6.一般能用#的就别用$.

 

二、SpringMVC常用的注解

1、@Controller

Controller控制器是通过服务接口定义的提供访问应用程序的一种行为,它解释用户的输入,将其转换成一个模型然后将试图呈献给用户。

2、@RequestMapping

我们可以 @RequestMapping 注解将类似 “/favsoft”这样的URL映射到整个类或特定的处理方法上。一般来说,类级别的注解映射特定的请求路径到表单控制器上,而方法级别的注解只是映射为一个特定的HTTP方法请求(“GET”,“POST”等)或HTTP请求参数。

3、@PathVariable

使用 @PathVariable 注解方法参数并将其绑定到URI模板变量的值上。

4. @RequestParam

@RequestParam将请求的参数绑定到方法中的参数上

5. @RequestBody

@RequestBody是指方法参数应该被绑定到HTTP请求Body上。

6、@ResponseBody

@ResponseBody与@RequestBody类似,它的作用是将返回类型直接输入到HTTPresponse body中。

7、@RestController

@RestController用来创建REST类型的控制器,避免重复的写@RequestMapping与@ResponseBody。

8、HttpEntity

HttpEntity除了能获得request请求和response响应之外,它还能访问请求和响应头

9、@ModelAttribute

@ModelAttribute可以作用在方法或方法参数上,当它作用在方法上时,表明该方法的目的是添加一个或多个模型属性(modelattributes)。作用在方法参数上时,表明该参数可以在方法模型中检索到。如果该参数不在当前模型中,该参数先被实例化然后添加到模型中。

 

三、SpringMVC事务的管理方式

PROPAGATION_REQUIRED      如果当前没有事务,就新建一个事务,如果已经存在一个事 务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS      支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY    使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW  新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER          以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED         如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED 类似的操作。

 

四、SpringMVC参数绑定方式

1@RequestParam绑定单个请求参数值;

2@PathVariable绑定URI模板变量值;

3@CookieValue绑定Cookie数据值

4@RequestHeader绑定请求头数据;

5@ModelValue绑定参数到命令对象;

6@SessionAttributes绑定命令对象到session

7@RequestBody绑定请求的内容区数据并能进行自动类型转换等。

8@RequestPart绑定“multipart/data”数据,除了能绑定@RequestParam能做到的请求参数外,还能绑定上传的文件等。

五、SpringMVC请求处理流程

  1. 发出Request请求到前端控制器(DispatcherServlet)
  2. DispatcherServlet请求处理器映射器(HandlerMapping)查找
  3. Handler(Controller),可以根据xml配置、注解进行查找
  4. HandlerMapping向DispatcherServlet返回Handler
  5. DispatcherServlet调用处理器适配器(HandlerAdapter)处理Handler
  6. HandlerAdapter执行Handler
  7. Handler返回给HandlerAdapter ModelAndView 
    ModelAndView是SpringMVC的底层对象,包含Model和View
  8. HandlerAdapter将所得的ModelAndView返回给DispatcherServlet
  9. DispatcherServlet请求视图解析器(ViewResolver)解析视图
  10. ViewResolver向DispatcherServlet返回视图(View) 
    View渲染:将模型数据(存在在ModelAndView中)填充到Request域
  11. 回Response

       六、Springmvc是如何做文件上传的?

1、下载相关jar包。需要引入的jar除了springMVCjar包外,还需要引入

commons.fileupload-x.x.x.jar .commons.io-x.x.x.jar

2、配置文件上传解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  

        <property name="defaultEncoding" value="utf-8"></property>   

        <property name="maxUploadSize" value="10485760000"></property>  

        <property name="maxInMemorySize" value="40960"></property>  

   </bean> 

     3jsp表单form添加属性enctype="multipart/form-data"

     4、控制器里编写文件上传代码

 

七、Spring mvc和Struts2的区别?为什么现在很多人多用springmvc?

1.       spring mvc核心控制器是Servlet,而Struts2是Filter。

2.       Spring Mvc是基于方法设计,而Sturts是基于对象,每次发一次请求都会实例一个action,每个action都会被注入   属性,而Spring更像Servlet一样,只有一个实例,每次请求执行对应的方法即可

3.    spring mvc又是spring中的一个模块,所以spring对于spring mvc的控制器管理更加简单方便,而且提供了全注解方式进行管理,各种功能的注解都比较全面,使用简单,而struts2需要采用XML很多的配置参数来管理

4.    Struts2中自身提供多种参数接受,其实都是通过(ValueStack)进行传递和赋值,而SpringMvc是通过方法的参数进行接收。

5.    Struts更加很多新的技术点,比如拦截器、值栈及OGNL表达式,学习成本较高,springmvc 比较简单,很较少的时间都能上手。

6.    spring mvc处理ajax请求,直接通过返回数据,方法中使用注解@ResponseBody,spring mvc自动帮我们对象转换为JSON数据。

八、Spring mvc的工作流程?

1. 客户端请求提交到DispatcherServlet

2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller

3. DispatcherServlet将请求提交到Controller

4. Controller调用业务逻辑处理后,返回ModelAndView

5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

6. 视图负责将结果显示到客户端

九、MyBatis里面的动态Sql是怎么设定的?用什么语法

    MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现,但是如果要写的完整,必须配合where,trim节点,where节点是判断包含节点有内容就插入where,否则不插入,trim节点是用来判断如果动态语句是以and或or开始,那么会自动把这个and或者or取掉

十、MyBatis在核心处理类叫什么

   MyBatis里面的核心处理类叫做SqlSession

十一、讲下MyBatis的缓存

   MyBatis的缓存分为一级缓存和二级缓存,

    一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/>

十二、Mybatis和Hibernate的区别

1. hibernate是全自动,而mybatis是半自动。

hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理。

2. hibernate数据库移植性远大于mybatis。

hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高。

3. hibernate拥有完整的日志系统,mybatis则欠缺一些。

hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。

4. mybatis相比hibernate需要关心很多细节

hibernate配置要比mybatis复杂的多,学习成本也比mybatis高。但也正因为mybatis使用简单,才导致它要比hibernate关心很多技术细节。mybatis由于不用考虑很多细节,开发模式上与传统jdbc区别很小,因此很容易上手并开发项目,但忽略细节会导致项目前期bug较多,因而开发出相对稳定的软件很慢,而开发出软件却很快。hibernate则正好与之相反。但是如果使用hibernate很熟练的话,实际上开发效率丝毫不差于甚至超越mybatis。

5. sql直接优化上,mybatis要比hibernate方便很多

由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便。总之写sql的灵活度上hibernate不及mybatis。

总结:

mybatis:小巧、方便、高效、简单、直接、半自动

hibernate:强大、方便、高效、复杂、绕弯子、全自动

mybatis:

1. 入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

2. 可以进行更为细致的SQL优化,可以减少查询字段。

3. 缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

4. 二级缓存机制不佳。

hibernate:

1. 功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。

2. 有更好的二级缓存机制,可以使用第三方缓存。

3. 缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。

举个形象的比喻:

mybatis:机械工具,使用方便,拿来就用,但工作还是要自己来作,不过工具是活的,怎么使由我决定。

hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工作都可以摆脱他了,但仅限于它能做的事。

 

十三、 什么是Spring的MVC框架?

Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。

十四、 DispatcherServlet是做什么的

Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。

十五、 WebApplicationContext是做什么的

WebApplicationContext 继承了ApplicationContext  并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。

十六、 什么是Spring MVC框架的控制器?

控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。

十七、 @Controller 注解

该注解表明该类扮演控制器的角色,Spring不需要你继承任何其他控制器基类或引用Servlet API。

十八、@RequestMapping 注解

该注解是用来映射一个URL到一个类或一个特定的方处理法上。