目录
1.Spring (业务层框架)
Spring 是一个开源轻量级框架,非侵入性的java开发框架,为了削减程序间的耦合度
Spring 的核心是: IOC, DI 和AOP:
控制反转 (IOC): 在传统的开发中,我们需要一个对象时需要我们自己主动的去创建, 在Spring开发模式中, Spring容器使用工厂模式为我们创建了所需要的对象, 我们使用不需要自己去创建, 直接调用Spring为我们提供的对象即可,
依赖注入 (DI): String使用javaBean对象的Set方法或者带参数的构造方法为我们创建所需要的对象时将其属性自动设置所需要的值的过程就是依赖注入
面向切面(AOP): 面向对象的(OOP)思想中, 我们将事务纵向抽象成一个一个对象,而在面向切面编程中,我们将一个个对象某些类似的 方面抽象成一个切面, 对这个切面进行一些如权限验证, 事务管理,记录日志等公用操作处理过程
2.Hibernate (持久层框架)
Hibernate是一个ORM框架, 是对JDBC的封装, 简化对数据库表的操作
ORM是对象关系的映射, 通过实体类与数据库表建立映射,就是通过持久层操作来代替SQL语句操作数据库表.
简单的说就是把我们程序中的实体类和数据库表建立起来对应关系,操作对象就相当于操作数据库表
Hibernate的核心原理就是对象关系映射(ORM) ,就是通过java的反射机制来实现.
Java反射机制: 在java运行状态中, 对于任何一个类, 都能够知道这个对象的所有属性和方法, 就是对任意一个对象都能够调用他的任意属性和方法, 这种状态获取以及动态调用的方法就是java的反射机制
实现:
1. Hiberante的主配置文件为hibernate.cfg.xml,其中定义了数据源、连接池、缓存、事务、表生成策略等配置
2. 通过*.hbm.xml映射配置文件,定义了JavaBean对象和数据库表之间的映射关系,还定了对象和对象之间的映射关系,包括:一对一、多对一、一对多、多对多
Hibernate提供了缓存:
缓存机制: Session中缓存叫一级缓存
SessionFactory中的叫二级缓存
一级缓存的工作原理:
一个请求通过session去数据库查数据,返回session,session的一级缓存保存一份返回客户端, 第二次客户端发送请求,
先去session的一级缓存里找,找到了就返回客户端
快照机制:就是数据库的备份,也就是一级缓存的备份. 它也是一个map结构.程序员是干预不了的
快照的工作原理: 第一此请求,会先去数据库查数据, 返回session中, 一级缓存保存一份,快照保存一份, 第二次请求,对比快照的数据和一级缓存的数据是否一致.如果不一致,以一级缓存为准,更新快照数据.
快照区有什么用呢?
持久态对象能自动去更新数据库,其实是完全依赖里面的快照区的,相当于把你的数据照了一个快照,快照放在它的一个区域里面,它提交的时候都会与快照去匹配,快照区的原理是会去比对你的数据是否一致,如果不一致,就会自动更新数据出来,就会自动更新数据库,其实是完全依赖了它的快照区
HQL语句:
HQL是hibernate 特有的语言,用来代替SQL语句.其实就是对SQL的封装. 它将实体类名代替表名,将实体类属性代替字段,
QBC语句:
QBC是完全面向对象的一次查询, HQL和SQL都不用写直接调用对象的静态方法去拼装sql
就性能而言:
SQL --- > HQL --- > QBC
3. MyBatis (持久层框架)
Mybatis是一个对象关系映射的框架, 是对JDBC进行封装的框架. Mybatis 通过xml或者注解进行配置,将java对象与sql语句中的参数自动映射生成最终执行的SQL语句, 并将SQL语句执行结果自动映射成java对象, 返回给业务层(service) 应用
Mybatis框架原理:
1. sqlMapConfig.xml:运行环境配置(数据源), 加载mapper映射文件, 用于配置mybatis框架的运行环境
2. sqlSessionFactoryBuilder: 读取主配置文件内容, 返回框架的核心对象SqlSessionFactory
3. sqlSessionFactory: 它是Mybatis 框架的核心对象, 它是线程安全的, 通过它创建SqlSession
4. sqlSession: 发起数据库的CRUD操作
5. Executor: 执行数据库CRUD操作
6. MappedStatement: 输入输出映射对象
1) 输入映射:
java简单类型 (数据类型)
pojo类型 (对象类型)
2) 输出映射
Java简单类型 (数据类型)
Pojo类型 (对象类型)
7. 数据库
mapper代理开发方法:
- mapper映射文件中namespace属性值,必须是mapper代理接口的全限定名称
- mapper映射文件中的sql语句标签的声明,与mapper接口中的方法声明一致
2.1.sql语句标签的resultType属性指定的类型(如果返回值是一个集合list,resultType指定的是集合中存放的类型),
与接口方法的返回值类型一致
2.2.sql语句标签的id属性值,与接口方法的名称要一致
2.3.sql语句标签的parameterType属性指定的类型,与接口方法的形参类型一致
mapper通用接口:
Mybatis提供的mapper是一个通用接口,里面提供了很多的通用CRUD方法 (API).
4. Struts2(表现层框架)
Struts2是一种基于MVC 模式的轻量级Web框架
MVC是什么?
M (Model) 模型
V (View) 视图
C (controller) 控制器
主要用于前后端,逻辑, 数据, jsp,html等分离的.
SpringMVC的三层设计能有效消减程序间的耦合度
Struts.xml:
配置开启Struts2的开发者模式
Web.xml:
配置Struts2的核心拦截器
Struts2中的配置文件
配置文件说明:
在Struts2中提供了6个配置文件, 他们的加载时机是tomcat启动服务一加载我们的应用时, 就加载Struts2的配置文件, 他们的加载顺序入下图:
配置文件的注意事项:
1, Struts2 提供了两种配置方式:
一种是key = value的方式, 即使用.properties文件
第二种是xml文件配置, 推荐xml文件配置(因为它能描述层级关系)
2, 当多个配置文件中. 有相同的参数, 后加载的会把前加载的值覆盖
动作类的三种创建方式:
第一种: 无侵入式创建 --- 实际开发中基本不用
第二种: 实现Action接口的定义方式 ----- 实际开发中用的也不多
第三种: 继承Action 接口的实现类ActionSupport -----用的最多
注意事项: 动作类必须以Action结尾.
Struts2 工作原理:
5. SpringMVC(表现层框架)
SpringMVC是spring框架的一个模块, 是基于MVC的表现层的框架, 用于web项目开发
MVC是什么?
M (Model) 模型
V (View) 视图
C (controller) 控制器
主要用于前后端,逻辑, 数据, jsp,html等分离的.
SpringMVC的三层设计能有效消减程序间的耦合度
SpringMVC的三大组件:
处理器映射器(HandlerMapping)
处理器适配器(HandlerAdapter)
视图解析器(ViewResolver)
注意事项: 默认的处理器映射器, 已经过时, 在企业中已经不使用了.
可以使用的映射器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
注意事项: 默认的处理器适配器, 已经过时, 在企业中已经不使用了
可以使用的映射器: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
运行项目这时会出错, 只需要配置下面配置即可
注意事项: 处理器映射器和处理器适配器, 需要配对使用
<!-- 注解驱动的方式配置处理器映射器和处理器适配器,说明:
1.它等于同时配置RequestMappingHandlerMapping/RequestMappingHandlerAdapter
2.在企业项目中的推荐使用方式
-->
<mvc:annotation-driven> </mvc:annotation-driven>
SpringMVC框架原理:
6. SpringMVC的工作流程
1、用户发送请求至前端控制器DispatherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器一并返回DispatcherServlet
4、DispathcherServlet通过HandlerAdapter处理器适配器调用处理器
5、执行处理器(Controller,后端)
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispathcherServlet对View进行渲染视图
11、DispatcherServlet响应用户
7. Strats2的工作流程
1.请求过来,会加载web.xml文件
2.然后加载到struts2的核心过滤器,并加载struts2的相关配置文件,其中包括struts.xml文件
3.根据struts.xml文件获取action的请求路径,然后actionProxy会生成对应的一个action代理实例化对象
4.这个代理类对象顺序地走默认的18个拦截器
5.到action类,处理相应的业务,完了之后再读取struts.xml文件获取result返回路径
6.根据result返回路径返回用户页面地址,期间再逆序地经过默认的拦截器
7.response返回结果,渲染页面,展示数据给用户
8. Mybatis 执行流程
1、读取并解析配置文件mapper.xml
2、读取并解析映射信息,创建sqlSessionFactory
3、打开sqlSession
4、创建并开启事务Transation
5、持久化操作
6、提交事务
7、关闭sqlSession
8、关闭sqlSessionFactory
9. Hibernate执行流程
1、读取并解析配置文件hibernate.cfg.xml
2、读取并解析映射信息,创建SessionFactory
3、打开Session
4、创建并开启事务Transation
5、持久化操作
6、提交事务
7、关闭Session
8、关闭SessionFactory
10. Struts2 和 SpringMVC 的区别
性能上的不同:
1, Struts2 是基于类的类级别的拦截器, 一个类对应一个request上下文,所有Action变量是共享的
2, SpringMVC 是基于方法的方法级别拦截器, 一个方法对应一个request上下文,所有方法之间不共享变量
3, 由于Struts2 需要针对每个request进行封装, 把request, session等 servlet生命周期的变量封装成一个一个map,供每一个Action使用, 并保证 线程安全, 所以比较消耗内存
开发效率上的不同:
1, SpringMVC集成了Ajax ,只需要一个注解 @ResponseBody就可以使用
2, Struts2拦截器集成了Ajax, 在 Action中处理时需要安装插件
11. Hibernate 和 Mybatis的区别
开发效率:
1, Hibernate sql语句已经被封装,提供了 HQL语句操作对象就等于操作数据库, 可以加快开发速度
2, Mybatis, 实现了mapper接口, 提供了一些列简单增删改查API 其他复杂的sql语句就需要 在配置的xml中写, 所有开发效率低一点
性能方面
Hibernate 的HQL是对sql进过封装的, 所以在运行中会消耗一些性能
Mybatis 是手动编写的sql, 可以避免不需要的查询,提高系统性能
对象管理:
Hibernate 是完整的对象关系映射框架, 开发中不需要多关注底层
Mybatis 是半自动化, 需要自行管理映射关系