jsp Hibernate 函数简介
Hibernate框架的使用技巧
在Java应用程序中,Hibernate框架作为ORM(对象关系映射)工具,大大简化了数据库操作。为了更好地利用Hibernate,以下是一些关于其使用技巧的。
一、Configuration、SessionFactory与Session
Configuration实例是整个应用程序中Java类型到SQL数据库映射的核心集合。通过Configuration,我们可以构建SessionFactory,这是一个线程安全的对象,但其创建成本较高。与之相对,Session是非线程安全的,但其创建成本较低,且是一个轻量级的对象。每个Session都对应一个JDBC连接,该连接用于操作与数据库表有映射关系的对象。这些对象有三种状态:自由状态、持久化状态、游离状态。针对不同的状态,我们可以使用不同的方法对其进行操作。
二、Session的方法技巧
2. replicate():此方法使用给定对象的所有属性值(包括id)来持久化实体,提供了一种暴力的持久化方式。它有四种保存策略可供选择。
3. update():此方法用于更新指定对象,即更新表中的一条数据。
4. saveOrUpdate():此方法根据实体对象的id判断是否已经存在,从而决定是执行保存操作还是更新操作,为统一保存和更新提供了便捷。
5. merge():将给定对象的状态复制到具有相同标识的持久化对象上。
6. delete():删除指定对象,即删除表中的一条数据。
特别需要注意的是,为了使用saveOrUpdate(),我们需要在映射文件中设定
三、Session的获取与缓存管理
1. get()与load():get()方法会查询实体对象,若不存在则返回null;load()方法也会获取一个实体对象,但若不存在则会抛出异常。
2. clear()与evict():这两个方法用于管理Session的缓存。clear()清除Session缓存中的所有实体对象,以释放内存;evict()则清除指定的实体对象。当Session关闭后,这些缓存将不存在,等待JVM回收。
四、Session的flush()
flush()方法用于强制持久化Session缓存中的实体对象。一般还会结合clear()或evict()使用,以便及时保存数据并释放内存资源。
6、Session的事务提交与回滚
在数据库操作中,Session的mit()方法扮演着至关重要的角色。它负责提交Session上的事务,确保数据库得到所需更改。若执行过程中出现异常,为保证数据一致性,需及时撤销之前的操作,此时可调用rollback()方法进行回滚。
7、Session的生死存亡与重新连接
当我们谈论数据库的Session时,不得不提close()方法。此方法关闭与数据库的连接,标志着相关对象生命周期的结束。若想检查Session是否仍然开启,可使用isOpen()方法。若Session已断开,借助reconnect(Connection connection)方法,可重新为Session分配一个JDBC连接。isConnected()方法则用于确认当前Session是否处于活跃的连接状态。
8、Criteria、DetachedCriteria与Query接口
Criteria和Query实例的生命周期与Session紧密相连,随着Session的结束而终结。DetachedCriteria实例则相当于一个SQL模板,旨在实现复用。通过其getExecutableCriteria(session)方法,可与一个Session对象绑定,转化为实用的Criteria对象。
9、Hibernate的初始化策略
Hibernate的initialize()方法强制立即加载指定实体相关联的对象和集合。在Hibernate类中,尽管有些方法不太常用,但却非常有用。
10、映射文件中的lazy属性设置
在Hibernate3中,默认的lazy属性值为true。对于class元素,如不需要立即加载,必须明确设置lazy="false"。否则,操作load返回的对象可能会引发异常。还可以为实体属性指定lazy属性。
11、JDBC事务与JTA事务的差异与应用
Hibernate本身并不具备事务管理能力,它依赖于JDBC或JTA的事务管理功能。在Hibernate配置文件中,如未特别指定Transaction的工厂类别属性,则默认采用JDBC事务。值得注意的是,某些数据库可能不支持事务功能,如MySQL的MyISAM引擎。若要使MySQL5的表支持事务,需将表的引擎类型设为InnoDB。对于学习或研究目的,推荐使用PostgreSQL 8.3或DB2、Oracle等数据库。
JDBC事务通常与一个数据库连接或Session相关联。而JTA事务则能跨越多个数据连接,甚至是不同数据库的连接。编程时,只需在多个操作单元的开始和结束定义JTA事务的边界。若使用JTA事务,则不宜再使用JDBC式的事务管理,否则可能导致错误。为提高程序的通用性,推荐使用JTA事务构建应用。也可使用事务代理为JDBC的操作方法加入事务控制,便于日后程序移植到JTA容器事务。Spring的事务管理与Hibernate结合得尤为出色。
值得注意的是,persist()方法与save()方法在对象保存方面有所不同。persist()只能保存暂态和持久态的对象,而save()则能保存任何状态的对象。调用这些方法后,对象的状态均变为持久态。get()方法返回对象的实例,而load()方法在持久化上下文中查找对象实例,若无则返回代理。使用get()和load()时需谨慎,load()可提高缓存使用效率,但可能引发后续操作问题。而get()直接访问数据库,不受缓存影响,结果立即得到,但频繁调用可能增加服务器压力。
以上内容,旨在深入Session的各种方法以及事务管理的细节,帮助读者更好地理解和应用Hibernate及JDBC/JTA事务管理。
网络安全培训
- jsp Hibernate 函数简介
- 使用easyui从servlet传递json数据到前端页面的两种方
- 基于HTTP协议的一些实时数据获取技术详解
- PHP正则替换函数preg_replace()报错:Notice Use of und
- 富婆做SPA按摩视频
- 深入了解响应式React Native Echarts组件
- 解决asp.net core在输出中文时乱码的问题
- 介绍水下舞蹈《祈》
- Flex自定义右键菜单具体实现
- BootStrap注意事项小结(五)表单
- jQuery页面刷新(局部、全部)问题分析
- Vue程序调试的方法
- JavaScript中的 new 命令
- Symfony2学习笔记之系统路由详解
- jquery插件treegrid树状表格的使用方法详解(.Net平
- 高叶《狂飙》后首部电视剧将开播