当前位置:  编程技术>java/j2ee

jsp Hibernate 函数简介

    来源: 互联网  发布时间:2014-10-17

    本文导语:  1、Configuration/SessionFactory/Session Configuration实例代表了一个应用程序中Java类型 到SQL数据库映射的完整集合. Configuration被用来构建一个(不可变的 (immutable))SessionFactory. SessionFactory是线程安全的,创建代价很高。 Session是非线程安全...

1、Configuration/SessionFactory/Session
Configuration实例代表了一个应用程序中Java类型 到SQL数据库映射的完整集合. Configuration被用来构建一个(不可变的 (immutable))SessionFactory.
SessionFactory是线程安全的,创建代价很高。
Session是非线程安全的,轻量级的。一个Session对应一个JDBC连接,
Session的connection()会获取Session与之对应的数据库连接Connection对象。
Session的功能就是操作对象的,这些对象和数据库表有映射关系。
Session操作的对象是有状态的,分三类:
自由状态(transient): 未持久化,未与任何Session相关联,数据库表中没有对应的记录。
持久化状态(persistent): 与一个Session相关联,对应数据库表中一条记录。
游离状态(detached): 已经进行过持久化,但当前未与任何Session相关联,数据库表中曾经有一条记录,现在还有没有就不知道了。
游离状态的实例可以通过调用save()、persist()或者saveOrUpdate()方法进行持久化。持久化实例可以通过调用 delete()变成游离状态。通过get()或load()方法得到的实例都是持久化状态的。游离状态的实例可以通过调用 update()、0saveOrUpdate()、lock()或者replicate()进行持久化。游离或者自由状态下的实例可以通过调用merge()方法成为一个新的持久化实例。
2、Session的save()/persist()/update()/saveOrUpdate()/merge()/delete()方法
save()方法将指定对象保存,插入表中一条数据;
persist()方法将指定对象保存,插入表中一条数据,我还没发现它和save方法有什么特别之处。
replicate()方法完全使用给定对象各个属性的值(包括标识id)来持久化给定的游离状态(Transient)的实体,很暴力啊,其中还需要指定存储模式(有四种保存策略供选择)。
update()方法将指定对象更新,更新表中一条数据;
saveOrUpdate()方法接收一个实体对象,根据实体对象的id判断是否已经存在进行保存或更新操作,这样保存和更新方法就统一了;
merge()方法将给定的对象的状态复制到具有相同标识的持久化对象上。
delete()方法将指定对象删除,删除表中一条数据;
特别注意:为了使用saveOrUpdate()方法,在由定义映射文件时,通过设定标签的unsaved-value="null"来判断执行什么操作: 当id属性等于unsaved-value的值(在此为null)时,则认为还没有保存,应该执行保存操作,否则执行更新操作。这样设定之后,可以使用saveOrUpdate()方法来统一保存和更新的方法。



unsaved-value可以设定的值有四个:
any:总是储存
none:总是更新
null:id为null时储存(预设)
valid:id为null或是指定值时储存
3、Session的get()/load()方法
get()方法会总是查询实体对象,不存在时候返回null;
load()方法也是获取一个实体对象,不存在时候抛空指针异常。
4、Session的clear()/evict()方法
clear()方法清除Session级别缓存中的所有实体(包括各种状态)对象,目的是释放内存。
evict()方法清除Session级别缓存中的指定的实体(包括各种状态)对象。
当然,Session关闭后,这些缓存也就不存在了,会等待JVM回收。
5、Session的flush()方法
flush()强制持久化Session缓存中的实体对象。一般还会调用clear()或evict(),目的是赶紧保存,释放宝贵内存资源。
6、Session的commit()/rollback()方法
commit()方法用于提交Session上的事务,否则工作单元不会对数据库产生影响。如果执行出现异常(也就是commit()失败了),则之前的操作取消,执行rollback()可撤消之前的操作。
7、Session的close()/isOpen()/isConnected()/reconnect()方法
close()方法关闭Session所对应数据库连接,与其相关联的对象生命周期结束。
isOpen()方法检查Session是否仍然打开,如果Session已经断开,则可以使用reconnect(Connection connection)来重新让Session关联一个JDBC连接。
isConnected()方法检查当前Session是否处于连接状态。
8、Criteria、DetchedCriteria和Query接口
Criteria和Query的实例都是和Session绑定的,其生命周期跟随着Session结束而结束。
DetchedCriteria实例相当于一个SQL模板,目的是为了复用。其中的getExecutableCriteria(session)方法接收一个Session对象,并与之绑定,返回一个Criteria对象。
9、Hibernate类的initialize()方法
initialize()方法强制Hibernate立即加载指定实体所关联的对象和集合。Hibernate类中还有其他几个很有用但不适很常用的方法。
10、映射文件中的lazy属性
在Hibernate3中,class元素的lazy属性默认是true,如果不需要,则需要显示指定为lazy="false",否则,操作load返回的对象会抛异常。另外Hibernate3中还可以为实体属性指定lazy属性。
11、JDBC事务和JTA事务
Hibernate本身没有事务管理功能,它依赖于JDBC或JTA的事务管理功能,在Hibernate配置文件中,如果不显式指定Transaction的工厂类别属性hibernate.transaction.factory_class的配置,则默认为JDBC事务:
org.hibernate.transaction.JDBCTransactionFactory。
在通过SessionFactory获取到Session后,与Session相关联的JDBC Connection实例就被设定为false。
特别注意:如果数据库不支持事务,比如MySQL的MyISAM引擎的表就不支持事务,声明事务也不会起作用。要使MySQL5的表支持事务,则可以指定表的引擎类型为InnoDB。如果是学习或者研究,目前最好还是使用PostgreSQL 8.3或DB2、Oracle。
JDBC事务总是和一个数据库连接(或一个Session)相关联的。
JTA事务则可以跨越多个数据连接(或多个Session),这些连接还可以是不同数据库的连接,JTA事务一般由容器进行管理。编程只要在多个操作单元的开始和结束定义JTA事务的边界即可。
特别注意:如果使用了JTA事务,则不能再用在JDBC式的事务来管理每个Session的操作,否则会出错。为了程序的的通用性,一般来说,都是使用JTA事务来构建应用,这使用任何环境。当然,也可以使用事务代理为每个JDBC的操作方法加入事务控制。这样也为程序以后移植到JTA容器事务上带来很大方便。其实现在可以使用Spring的事务管理,与Hibernate结合的非常完美。


PS:persist()方法无返回值,save()方法返回对象标识符。
persist()方法只能保存暂态和持久态的对象,save()方法能保存任何状态对象。
共同点:调用完方法后,对象的状态都变成持久态。
get()方法返回对象的实例,而对于load()方法,如果在持久化上下文存在该标识符的对象,就返回该对象的实例,否则返回对象的代理,该代理对象只含有对象标识符。

使用get或load要小心
load可以提高缓存使用效率 但由于是代理 所以在后面操作会更容易出现问题
get是直接访问db 所以cache的作用就没了 但会马上得到结果 麻烦少,但频繁调用势必对服务器压力增加


    
 
 

您可能感兴趣的文章:

  • 请问有JSP的函数大全吗?如session的所有函数。
  • 写后一个JAVABEAN后,在JSP中,怎样才能调用JAVABEAN 中的函数,?<jsp:usebean...看不懂>,
  • 请教,JavaScript中能不能调用JSP写的函数?
  • 如何在JSP中声明函数
  • 有谁说说jsp中的变量与函数定义
  • 在一个jsp里面写一个函数
  • JSP中如何调用JavaScript的函数阿???
  • 怎样另外打开一个窗口显示页面a.jsp?好像有个函数,我忘记了,多谢,
  • JSP中怎样编写时间戳?希望能有现成的函数!
  • JSP 里面 怎么取得用户 的IP地址???有没有什么函数可以做到?
  • 高分求助关于jsp自定义函数的问题
  • 可以在jsp函数中调用javascript中的数组么?如可以,该如何调用?
  • 在JSP中如何实例化构造函数有参数的JavaBean?
  • jsp语法中可以调用javascript的函数吗?
  • 在JSP中调用Bean函数出错的问题
  • 在jsp中,怎样使用一个函数
  • jsp的截取数据函数是什么
  • jsp中如何添加函数?
  • 不好意思,JSP中String大小写转换函数是什么?
  • 如何将jsp的参数或对象传递给javascript的函数
  • jsp Hibernate入门教程第1/3页
  • jsp hibernate的分页代码第1/3页
  • jsp Hibernate批量更新和批量删除处理代码
  • jsp hibernate 数据保存操作的原理
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • JSP简介
  • JSP技术简介
  • JSP中清空cookie代码参考
  • 现有1.jsp、2.jsp、3.jsp三个文件,我怎么在3.jsp文件中得到1.jsp中输入的值?
  • 一个框界网爷包含上下两个网页a1.jsp和a2.jsp,怎么实现a1.jsp自身不变且提交数据到下面的a2.jsp呢?不胜感激,急..
  • 请问jsp和serlet之间怎么通讯,jsp和jsp之间呢?
  • 请问<%@include file="abc.jsp"%>与<jsp:include page="abc.jsp"/>之间的差别
  • response.sendRedirect("index.jsp") 和 <jsp:forward page="index.jsp"/>的区别?
  • 想把一个jsp转到另一个jsp页面,要穿参数,中文的(jsp变量)。谁教教我?!
  • aaa.jsp有如下链接,当单击该链接时将id值传递给bbb.jsp,怎样在bbb.jsp中引用这个id值?
  • jsp+bean还是jsp+ejb还是jsp+servlet还是asp+activex好?
  • 谁能告诉我,怎么调试jsp程序呀!我在jsp中调用java,但是Tomcat这家伙只会给我报jsp文件出错。这可怎么办呀?
  • jsp中如何获得当前jsp文件所在的目录,用request.getServletPath()得到的路径含有jsp文件名,有没有办法得到目录(不含文件名)?
  • 初学jsp,一个html调用一个jsp,这个jsp调用一个javaBean,已编译成类,最后如何部署(用j2sdkee)?
  • 我要学jsp,已经下载了j2ee1.4,需要一个支持jsp引擎的WEB服务器或jsp引擎!!(急,马上给分)
  • jsp中相对路径怎么表示?例如当前目录下的jsp目录里的文件。
  • 我已经在输出前包含了<jsp:include page="2.jsp"/>,
  • 欲学JSP,请教JSP资料,最好电子版。
  • jsp中文乱码 jsp mysql 乱码的解决方法
  • jsp+JavaBean vs jsp+Servlet+JavaBean
  • JSP/html 编辑器 Bravo JSP editor
  • JSP开发入门(五)--JSP其他相关资源
  • <jsp:include page="SystemLeft.jsp?TypeId=<%= itTypeId.toString() %>" flush="true" />


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3