SSH

来源:互联网 发布:unity3d简单小游戏项目 编辑:程序博客网 时间:2024/05/16 00:36

hibernate session接口
hibernate的查询 (比较的getload方法的异同)
hibernate
的查询:Query,find,Criteria,get,load
query
使用hsql语句,可以设置参数是常用的一种方式
criteria
的方式,避免了hql语句,看起来更面向对象了。
find
方式,这种方式已经被新的hibernate 3丢弃,get()方法取代find().
getload方式是根据id取得一个记录,getload的不同:
1>
记录不存在时返回结果:
      load()
方法首先在缓存中找对象,如果检索不到就会抛出ObjectNotException异常可返回实体的代理类实例
      get()
方法直接返回实体类,检索不到时会返回空(null) .
2> load()
方法可以充分利用内部缓存和二级缓存中的现有数据,
     get()
方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL读取数据。
3>
从检索执行机制上对比:
      get
方法和find方法都是直接从数据库中检索,而load方法的执行则比较复杂
  <1>
首先查找sessionpersistent Context中是否有缓存,如果有则直接返回
  <2>
如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常
  <3>
如果是lazy则需要建立代理对象,对象的initialized属性为falsetarget属性为null
  <4>
在访问获得的代理对象的属性时,检索数据库,如果找到记录则把该记录的对象复制到代理对象的target上,
   
并将initialized=true,如果找不到就抛出异常
 
STRUTS
HttpServletRequest
getParameter()getAttribute()方法区别?
总的来说:
getParameter()
是获取POST/GET传递的参数值;    getAttribute()是获取对象容器中的数据值
request.getAttribute方法返回request范围内存在的对象,request.getParameter方法是获取http提交过来的数据。
下面是整理getParametergetAttribute的区别和各自的使用范围:
1 HttpServletRequest
类有setAttribute()方法,而没有setParameter()方法
2
当两个Web组件之间为链接关系时,被链接的组件通过getParameter()方法来获得请求参数
 
例如假定welcome.jspauthenticate.jsp之间为链接关系,welcome.jsp中有以下代码:
      <a  href="authenticate.jsp?username=wolf">authenticate.jsp  </a>
     
或者:
      <form  name="form1"  method="post"  action="authenticate.jsp">
         
请输入用户姓名:<input  type="text"  name="username">
          <input  type="submit"  name="Submit"  value="
提交">
      </form>
      
authenticate.jsp中通过request.getParameter("username")方法来获得请求参数username:
       <%  String  username=request.getParameter("username");  %>
3
当两个Web组件之间为转发关系时,转发目标组件通过getAttribute()方法来和转发源组件共享request范围内的数据。
   
假定authenticate.jsphello.jsp之间为转发关系。authenticate.jsp希望向hello.jsp传递当前的用户名字,如何传递这一数据呢?
    
先在authenticate.jsp中调用setAttribute()方法:
        <%
        String  username=request.getParameter("username");
        request.setAttribute("username"
username);
        %>
        <jsp:forward  page="hello.jsp"  />
       
hello.jsp中通过getAttribute()方法获得用户名字:
        <%  String  username=(String)request.getAttribute("username");  %>
        Hello:  <%=username  %>
    
从更深的层次考虑,request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。          request.getParameter()方法返回String类型的数据。
     request.setAttribute()
getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。
    
这两个方法能够设置Object类型的共享数据。
        request.getParameter()
取得是通过容器的实现来取得通过类似postget等方式传入的数据。
        request.setAttribute()
getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
        getAttribute
是返回对象,getParameter返回字符串

AOP是什么?
AOPOOP的的补充和完善。是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,AOP是调用者和被调用者之间的解耦的一种实现。使代码更具有可读性以及更容易设计和维护,改善了代码质量。
OOP
引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当需要为分散的对象引入公共行为的时候,OOP则显得无能为力。例如日志功能分布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。这种散布在各处的无关的代码被称为横切(cross-cutting)代码。
 
所谓方面,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

AOP应用范围
Authentication 权限
Caching
缓存
Context passing
内容传递
Error handling
错误处理
Lazy loading
 懒加载
Debugging
  调试
logging, tracing, profiling and monitoring
 记录跟踪 优化 校准
Performance optimization
 性能优化
Persistence
  持久化
Resource pooling
 资源池
Synchronization
 同步
Transactions
事务
Spring的声明性事务
Spring
是为了解决业务层的事务管理问题。原先用手写代码发起、结束/回滚事务的做法使开发者很容易导致连接池的资源耗尽。Spring的声明性事务管理功能配置灵活简洁清晰。Spring声明式事务时,一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时间隔和事务只读标志组成。目的是将方法包装在事务的上下文中。
 
总结:
Spring
声明性事务配置几种方式BeanNameAutoProxyCreator TransactionProxyFactoryBean
定义了三个事务隔离级别

脏读dirty reads
一个事务读取了被另一个事务改写但还未提交的数据。
不可重复的读non-repeatable reads
一个事务重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务修改过。
幻读phantom read
一个事务(T1)重新执行一个查询,返回一套符合查询条件的行,发现这些行中插入了被其他已提交的事务(T2)提交的行。

传播属性(或传播行为)

传播行为解决的问题:新的事务是否要被启动或者要被挂起或者方法是否要在事务环境中运行。
定义了关于客户端和被调用方法的事务边界。Spring的七种传播行为:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--
支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--
支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--
新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--
以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED--
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
只读属性
 一个事务只对后台数据库执行数据读操作,通过声明只读事务给后台数据库实施一个合适的优化措施的机会。
只有将那些具有启动新的事务的传播行为的方法的事务标志为只读才有意义
事务超时
 
避免了长时间的事务锁定,因为事务可能涉及到对后台数据库的锁定,长时间运行该事物而不回滚容易导致过多占用数据库的资源,这样就声明一个事务特定数秒后自动回滚。

原创粉丝点击