利用Thread-Specific Storage撰寫一個 HibernateUtil
HibernateSessionUtil.java
import java.io.Serializable;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;
public class HibernateSessionUtil implements Serializable
{
public static final ThreadLocal tLocalsess = new ThreadLocal();
public static final ThreadLocal tLocaltx = new ThreadLocal();
/*
* getting the thread-safe session for using
*/
public static Session currentSession(){
Session session = (Session) tLocalsess.get();
//open a new one, if none can be found.
try{
if (session == null){
session = openSession();
tLocalsess.set(session);
}
}catch (HibernateException e){
throw new InfrastructureException(e);
}
return session;
}
/*
* closing the thread-safe session
*/
public static void closeSession(){
Session session = (Session) tLocalsess.get();
tLocalsess.set(null);
try{
if (session != null && session.isOpen()){
session.close();
}
}catch (HibernateException e){
throw new InfrastructureException(e);
}
}
/*
* begin the transaction
*/
public static void beginTransaction(){
Transaction tx = (Transaction) tLocaltx.get();
try{
if (tx == null){
tx = currentSession().beginTransaction();
tLocaltx.set(tx);
}
}catch (HibernateException e){
throw new InfrastructureException(e);
}
}
/*
* close the transaction
*/
public static void commitTransaction(){
Transaction tx = (Transaction) tLocaltx.get();
try{
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack())
tx.commit();
tLocaltx.set(null);
}catch (HibernateException e){
throw new InfrastructureException(e);
}
}
/*
* for rollbacking
*/
public static void rollbackTransaction(){
Transaction tx = (Transaction) tLocaltx.get();
try{
tLocaltx.set(null);
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){
tx.rollback();
}
}catch (HibernateException e){
throw new InfrastructureException(e);
}
}
private static Session openSession() throws HibernateException{
return getSessionFactory().openSession();
}
private static SessionFactory getSessionFactory() throws HibernateException{
return SingletonSessionFactory.getInstance();
}
}
filter中的程式碼如下
HibernateSessionCloser.java
public class HibernateSessionCloser implements Filter{
protected FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig)throws ServletException{
this.filterConfig = filterConfig;
}
public void destroy(){
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
try{
chain.doFilter(request, response);
}
finally{
try{
HibernateSessionUtil.commitTransaction();
}catch (InfrastructureException e){
HibernateSessionUtil.rollbackTransaction();
}finally{
HibernateSessionUtil.closeSession();
}
}
}
}
然後在操作資料庫之前加上
HibernateSessionUtil.beginTransaction();
HibernateSessionUtil.currentSession();//取得Session
分享到:
相关推荐
管理hibernate的session sessionFactiory的实现类
HibernateUtil分装完整版HQL查询HibernateUtil分装完整版HQL查询
HibernateUtil 分页 增删改查 封装 HibernateUtil 分页 增删改查 封装 HibernateUtil 分页 增删改查 封装
hibernate入门实例封装了HibernateUtil,完成数据库的添加操作,和查询操作。 Session的save方法和get方法。
HibernateUtil工具类
成功的个人管理系统 blic class UserDao { public Serializable save(User u){ SessionFactory factory = HibernateUtil.getSessionFactory(); Session session = factory.openSession(); Serializable id = ...
Hibernate5.2.1 的工具类 创建session 和 sessionFactory
06_传智播客hibernate教程_完善HibernateUtil类及hql查询入门
欢迎大家咨询,我会尽量去与大家讲解,希望对你们有所帮助
HibernateUtil.java HibernateUtils.java HttpRequester.java HttpRespons.java HttpUtil.java MD5Util.java Pagination.java PropertiesUtil.java RegUtil.java StringUtil.java UploadUtil.java UUIDUtils.java
一个工具类实现了增删改查 util comm.util beanutils 方便了获取session和sessionFactory
本章学习目标 Hibernate 初认识 Hibernate 的HelloWorld hibernate.cfg.xml 配置详解 *.hbm.xml 对象映射文件详解 Hibernate 核心接口详解 抽取HibernateUtil ... 使用Session 接口进行增删改查
hibernate 一对多测试工程,博客介绍请参照: http://blog.csdn.net/smilefyx/article/details/48596665
再使用com.chen.common包中的CreateTable.java 建表,再往用户表添加一个管理员账户 就可以使用了(一定要记得添加permit的值要为1 本身页面中并没有设置权限的地方) 其他注意事项: (1) 前端的用户登入和其他添加...
} <br> public String createPasswordTicket(User user) { HibernateUtil.executeUpdate( "delete from PasswordTicket as pt where pt.user=?", new Object[] { user } ); String ...
04_Session接口及get|load|persist方法 05_实体对象的三种状态与saveOrUpdate方法 06_完善HibernateUtil类及hql查询入门 07_实体类或属性名与数据库关键字冲突问题 10_使用Hibernate完成CRUD实验的步骤说明 11_...
该程序演示了如何使用 Annotations 在 Hibernate 中使用继承。 Hibernate 支持 3 种类型的继承 每个具体类一个表 - 每个子类都有一个表,该表也具有超类的所有属性。 (TABLE_PER_CLASS) 每个层次结构类一个表 - ...
自己编写的HibernateUtil类,比较全面,方法均通过测试