`
penghao122
  • 浏览: 357790 次
  • 性别: Icon_minigender_1
  • 来自: 广东珠海
社区版块
存档分类
最新评论

利用模板方式写一个管理hibernate 中session的方法

阅读更多
package com.t48.hr.util;

import org.hibernate.Session;
import org.hibernate.Transaction;
import com.t48.hr.util.HBSessionFactory;

public abstract class TransManager {
  public Session sess;	
  public abstract void process() throws Exception;

  public void execute() throws Exception
  {
	 Transaction trans=null;
	 try {
		sess=HBSessionFactory.getCurrentSession();
		trans=sess.beginTransaction();
		process();
		trans.commit();
	} catch (Exception e) {
		trans.rollback();
		e.printStackTrace();
		throw e;
		// TODO: handle exception
	}
	finally{
		HBSessionFactory.closeCurrentSession();
	}
  }

}
分享到:
评论
6 楼 strongkill 2007-03-06  
prameter1沒有聲明啊?


解決辦法
在transManager中加入
public Object prameter1;


5 楼 penghao122 2007-02-23  
   static  TParamDAO dao = new TParamDAO();//生成一个dao实例   
    static Session session = null;   


这个是我没有删掉的代码.忘记看了...

我也不知道,线程怎么处理
4 楼 penghao122 2007-02-23  
...学习了
3 楼 jamesby 2007-02-23  
代码要简化,类似demo一样的东西,查询,update只需要一个就可以了!

粗粗看了看,发现有如下代码:

    static  TParamDAO dao = new TParamDAO();//生成一个dao实例   
    static Session session = null;


Session为static不会产生线程安全问题?不过好象这个session从来没有使用。

另外看到楼主有如下代码:
    public static List serarchid(final Long name){   
        ArrayList list=null;   
        try{   
            TransManager delete = new TransManager(){   
                public void process() throws Exception {   
                       
                    prameter1  =(List)sess.createQuery("from TParam where code="+name).list();   
                       
                    
                }   
            };   
        delete.execute();   
        list=(ArrayList)delete.prameter1;   
       
     } 


既然在process里面如此使用session,还是建议将process声明成如下方式:
process(HibernateSession sess)  throws Exception


一点粗浅见解!
2 楼 bencode 2007-02-23  
嘿嘿.异常处理上有点问题,重构成下面的:

package com.t48.hr.util;   
  
import org.hibernate.Session;   
import org.hibernate.Transaction;   
import com.t48.hr.util.HBSessionFactory;   
  
public abstract class TransManager {   
  public Session sess;     
  public abstract void process() throws Exception;   
  
  public void execute() throws Exception   
  {   
     Transaction trans=null;
     sess=HBSessionFactory.getCurrentSession();   // 移到这里
     try {   
        trans=sess.beginTransaction();   
        process();   
        trans.commit();   
    } catch (Exception e) { 
        if (trans != null) {    // 要判断
            trans.rollback();
        }
        e.printStackTrace();   
        throw e;   
        // TODO: handle exception   
    }   
    finally{
        HBSessionFactory.closeCurrentSession();   
    }   
  }   
  
}  
1 楼 penghao122 2007-02-23  
package com.t48.hr.admin.bo;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.*;

import com.t48.hr.util.*;
import com.t48.hr.sys.dao.TParamDAO;
import com.t48.hr.sys.vo.TParam;
import com.t48.hr.sys.vo.TParamId;
import com.t48.hr.util.HBSessionFactory;

/*
 * 
 * 基本参数业务处理逻辑
 * */
public class baseBO {

	static  TParamDAO dao = new TParamDAO();//生成一个dao实例
	static Session session = null;
	//增加基本参数的大类一条记录
	public static void insertbase(final TParam info){
		try {
			
		TransManager demo = new TransManager(){

			public void process() throws Exception {
				
			 dao.save(info, sess);
			}
		};
		demo.execute();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
//	根据code返回一个集合
	public static List getFormNameList(long code){
		List list = null;
		try
		{
			Session session =HBSessionFactory.getCurrentSession();
			//根椐code号查出id号相等的字段
		    String again ="from TParam where id.code = "+code;
			Query againquery = session.createQuery(again);
			list = againquery.list();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally{
			session.close();
		}
		return list;
	}
	//修改一条记录
	public static void updatebase(){
		
		
	}
	//删除一条记录
	public static int deletesplit(Long f){
		
		System.out.println("I come to delete f "+f);
		int flag=0;
		 final TParam demo = new TParam();
	     final TParamId id = new TParamId() ;
	     id.setId(f);
	     id.setCode(new Long(0));
	     demo.setId(id);
	     try{
	    		TransManager delete = new TransManager(){
	    			public void process() throws Exception {
	    			    dao.delete(demo, sess);   			 
	    			}
	    		};
	    	delete.execute();
	    	flag=1;
	     }
	     catch(Exception e){
	    	 flag=0;
	    	 e.printStackTrace();
	     }
	     return flag;
	 
	}

	//查询取ID最大值
	public static Long selectbaseID(){
		
		Long baseID = new Long(0);
		try{
    		TransManager delete = new TransManager(){
    			public void process() throws Exception {
    				
    				prameter1 =  sess.createQuery("select max(t.id.id) from TParam t").uniqueResult();
    			    System.out.println("dsfsdfsdf");
  	   			 
    			}
    		};
    	delete.execute();
    	baseID=(Long)delete.prameter1;
     }
     catch(Exception e){
  
    	 e.printStackTrace();
     }
		
	return baseID;
		
	}
	
	//子项删除业务
	public static void deletechild(final TParam id){

		try{
    		TransManager delete = new TransManager(){
    			public void process() throws Exception {
    				
    			    sess.delete(id);
    			    System.out.println("dsfsdfsdf");
  	   			 
    			}
    		};
    	delete.execute();
    
     }
     catch(Exception e){
  
    	 e.printStackTrace();
     }
		
	}
	public static List serarchid(final Long name){
		ArrayList list=null;
		try{
    		TransManager delete = new TransManager(){
    			public void process() throws Exception {
    				
    				prameter1  =(List)sess.createQuery("from TParam where code="+name).list();
    				
  	   			 
    			}
    		};
    	delete.execute();
    	list=(ArrayList)delete.prameter1;
    
     }
     catch(Exception e){
  
    	 e.printStackTrace();
     }
     return list;
		
	}
	/*基本参数的子项删除之后,返回一个集合*/
	public static  List getBasecontent(final Long id){
		
		ArrayList list=null;
		try{
    		TransManager delete = new TransManager(){
    			public void process() throws Exception {
    				
    				prameter1  =(List)sess.createQuery("from TParam where id.code ="+id).list();
    				
  	   			 
    			}
    		};
    	delete.execute();
    	list=(ArrayList)delete.prameter1;
    
     }
     catch(Exception e){
  
    	 e.printStackTrace();
     }
         
	return list;	
	}
	
	
	
}


利用一个bo来使用

相关推荐

    低清版 大型门户网站是这样炼成的.pdf

    5.1.10 使用hibernate的isinitialized()与initialize()方法 277 5.1.11 持久化对象间的级联操作 277 5.2 hibernate的检索策略 291 5.2.1 立即检索 291 5.2.2 延迟检索 296 5.2.3 迫切左外连接检索 300 5.3 hql...

    基于SSM框架的生产管理ERP系统源码+数据库+项目文档,含计划进度、设备管理、工艺监控、物料监控、人员监控、质量监控、系统管理

    一个生产管理ERP系统。主要包括:计划进度、设备管理、工艺监控、物料监控、人员监控、质量监控、系统管理7大模块 项目技术架构 (Spring+SpringMVC+Mybatis) Maven Spring(IOC DI AOP 声明式事务处理) ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    Tomcat是一个免费的开源的Serlvet容器,在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包5

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包10

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包4

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包7

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包9

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包101

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    Java资源包01

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java ssm开发的生产管理ERP系统

    这是一个生产管理ERP系统。依托科技计划重点项目“制造装备物联及生产管理系统研发”,主要包括:计划进度、设备管理、工艺监控、物料监控、人员监控、质量监控、系统管理7大模块。 ## 项目技术架构(Spring+...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

Global site tag (gtag.js) - Google Analytics