SSH有关理解


1、Struts2工作原理

a、客户端发送请求到服务端发出请求,在web.xml配置了Strust2的主过滤器
StrutsPreparedAndExcuteFilter,和对应的过滤资源路径
b、经过几个过滤器会到FilterDispatcher过滤器。经过ActionProxy代理Action,根据Struts配置文件信息,和请求的URI决定调用哪个Action的哪个方法。
c、Action中的方法执行完成后会返回一个逻辑视图,ActionInvocation类负责将逻辑视图映射到具体的物理视图中,然后显示结果


2、Hibernate的工作原理及优点

A、原理
1)创建一个Configuration配置对象,调用它的Configure()方法获取Hibernate的主配置文件,加载数据库连接和方言信息,已经Hibernate的配置的映射文件。
2)通过Configuration对象的buildSessionFactory()方法创建一个SessionFactory
3)SessionFactory对象可以OpenSession或者getCurrentSession()方法获取一个Session对象
4)用Transaction tx=Session.beginTransaction()方法开启事务
5)Session.save()\delete()\update()\get()方法实现增删改查 或者创建Criteria对象或者Query对象执行更为复杂的查询
6)提交事务,tx.commit()
7)出现异常时可以回滚事务tx.rollback()
8) 关闭Session对象
B、优点

1)对JDBC进行封装,简化了数据访问和操作的重复性代码。
2)Hibernate是一个优秀的持久层框架,完全实现ORM对象关系映射,很好的实现对象和关系数据的转换。
3)H关系ernate提供访问各种数据库和数据源的方言,能支持多种数据,解决了各种数据库产品的SQL语句差异在更换数据库是的问题。


3、Hibernate的缓存有哪些?简单介绍下

Hibernate的缓存有两个一级缓存和二级缓存
1)一级缓存:session级的缓存也叫事务级的缓存,只缓存实体,生命周期和session一致。不能对其进行管理。
2)二级缓存:sessionFactory缓存,也叫进程级的缓存,使用第3方插件实现的,也只缓存实体,生命周期和sessionFactory一致,可以进行管理。首先配置第3放插件           ,我们用的是EHCache,在hibernate.cfg.xml文件中加入<property name="hibernate.cache.user_second_level_cache">true</property>在映射中也要显示的          调用,<cache usage="read-only"/>二级缓存之查询缓存:对普通属性进行缓存。如果关联的表发生了修改,那么查询缓存的生命周期也结束了。在程序中必须手动启          用查询缓存:query.setCacheable(true);
4、如何优化Hibernate?
1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰

5.Hibernate有哪几种查询数据的方式
(1)导航对象图查询
(2)OID查询
(3)HQL
(4)QBC
(5)本地SQL

6、Session.get(Class,id)和Session.load(Class,id)的区别

1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;
   如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出异常:       rg.hibernate.ObjectNotFoundException;
        2:load支持延迟加载,get不支持延迟加载。


7、Spring的IOC、DI、AOP分别指什么,原理、作用是什么?为什么使用Spring框架?
1、IOC: 控制反转<Inversion of control> 应用工厂设计模式和反射原理实现
将对象的初始化装配和调用的主动权交个容器来处理,通过配置文件通知容器去装配和调用哪一个bean对象,这样可以降低各个层之间的耦合度。
提高了程序的代码重用性和可维护性。
   实现方法:<1>依赖查找(Dependency Lookup):容器提供回调接口和上下文环境给组件。EJB和Apache Avalon都使用这种方式。
    <2>依赖注入(Dependency Injection):组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。后者是时下最流行的IoC类型
2、DI:依赖注入Dependency Injection
在运行期,由外部容器动态地将依赖对象注入到组件中
3、AOP:面向切面编程 Aspect Oriented Programming 实现原理是动态代理设计   
   可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序统一添加功能的一种技术。
   主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等

8、Spring 的有点:
1、降低组件之间的耦合度,实现软件各层之间的解耦。
2、可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播、
3、容器提供单例模式支持,开发人员不再需要自己编写实现代码。
4、容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能
5、容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。
6、Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。

你可能感兴趣的:(设计模式,spring,Hibernate,struts)