1、SpringMVC
Spring MVC 是一种前端控制器的实现形式,它的基本概念分为静态概念和动态概念。
(1)静态概念:
①当浏览器用户的请求,通过DispatcherServlet进行分发,到达Cotroller层。
②到达Controller层后,生产出我们所需要的业务数据Model。
③然后Model层在通过DispatcherServlet进行传递给我们的View层,最终完成页面展示。
(2)动态概念:
思路:
①当浏览器的请求Request到达DispatcherServlet。(因为DispatcherServlet也是一个Servlet,所有的Request能够被它拦截到)
②然后DispatcherServlet会搜索寻找到一个Mapping,也就是HandlerMaping,并将其功能代理给了HandlerMaping。
③然后HandlerMaping根据本身的配置,找到需要用到的Controller和HandlerInterceptor。
④然后把Controller和HandlerInterceptor制成一个可执行的链条,也就是Handler/HandlerAdapter的适配器。
⑤Handler/HandlerAdapter的适配器将信息返回给了DispatcherServlet,DispatcherServlet便开始调用这个一般化的处理器Handler/HandlerAdapter。
⑥Controller的目的就是生成ModelAndView模型,并且返还给DispatcherServlet。
⑦DispatcherServlet是不会管理视图显示的,所以它就调用ViewResolver视图解析器并通过该方法返回到View对象(ViewResolver的作用是告诉DispatcherServlet哪个视图是用来解析当前这种场景的)。
⑧然后ModelAndView将模型数据传递到View,完成了页面呈现。
2、Mybatis框架
Mybatis和hibernate框架一样,是一款开源的ORM框架。
(1)mybatis框架原理
①mybatis支持普通的SQL查询、存储过程和高级映射的持久层框架。
②mybatis将大量的sql语句,从程序里面剥离出来,配置在配置文件中,实现sql的灵活配置。
(2)OGNL表达式
(3)Mybatis框架和hibernate框架对比:
①“全自动化”的hibernate对数据库结构,提供了完整的封装和全套的映射。
②“半自动化”的mybatis提供的ORM机制,对业务逻辑实现而言,面对的是纯粹的java对象。
③Hibernate会自动生成sql语句,而mybatis不会再运行期间自动生成sql语句执行。
相同点:
Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
Hibernate和MyBatis都支持JDBC和JTA事务处理。
不同点:
hibernate优势:
Hibernate的DAO层开发比mybatis简单,Mybatis需要维护和结果映射。
Hibernate对对象的维护和缓存要比mybatis好,对增删改查的对象维护方便。
Hibernate数据库移值性很好,mybatis数据库移植性不好,不同数据库需要写不同SQL。
Hibernate有更好的二进制缓存机制,可以使用第三方缓存。Mybatis本身提供的缓存机制不佳。
mybatis优势:
mybatis可以进行更为细致的sql优化,减少查询字段。
mybatis容易掌握,而hibernate门槛较高。
总结:
mybatis:小巧、方便、高效、简单、直接、半自动化。
hibernate:强大、方便、高效、复杂、间接、全自动化。