HibernateUtil升级

来源:互联网 发布:linux 新建用户 权限 编辑:程序博客网 时间:2024/05/29 18:25
一 需求
对HibernateUtil工具类进行升级,使得满足查询、分页查询、插入、更新、修改功能。

二 代码
package com.cakin.util;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;final public class HibernateUtil {    private static SessionFactory sessionFactory=null;    //使用线程局部模式    private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();    private HibernateUtil(){};    static {        sessionFactory=new Configuration().configure().buildSessionFactory();    }        //获取全新的全新的sesession    public static Session openSession(){        return sessionFactory.openSession();    }        //获取和线程关联的session    public static Session getCurrentSession(){        Session session=threadLocal.get();        //判断是否得到        if(session==null){            session=sessionFactory.openSession();            //把session对象设置到 threadLocal,相当于该session已经和线程绑定            threadLocal.set(session);        }        return session;    }        //统一的一个修改和删除(批量 hql) hql"delete upate ...??"    public static void executeUpdate(String hql,String [] parameters){        Session s=null;        Transaction tx=null;        try {            s=openSession();            tx=s.beginTransaction();            Query query=s.createQuery(hql);            //先判断是否有参数要绑定            if(parameters!=null&& parameters.length>0){                for(int i=0;i<parameters.length;i++){                    query.setString(i, parameters[i]);                }            }            query.executeUpdate();            tx.commit();        } catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e.getMessage());            // TODO: handle exception        }finally{            if(s!=null&&s.isOpen()){                s.close();            }        }    }        //统一的添加的方法    public  static void save(Object obj){        Session s=null;        Transaction tx=null;        try {            s=openSession();            tx=s.beginTransaction();            s.save(obj);            tx.commit();        } catch (Exception e) {            if(tx!=null){                tx.rollback();            }            throw new RuntimeException(e.getMessage());            // TODO: handle exception        }finally{            if(s!=null && s.isOpen()){                s.close();            }        }       }        //提供一个统一的查询方法(带分页) hql 形式 from 类  where 条件=? ..    public static List executeQueryByPage(String hql,String [] parameters,int pageSize,int pageNow){        Session s=null;        List list=null;        try {            s=openSession();            Query query=s.createQuery(hql);            //先判断是否有参数要绑定            if(parameters!=null&& parameters.length>0){                for(int i=0;i<parameters.length;i++){                    query.setString(i, parameters[i]);                }            }            query.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize);            list=query.list();        } catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e.getMessage());            // TODO: handle exception        }finally{            if(s!=null&&s.isOpen()){                s.close();            }        }        return list;    }        //提供一个统一的查询方法 hql 形式 from 类  where 条件=? ..    public static List executeQuery(String hql,String [] parameters){        Session s=null;        List list=null;        try {            s=openSession();            Query query=s.createQuery(hql);            //先判断是否有参数要绑定            if(parameters!=null&& parameters.length>0){                for(int i=0;i<parameters.length;i++){                    query.setString(i, parameters[i]);                }            }            list=query.list();        } catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e.getMessage());            // TODO: handle exception        }finally{            if(s!=null&&s.isOpen()){                s.close();            }        }        return list;    }}
三 测试
1 测试代码
package com.cakin.view;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.criterion.Restrictions;import com.cakin.util.*;import com.sina.domain.Course;import com.sina.domain.Studcourse;import com.sina.domain.Student;public class TestMain2 {        /**         * @param args         */        public static void main(String[] args) {                //这里我们使用增强的HibernateUtil来完成curd.                System.out.println("*******查询************");                String hql="select sname,saddress from Student where sdept=? and sage>?";                String parameters[]={"计算机系","3"};                List<Object[]> list= HibernateUtil.executeQuery(hql,parameters);                for(Object[] s: list){                        System.out.println(s[0].toString()+" "+s[1].toString());                }                System.out.println("********分页查询***********");                //使用工具分页                String hql1="select sname,saddress from Student order by sage";                String parameters1[]=null;                List<Object[]> list1= HibernateUtil.                executeQueryByPage(hql1, parameters1, 2, 3) ;                for(Object[] s: list1){                        System.out.println(s[0].toString()+" "+s[1].toString());                }                System.out.println("********添加***********");                /*添加*/                Course c=new Course();                c.setCname("servlet");                c.setCid(4);                HibernateUtil.save(c);                System.out.println("*********修改**********");                //调用修改/删除                String hql2="update Student set sage=sage+1 where sdept=?";                String parameters2[]={"计算机系"};                try {                        HibernateUtil.executeUpdate(hql2, parameters2);                } catch (Exception e) {                        System.out.println(e.getMessage());                }        }}
2 测试结果
*******查询************
林青霞 上海
林可欣 北京
********分页查询***********
刘德华 南京
周华健 山东
********添加***********
*********修改**********
原创粉丝点击