工具类HibernateUtil.java:
package com.cz.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(); } } } //这里提供一个根据id返回对象的方法 public static Object findById(Class clazz,java.io.Serializable id){ Session s=null; Transaction tx=null; Object obj=null; try { s=openSession(); tx=s.beginTransaction(); obj=s.load(clazz, id); tx.commit(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); // TODO: handle exception }finally{ if(s!=null&&s.isOpen()){ s.close(); } } return obj; } //统一的添加的方法 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; } //提供一个统一的查询方法 总是返回一个对象 public static Object uniqueQuery(String hql,String [] parameters){ Session s=null; Object obj=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]); } } obj=query.uniqueResult(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); // TODO: handle exception }finally{ if(s!=null&&s.isOpen()){ s.close(); } } return obj; } }
测试类TestMain.java:
package com.cz.view; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import com.cz.util.*; import com.sina.domain.Course; import com.sina.domain.Studcourse; import com.sina.domain.Student; public class TestMain{ /** * @param args */ public static void main(String[] args) { //这里我们使用增强的HibernateUtil来完成curd. /* 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()); }*/ //使用工具分页 /* String hql="select sname,saddress from Student order by sage"; String parameters[]=null; List<Object[]> list= HibernateUtil. executeQueryByPage(hql, parameters, 2, 3) ; for(Object[] s: list){ System.out.println(s[0].toString()+" "+s[1].toString()); }*/ /*添加*/ /* Course c=new Course(); c.setCname("servlet"); c.setCid(4L); HibernateUtil.save(c);*/ //调用修改/删除 /* String hql="update Student set sage=sage+1 where sdept=?"; String parameters[]={"计算机系"}; try { HibernateUtil.executeUpdate(hql, parameters); } catch (Exception e) { System.out.println(e.getMessage()); // TODO: handle exception }*/ //请显示所有选择了21号课程的学生信息 /* String hql="select student.sname,student.sdept from Studcourse where course.cid=?"; String parameters[]={"21"}; List<Object[]> list=HibernateUtil.executeQuery(hql, parameters); for(Object[] s:list){ System.out.println(s[0].toString()+" "+s[1].toString()); }*/ /* String hql="from Studcourse where course.cid=21"; List<Studcourse> list=HibernateUtil.executeQuery(hql, null); //懒加载我们有一个章节详解. for(Studcourse sc:list){ System.out.println(sc.getGrade()+sc.getStudent().getSname()); }*/ //查询年龄大于10岁的学生 criteria Session s=HibernateUtil.getCurrentSession(); Transaction tx=s.beginTransaction(); Criteria cri=s.createCriteria(Student.class); //添加检索条件 cri.add(Restrictions.gt("sage", new Long(10))); List<Student> list=cri.list(); for(Student s1: list){ System.out.println(s1.getSname()); } tx.commit(); } }