Struts
java Web开源框架,实现了MVC设计模式。
Hibernate
Hibernate是ORM(Object Relational Mapping)框架,ORM是描述对象和关系型数据库之间映射的元数据,将java对象持久化到关系数据库中。
Hibernate做的事情:
(1)将对象模型存入关系模型
(2)解决阻抗不匹配问题(java类中有继承关系,但关系型数据库中不存在)
Hibernate持久对象的声明周期
Transient对象:数据库中没有记录,没有纳入session管理
Persistent对象:数据库中有记录,纳入session管理
Detached对象:数据库中存在记录,没有纳入session管理
Hibernate加载数据
get不支持延迟加载,load支持延迟加载,返回代理对象,只有使用对象时才会加载。
SessionFactory线程安全,提供缓存机制;Session不是线程安全,一线程一Session。
Session.flush()清理缓存,执行SQL语句。Session执行flush的情况:
(1)事务提交时执行
(2)显示调用flush
(3)执行查询iterate()
事务隔离级别
未提交读:没有commit就可以读
提交读:提交后读,正常(但是存在不可重复读的情况)
可重复读:读取数据时被锁住(存在读取的时候,别人增加或者删除,再读就不一样)
序列号读:最严格的情况
iterate()有N+1问题,查询时使用缓存,第一次查询会缓存,再次查询就先看缓存中是否有,有的话直接使用,否则发出查询语句。所以先查询所以id,返回n条记录,然后再根据id查询元素。
Hibernate缓存
一级缓存:生命周期和Session一致,所以称为Session级缓存。支持一级缓存的方法:get,load,iterate
二级缓存:进程级缓存或SessionFactory级缓存。所有Session共享,一般使用EHCache
启用查询缓存query.setCacheable(true);
----------------------------------------------------------------------------------------------
Spring
Spring是一个开源的分层框架,分层结构如下图所示。可以使java对象的松散耦合,提供灵活的中间件服务。
spring的组成包括7大模块
(1)Spring Core:核心容器,BeanFactory提供组件的声明周期管理
(2)ApplicationContext:Spring的上下文,提供事件处理和国际化等支持
(3)WebApplicationContext:Spring的web上下文,提供web开发支持
(4)Spring DAO:提供JDBC和事务支持
(5)Spring ORM:提供ORM框架的支持
(6)Spring AOP:提供面向切面编程的支持
(7)Spring MVC:MVC框架,相当于Struts
Spring IOC
IOC(Inversion Of Control)控制反转,或者称为DI(Dependency Injection)依赖注入。
对象之间的关系由容器动态建立,代码耦合度低。由Set方法或者构造器来建立依赖关系。
Spring AOP
AOP(Aspect Orient Program)面向切面编程。将应用程序的交叉处理的业务逻辑提取出来,封装成切面。由AOP容器在适当的时机将切面动态织入到业务逻辑代码中,降低了代码的耦合度。
AOP的原理是采用java的动态代理。代理对象是目标对象的子类,所以目标对象不能是final类。
Spring 持久层支持
Spring采用DAO模式,封装模板类HibernateDAOSupport,JDBCTemplate.
Spring事务
HibernateTransactionManager支持事务。包括声明式事务、编程式事务。
声明式事务:使用AOP为Service对象提供事务切面