Hibernate工具类
来源:互联网 发布:twttier的营收数据 编辑:程序博客网 时间:2024/05/29 13:27
转自hakunamatata2008的专栏
将一些常用的方法录入自己的工具类中,在使用时直接调用工具类里的方法,给我们编写程序带来了极大的方便,既使得程序简洁直观、便于维护,又很好的做到了代码复用。
这里,在学习Hibernate的过程中,将工具类整理如下,三个版本逐渐提升,参考如下:
Version 1.0
package com.zhangsx.utils;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HbnUtil1 {
private static SessionFactory sf;
static {
try {
sf = new Configuration().configure().buildSessionFactory();
} catch (HibernateException e) {
e.printStackTrace();
}
}
public static Session getSession() {
Session s = null;
if(sf != null && !sf.isClosed()) {
s = sf.openSession();
}
return s;
}
public static void releaseSession(Session s) {
if(s != null && s.isOpen()) s.close();
}
public static void cleanSessionFactory(SessionFactory sf) {
if(sf != null && !sf.isClosed()) sf.close();
}
}
Version 2.0
* 这里使用ThreadLocal来管理Hibernate Session,使得一个线程维护一个Session,实现了线程范围内
的Session共享。
* 使用时将不安全的对象封装进ThreadLocal。
* ThreadLocal提供了线程安全的共享对象,它通过为每一个线程提供一个独立的变量副本来解决变量并
发访问的冲突问题,实现多线程的并发访问。
*关于ThreadLocal的详解,请参见http://blog.sina.com.cn/s/blog_5cee63250100b0mb.html
package com.zhangsx.utils;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HbnUtil2 {
private static SessionFactory sf;
private static ThreadLocal local = new ThreadLocal();
static {
try {
sf = new Configuration().configure().buildSessionFactory();
} catch (HibernateException e) {
e.printStackTrace();
}
}
public static Session getSession() {
Session s = (Session) local.get();
if (s == null && sf != null && !sf.isClosed()) {
s = sf.openSession();
local.set(s);
}
return s;
}
public static void releaseSession(Session s) {
if (s != null && s.isOpen()) {
s.close();
}
local.set(null);
}
}
Version 3.0
* 使用getCurrentSession()方法来管理Hibernate Session,该方法总是返回“当前的”工作单元。
* Session在第一次被使用的时候,即第一次调用getCurrentSession()的时候,其生命周期就开始。然
后她被Hibernate绑定到当前线程。当事务结束的时候,不管是提交还是回滚,Hibernate会自动把
Session从当前线程剥离,并且关闭。若在次调用getCurrentSession(),会得到一个新的Session,并
且开始一个新的工作单元。这是Hibernate最广泛的thread-bound model,支持代码灵活分层(事务划
分和数据访问代码的分离)。
package com.zhangsx.utils;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HbnUtil3 {
private static SessionFactory sf;
static {
try {
sf = new Configuration().configure().buildSessionFactory();
} catch (HibernateException e) {
e.printStackTrace();
}
}
public static Session getCurrentSession() {
if (sf == null)
return null;
return sf.getCurrentSession();
}
public static void clearSessionFactory() {
if (sf != null && !sf.isClosed())
sf.close();
}
}
- Hibernate工具类
- Hibernate工具类
- Hibernate工具类
- Hibernate 的工具类
- Hibernate工具类
- HIbernate工具类
- Hibernate工具类模版
- Hibernate 工具类
- hibernate的工具类
- Hibernate工具类
- Hibernate的工具类
- Hibernate工具类
- Hibernate的工具类
- hibernate分页工具类
- hibernate 操作工具类
- hibernate工具类
- Hibernate工具类
- hibernate连接工具类
- django框架的settings设置
- 系统分析与架构设计的随想与面向集合的分析设计思想(SOA & SOD)
- 关于派生类构造器对基类构造器的调用
- ThreadLocal详解
- python整理二十七——egg文件制作与安装
- Hibernate工具类
- 优秀程序员的十大习惯
- 在Glassfish上部署web应用
- boost::function,让C++的函数也能当第一类值使用
- 我的开发习惯与规范所谓的(一)
- vs2005 动态创建对话框,给对话框添加oninitdialog函数
- MATLAB生成圆形模板的简单方法
- CSDN博客的第一步
- my blog