Hibernate:
Hibernate的懒加载:所谓懒加载(lazy)就是延时加载,延迟加载。就是当我们要访问的数据量过大时,明显用缓存不太合适,
因为内存容量有限 ,为了减少并发量,减少系统资源的消耗。
OR Mapping 介绍:ORM(Object Relational Mapping) -- 是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。简单说:ORM是通过使用描述对象和数据库之间的映射的元数据,将Java程序中的对象 自动持久化到关系数据库中。本质上就是讲数据从一种形式转换成另外一种形式。
hibernate缓存机制:包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存。
一级:session把查询结果放在session缓存中,第二次查询时,session根据OID判断缓存中是否存在要查询的对象,如果存在,则不再查询,而是将缓存数据返回。
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
hibernate和ibatis和mybatis的区别:
Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些;Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快;
Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。
Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
spring:
bean的初始化:1.类构造器初始化:最常用的方法,也是最简单的方法,构造器可以不用写可以用默认的(它保证了Bean实例在实例化后就可以使用。);2.静态工厂初始化(了解);3.实例工厂初始化
AOP原理:面向切面编程,AOP是能够让我们在不影响原有功能的前提下,为软件横向扩展功能
提到AOP大家都知道他的实现原理是动态代理,动态代理的代理类是在程序运行时创建的,可以很方便的对代理类的函数进行统一的处理
spring IOC中四种依赖注入方式:a、接口注入;b、setter方法注入;c、构造方法注入;d、注解方法注入;setter注入模式在实际开发中有非常广泛的应用,setter方法更加直观。
springMVC:
Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称。
优点:
1、分工明确(开发人员可以只关注整个结构中的其中某一层);2、松耦合(可以降低层与层之间的依赖);3、复用性高(利于各层逻辑的复用);4、有利于标准化(有利于通过工程化、工具化产生管理程序代码);概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。
缺点:
分层式结构也不可避免具有一些缺陷:
1、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
2、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
3、由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。
4、MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
*如何改善:
第一个缺点,可以采用一些设计模式来到改善。
第二个缺点,可以通过系统的缓存机制来减小对性能的影响;
springmvc和struts的区别:spring mvc 和 struts2的加载机制不同:spring mvc的入口是servlet,而struts2是filter(servlet和filter区别见本文最后)