关于java SSH的一些知识点的解析

来源:互联网 发布:桌子高度 知乎 编辑:程序博客网 时间:2024/06/01 08:09

关于java SSH的一些知识点的解析

1,Hibernate中session.get()和session.load()的区别

      session.get()和session.load()都可以根据实体的id从数据库读取相应的记录,它们的区别是:

        load方法没有取到相应的记录时候会抛出一个ObjectNotFoundException的异常,而get没有取到记录会返回一个null值。

        load方法可以返回一个实体的代理类实例,get只能返回实体类。

        load方法可以充分的利用内部缓存和二级缓存获取相应的数据。get方法如果在内部缓存没有查到数据,将越过二级缓存直接用sql语句查询或者获得相应的数据。


2.    Hibernate中update()方法和saveorupdate方法的区别

            Hibernate中实体有三种状态,一是 瞬态对象   就是刚刚new出来的实体 没有和数据库的记录想关联,没有主键id等, 二是持久化对象 这类对象是在session缓存中存在,与数据库记录相关联。存在主键id等, 三是托管态对象,它存在主键id 在session缓存中不存在了,也与数据库中的记录没有联系了。 update对不是持久化对象是不能对其进行update的,saveorupdate()方法是如果不是持久化对象就先执行save方法使得对象变为持久化对象在进行update操作。



3.  在数据库中进行条件查询时很缓慢,如何进行优化?

       建立索引,

       减少表之间的关联,

       优化sql,尽量不要对全表查询,把数据量大的表放在前面,

        简化查询字段,不要用到的字段尽量不要。


4  struts1.2和struts2.0的区别?
        a、Action类:
        struts1.2要求Action类继承一个基类。struts2.0Action可以是简单的JOPO对象或者(都会)继承ActionSupport基类
        b、线程模式
        struts1.2 Action是单例模式的并且必须是线程安全的,因为仅有一个Action的实例来处理所有的请求。
        单例策略限制了Struts1.2 Action能做的事情,并且开发时特别小心。Action资源必须是线程安全的或同步的。
         struts2.0 Action为每一个请求产生一个实例,因此没有线程安全问题。
        c、Servlet依赖
        struts1.2 Action依赖于ServletAPI,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。
        struts2.0 Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2Action仍然可以访问初始的Request和Response。
        但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。
        d、可测性
        测试struts1.2 Action的一个主要问题是execute方法暴露了ServletAPI(这使得测试要依赖于容器)。一个第三方扩展:struts TestCase
        提供了一套struts1.2的模拟对象来进行测试。
         Struts2.0 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。

0 0
原创粉丝点击