SpringMVC&&Mybatis

一:SpringMVC

目录

一:SpringMVC

1:SpringMVC是什么:

2:SpringMVC的执行流程:

3:SpringMvc的优点:

4:SpringMVC如何重定向和转发:

5:SpringMVC与AJAX如何相互调用:

6:如何解决POST和GET的乱码:

7:SpringMVC常用注解:

9:springMVC和struts2的区别有哪些:

二:Mybatis:

1:Mybatis是什么:

2:Mybatis工作原理:

4:Mybatis优点:

6:Mybatis分页原理

7:Mybatis一级二级缓存:

8:MyBatis实现一对多有几种方式,怎么操作的?

9:Mybatis动态sql底层原理:

5、MyBatis与Hibernate有哪些不同?

mybatis中一级缓存和二级缓存的简单介绍


1:SpringMVC是什么:

是一个实现了MVC模式的轻量级web框架。通过把Model,View,Conrtoller分离,从而把web分开,简化开发,方便操作。

2:SpringMVC的执行流程:

1:dispatchServert(前端控制器)发送请求到处理器映射器

2:处理器映射器返回一个处理器对象给前端控制器(如果有拦截器,这里还会返回一个拦截器对象)

3:前端控制器通过这个处理器对象找到合适的处理器适配器

4:处理器适配器执行完成后返回一个ModelAndView对象给前端控制器

5:前端控制器通过该对象找到视图解析器解析

6:视图解析器解析后返回一个View给前端控制器

7:前端控制器渲染这个View

8:前端控制器响应用户

3:SpringMvc的优点:

1:支持各种视图技术,不只是JSP

2:可以与Spring容器完美结合

3:支持各种请求资源的映射

4:SpringMVC如何重定向和转发:

forward:转发,在return前面加上

redirect:重定向,在return前面加上

5:SpringMVC与AJAX如何相互调用:

通过Jason框架可以把java中的对象转换成JS可以识别的jason数据。

(1)加入Jackson.jar

(2)在配置文件中配置json的映射

(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。

6:如何解决POST和GET的乱码:

POST:加入编码过滤器

GET:更改tomcat配置;对参数重新编码

7:SpringMVC常用注解:

@RequestMapping:处理请求的映射

@RequestBody:将jason对象编程可识别的java对象

8:SpringMVC中拦截器怎么写:

1:实现HandlerInterceptor接口

2:在配置文件中配置拦截器

9:springMVC和struts2的区别有哪些:

(1)springmvc的入口是一个servlet即前端控制器(DispatchServlet)

         而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。

(2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),                    struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

(3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

二:Mybatis:

1:Mybatis是什么:

mybatis是一个优秀的持久层框架,他对jdbc操作数据库的过程进行了封装,使开发者只用关注sql本身,不用去注册驱动,加载链接等复杂的过程。 
mybatis通过xml或者注解的方式,将要执行的各种sql语句配置起来,并通过Java对象和statement中的sql语句映射生成最终的sql语句,最后由mybatis框架执行sql语句,并将结果映射成Java对象返回。 

2:Mybatis工作原理:

mybatis通过配置文件创建sqlsessionFactory,sqlsessionFactory根据配置文件,配置文件来源于两个方面:一个是xml,一个是Java中的注解,获取sqlSession。SQLSession包含了执行sql语句的所有方法,可以通过SQLSession直接运行映射的sql语句,完成对数据的增删改查和事物的提交工作,用完之后关闭SQLSession。 

读取配置文件

根据配置文件构建SqlSessionFactory

通过SqlSessionFactory创建SqlSession

使用SqlSession对象操作数据库

关闭SqlSession

3:mapper接口工作原理:

通过jdk的动态代理方式为mapper接口创建proxy对象,代理对象会拦截接口中的方法,使它执行mapperStatement所代表的sql语句,并且把结果封装返回。

4:Mybatis优点:

1:支持对象关系映射

2:使用动态sql,是基于sql语句编程,更加灵活

3:能很好的与各类数据库兼容

4:能与Spring很好的集成

5:Mybatis缺点:

1:sql语句的编写工作量大

2:可移植性比较差,sql语句依赖于数据库,所以可移植性差

6:Mybatis分页原理

  Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。

可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

原理:分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,添加对应的物理分页语句和物理分页参数。

7:Mybatis一级二级缓存:

一次缓存:(默认开启)是SqlSession级别的缓存,缓存在SqlSession中,commit过后会清除

二级缓存:mapper级别的缓存,缓存在SqlSessionFactory中,需要开启,并且还需要实现序列化,(Serializable接口,实现序列化接口)commit过后还会存在,再次访问时就会先访问上次的缓存内容

8:MyBatis实现一对多有几种方式,怎么操作的?

        有联合查询和嵌套查询。

联合查询是几个表联合查询,只查询一次,通过在resultMap里面的collection节点配置一对多的类就可以完成;

嵌套查询是先查一个表,根据这个表里面的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的查询通过select节点配置。

9:Mybatis动态sql底层原理:

Mybatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接sql的功能。

Mybatis提供了9种动态sql标签:trim | where | set | foreach | if | choose | when | otherwise | bind。

10:

5、MyBatis与Hibernate有哪些不同?

(1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。

(2)Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。 

(3)Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。 

mybatis中一级缓存和二级缓存的简单介绍

mybatis的一级缓存:

  MyBatis会在一个SqlSession对象中创建一个本地缓存,对于每一次查询,都会根据查询的条件去本地缓存中查找是否在缓存中,如果在缓存中,就直接从缓存中取出,然后返回给用户;否则,从数据库读取数据,将查询结果存入缓存并返回给用户。

  一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

 第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

  二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession去操作数据库得到数据会存在二级缓存区域,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

  二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。

如果缓存中有数据就不用从数据库中获取,大大提高系统性能。

猜你喜欢

转载自blog.csdn.net/qq_31051117/article/details/88788088