本人刚学hibernater 做了个utils类,把自己的缺点暴露在阳光下。。希望高手拍砖。。小弟感激不尽
package com.aptech.jb.epet.util;import java.util.List;import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;/**
 * hibernate 帮助类
 * 
 * @author 北大青鸟
 */
public class HibernateUtil { // session 工厂
private static SessionFactory factory = null;
private static Configuration cfg = null;// 读取配置文件
// 本地化线程
private final static ThreadLocal<Session> T_session = new ThreadLocal<Session>(); // 开始加载
static { try {
cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
} catch (HibernateException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}// 加载 /**
 * 获取session对象
 * 
 * @return
 */
private static Session getNewSession() {
Session session = T_session.get();// 获取对象
if (session == null) {
T_session.set(factory.openSession());// 设置值
}
return factory.openSession();
}// 获取对象 /**
 * 关闭session对象
 * 
 * @param session
 */
private static void closeSession() { Session session = T_session.get();
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}// 关闭对象 /*
 * 
 * 开启事物
 */
private static void beginTrant() { T_session.get().beginTransaction();//
}// 开启事物 /**
 * 提交事物事物
 */
private static void comitTrant() { T_session.get().getTransaction().commit();// 提交事物
}// 提交事物 /*
 * 8 回滚事物
 */
private static void robackTrant() { T_session.get().getTransaction().rollback();
}// 回滚事物 /**
 * 添加对象
 * 
 * @param obj
 */
public static void addObj(Object obj) { try { Session session = getNewSession();// 获取 session 对象
beginTrant();// 开始事物
session.save(obj);// 保存对象
comitTrant();// 提交事物
} catch (Exception e) {
e.printStackTrace();
robackTrant();// 回滚
} finally {
closeSession();// 关闭
}
}// public static void addObj(Object obj) /**
 * 通过id加载对象
 * 
 * @param clz
 * @param id
 * @return
 */
public static Object getOneObj(Class clz, int id) { Object obj = null;
try { Session session = getNewSession();// 获取session对象
beginTrant();// 开启事物
obj = session.get(clz, id);// 加载对象
comitTrant();// 提交事物
} catch (Exception e) {
e.printStackTrace();
robackTrant();// 回滚
} finally {
closeSession();
}
return obj;
}// 加载 /**
 * 删除对象
 * 
 * @param clz
 * @param id
 */
public static void delOneObj(Class clz, int id) { try {
            Object obj = null;
Session session = getNewSession();// 获取session对象
beginTrant();// 开启事物
obj = session.get(clz, id);// 加载对象
session.delete(obj);//删除对象
comitTrant();// 提交事物
} catch (Exception e) {
e.printStackTrace();
robackTrant();// 回滚
} finally {
closeSession();
}
}// public static void delOneObj(Class clz,int id)

/**
 * 更新对象
 * @param obj
 */
public static void updateObje(Object obj){

try { Session session = getNewSession();// 获取 session 对象
beginTrant();// 开始事物
session.update(obj);//更新对像
comitTrant();// 提交事物
} catch (Exception e) {
e.printStackTrace();
robackTrant();// 回滚
} finally {
closeSession();// 关闭
}
}//public static void updateObje(Object obj)

public static List getAllByHQL(String hql,String [] parm){

List list = null;
try { Session session = getNewSession();// 获取 session 对象
beginTrant();// 开始事物
    Query query = session.createQuery(hql);//创建查询对象
    if(parm!=null){
    
     for(int i=0;i<parm.length;i++){
     query.setString(0, parm[i]);
     }//for
    }//处理参数
    list = query.list();//获取列表
comitTrant();// 提交事物
} catch (Exception e) {
e.printStackTrace();
robackTrant();// 回滚
} finally {
closeSession();// 关闭
}
return list;
}//public static List getAllByHQL(String hql,String [] parm)

/**
 * 简单分页
 * @param hql 分页查询语句
 * @param currentPage  当前页码数
 * @param endPage     结束页码数
 * @param rows   每页显示的行数
 * @return  
 */
public static List getGroupPage(String hql,int currentPage,int endPage,int rows){
List list = null;
try { Session session = getNewSession();// 获取 session 对象
beginTrant();// 开始事物
    Query query = session.createQuery(hql);//创建查询对象
    if(endPage-currentPage<1)return null; //当前页小于一页
   int currentRow = (currentPage-1)*rows;//当前的行数
   int endRow = (endPage-1)*rows;//结束的行数
   query.setFirstResult(currentRow); //开始行数
   query.setMaxResults(endRow);//结束行数
    list = query.list();//获取列表
comitTrant();// 提交事物
} catch (Exception e) {
e.printStackTrace();
robackTrant();// 回滚
} finally {
closeSession();// 关闭
}
return list;
}//public static List getGroupPage
}

解决方案 »

  1.   


    /** 
    * hibernate 帮助类 

    * @author 北大青鸟 
    */ 
     看见青鸟的就想拍砖,有次面试的时候单位给的结果是:你开的工资比俩青鸟的总和还多,你觉得你能干过他们俩吗?
      

  2.   

    起码我认为lz这个util不错。。收下
      

  3.   

     这个不怎么样 鉴定完毕,青鸟可能 这就是 最后一学期 给个demo然后做套 项目走人
      

  4.   

    1分钟就可以自动配置出SSH的框架,30秒就可以逆向工程的hibernate需要在这里提问吗?