SSH总结

Hibernate工作原理及为什么要用? 

原理

hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc + sql操作数据的方式,从而使开发人员可以话更多精力进行对象方面的开发 

1.读取并解析配置文件 

2.读取并解析映射信息,创建SessionFactory 

3.打开Sesssion 

4.创建事务Transation 

5.持久化操作 

6.提交事务 

7.关闭Session 

8.关闭SesstionFactory 

为什么要用: 

1.    对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 

2.    Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 

3.    hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 

什么是Hibernate延迟加载? 

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。

Hibernate中类之间的关联关系有几种?(如:一对多、多对多的关系) 

  many-to-one、one-to-many、many-to-many、 one-to-one

说下Hibernate的缓存机制 

一、hibernate一级缓存

(1)hibernate支持两个级别的缓存,默认只支持一级缓存;

(2)每个Session内部自带一个一级缓存;

(3)某个Session被关闭时,其对应的一级缓存自动清除;

二、hibernate二级缓存

(1) 二级缓存独立于session,默认不开启;

Hibernate的查询方式 

本地SQL查询、Criteria、Hql

如何优化Hibernate? 

1.使用双向一对多关联,不使用单向一对多 

2.不用一对一,用多对一取代 

3.配置对象缓存,不使用集合缓存 

Struts工作机制?为什么要使用Struts? 

工作机制: 

Struts的工作流程: 

在web应用启动时就会加载初始化ActionServlet,ActionServlet从 

struts-config.xml文件中读取配置信息,把它们存放到各种配置对象 

当ActionServlet接收到一个客户请求时,将执行如下流程. 

    -(1)检索和用户请求匹配的ActionMapping实例,如果不存在就返回请求路径无效信息; 

    -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; 

    -(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; 

    -(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功; 

    -(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的                    Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; 

    -(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件; 

    -(7)ActionForward对象指向JSP组件生成动态网页,返回给客户; 

为什么要用: 

1. JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱。

2. 基于Struts开发的应用:

不用再考虑公共问题

专心在业务实现上

结构统一,易于学习、维护

新手也可写出好程序 

为什么要用spring? 

Spring是一个轻量级的IOC和AOP框架。

  IOC(控制反转)意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转

  AOP(面向切面),它将那些影响多个类的行为封装到可重用的模块中,面向对象是把问题从同类事物中抽象出来,面向切面是把问题从不同类问题中抽象出来。

1. hibernate中get()load()区别

 请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception)。 如果类的映射使用了代理(proxy),load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。 若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该对象时同时装载相关联的那个对象,那么这种操作方式就用得上的了。 如果为相应类映射关系设置了batch-size, 那么使用这种操作方式允许多个对象被一批装载(因为返回的是代理,无需从数据库中抓取所有对象的数据)。 如果你不确定是否有匹配的行存在,应该使用get()方法,它会立刻访问数据库,如果没有对应的行,会返回null。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值