现在的位置: 首页 > 综合 > 正文

Hibernate常用代码模板

2014年02月14日 ⁄ 综合 ⁄ 共 12235字 ⁄ 字号 评论关闭

工具类HibernateUtil.java:

Java代码 复制代码 收藏代码
  1. package com.cz.util;   
  2. import java.util.List;   
  3.   
  4.   
  5.   
  6. import org.hibernate.Query;   
  7. import org.hibernate.Session;   
  8. import org.hibernate.SessionFactory;   
  9. import org.hibernate.Transaction;   
  10. import org.hibernate.cfg.Configuration;   
  11. final public class HibernateUtil {
      
  12.     private static SessionFactory sessionFactory=null;
      
  13.     //使用线程局部模式
      
  14.     private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();
      
  15.     private HibernateUtil(){};   
  16.     static {   
  17.         sessionFactory=new Configuration().configure().buildSessionFactory();   
  18.     }   
  19.        
  20.     //获取全新的全新的sesession
      
  21.     public static Session openSession(){   
  22.         return sessionFactory.openSession();   
  23.     }   
  24.     //获取和线程关联的session
      
  25.     public static Session getCurrentSession(){   
  26.            
  27.         Session session=threadLocal.get();   
  28.         //判断是否得到
      
  29.         if(session==null){   
  30.             session=sessionFactory.openSession();   
  31.             //把session对象设置到 threadLocal,相当于该session已经和线程绑定
      
  32.             threadLocal.set(session);   
  33.         }   
  34.         return session;   
  35.            
  36.            
  37.     }   
  38.        
  39.     //统一的一个修改和删除(批量 hql) hql"delete upate ...??"
      
  40.     public static void executeUpdate(String hql,String [] parameters){
      
  41.            
  42.         Session s=null;   
  43.         Transaction tx=null;   
  44.            
  45.         try {   
  46.             s=openSession();   
  47.             tx=s.beginTransaction();   
  48.             Query query=s.createQuery(hql);   
  49.             //先判断是否有参数要绑定
      
  50.             if(parameters!=null&& parameters.length>0){
      
  51.                 for(int i=0;i<parameters.length;i++){
      
  52.                     query.setString(i, parameters[i]);   
  53.                 }   
  54.             }   
  55.             query.executeUpdate();   
  56.             tx.commit();   
  57.         } catch (Exception e) {   
  58.             e.printStackTrace();   
  59.             throw new RuntimeException(e.getMessage());   
  60.             // TODO: handle exception
      
  61.         }finally{   
  62.                
  63.             if(s!=null&&s.isOpen()){   
  64.                 s.close();   
  65.             }   
  66.                
  67.         }   
  68.            
  69.     }   
  70.   
  71. //这里提供一个根据id返回对象的方法
      
  72.     public static Object findById(Class clazz,java.io.Serializable id){
      
  73.   
  74.         Session s=null;   
  75.         Transaction tx=null;   
  76.         Object obj=null;   
  77.         try {   
  78.             s=openSession();   
  79.                
  80.             tx=s.beginTransaction();   
  81.             obj=s.load(clazz, id);   
  82.             tx.commit();   
  83.         } catch (Exception e) {   
  84.             e.printStackTrace();   
  85.             throw new RuntimeException(e.getMessage());   
  86.             // TODO: handle exception
      
  87.         }finally{   
  88.                
  89.             if(s!=null&&s.isOpen()){   
  90.                 s.close();   
  91.             }   
  92.                
  93.         }   
  94.            
  95.         return obj;   
  96.     }   
  97.   
  98.         //统一的添加的方法
      
  99.     public  static void save(Object obj){
      
  100.         Session s=null;   
  101.         Transaction tx=null;   
  102.            
  103.         try {   
  104.             s=openSession();   
  105.             tx=s.beginTransaction();   
  106.             s.save(obj);   
  107.             tx.commit();   
  108.         } catch (Exception e) {   
  109.             if(tx!=null){   
  110.                 tx.rollback();   
  111.             }   
  112.             throw new RuntimeException(e.getMessage());   
  113.             // TODO: handle exception
      
  114.         }finally{   
  115.             if(s!=null && s.isOpen()){   
  116.                 s.close();   
  117.             }   
  118.         }   
  119.            
  120.     }   
  121.        
  122.        
  123.     //提供一个统一的查询方法(带分页) hql 形式 from 类  where 条件=? ..
      
  124.     public static List executeQueryByPage(String hql,String [] parameters,int pageSize,int pageNow){
      
  125.         Session s=null;   
  126.         List list=null;   
  127.            
  128.         try {   
  129.             s=openSession();   
  130.             Query query=s.createQuery(hql);   
  131.             //先判断是否有参数要绑定
      
  132.             if(parameters!=null&& parameters.length>0){
      
  133.                 for(int i=0;i<parameters.length;i++){
      
  134.                     query.setString(i, parameters[i]);   
  135.                 }   
  136.             }   
  137.             query.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize);   
  138.                
  139.             list=query.list();   
  140.         } catch (Exception e) {   
  141.             e.printStackTrace();   
  142.             throw new RuntimeException(e.getMessage());   
  143.             // TODO: handle exception
      
  144.         }finally{   
  145.                
  146.             if(s!=null&&s.isOpen()){   
  147.                 s.close();   
  148.             }   
  149.                
  150.         }   
  151.         return list;   
  152.     }   
  153.        
  154.     //提供一个统一的查询方法 hql 形式 from 类  where 条件=? ..
      
  155.     public static List executeQuery(String hql,String [] parameters){
      
  156.            
  157.         Session s=null;   
  158.         List list=null;   
  159.            
  160.         try {   
  161.             s=openSession();   
  162.             Query query=s.createQuery(hql);   
  163.             //先判断是否有参数要绑定
      
  164.             if(parameters!=null&& parameters.length>0){
      
  165.                 for(int i=0;i<parameters.length;i++){
      
  166.                     query.setString(i, parameters[i]);   
  167.                 }   
  168.             }   
  169.             list=query.list();   
  170.         } catch (Exception e) {   
  171.             e.printStackTrace();   
  172.             throw new RuntimeException(e.getMessage());   
  173.             // TODO: handle exception
      
  174.         }finally{   
  175.                
  176.             if(s!=null&&s.isOpen()){   
  177.                 s.close();   
  178.             }   
  179.                
  180.         }   
  181.         return list;   
  182.     }   
  183.        
  184. //提供一个统一的查询方法 总是返回一个对象
      
  185.     public static Object uniqueQuery(String hql,String [] parameters){
      
  186.            
  187.         Session s=null;   
  188.         Object obj=null;   
  189.            
  190.         try {   
  191.             s=openSession();   
  192.             Query query=s.createQuery(hql);   
  193.             //先判断是否有参数要绑定
      
  194.             if(parameters!=null&& parameters.length>0){
      
  195.                 for(int i=0;i<parameters.length;i++){
      
  196.                     query.setString(i, parameters[i]);   
  197.                 }   
  198.             }   
  199.             obj=query.uniqueResult();   
  200.         } catch (Exception e) {   
  201.             e.printStackTrace();   
  202.             throw new RuntimeException(e.getMessage());   
  203.             // TODO: handle exception
      
  204.         }finally{   
  205.                
  206.             if(s!=null&&s.isOpen()){   
  207.                 s.close();   
  208.             }   
  209.                
  210.         }   
  211.         return obj;   
  212.     }   
  213.        
  214. }  

测试类TestMain.java:

Java代码 复制代码 收藏代码
  1. package com.cz.view;   
  2. import java.util.List;   
  3.   
  4. import org.hibernate.Criteria;   
  5. import org.hibernate.Session;   
  6. import org.hibernate.Transaction;   
  7. import org.hibernate.criterion.Restrictions;   
  8.   
  9. import com.cz.util.*;   
  10. import com.sina.domain.Course;   
  11. import com.sina.domain.Studcourse;   
  12. import com.sina.domain.Student;   
  13. public class TestMain{   
  14.   
  15.     /**
     
  16.      * @param args
     
  17.      */  
  18.     public static void main(String[] args) {
      
  19.         //这里我们使用增强的HibernateUtil来完成curd.
      
  20.     /*  String hql="select sname,saddress from Student where sdept=? and sage>?";
     
  21.         String parameters[]={"计算机系","3"};
     
  22.         List<Object[]> list= HibernateUtil.executeQuery(hql,parameters);
     
  23.         for(Object[] s: list){
     
  24.             System.out.println(s[0].toString()+" "+s[1].toString());
     
  25.         }*/  
  26.            
  27.         //使用工具分页
      
  28.     /*  String hql="select sname,saddress from Student order by sage";
     
  29.         String parameters[]=null;
     
  30.         List<Object[]> list= HibernateUtil.
     
  31.         executeQueryByPage(hql, parameters, 2, 3) ;
     
  32.         for(Object[] s: list){
     
  33.             System.out.println(s[0].toString()+" "+s[1].toString());
     
  34.         }*/  
  35.            
  36.         /*添加*/  
  37.     /*  Course c=new Course();
     
  38.         c.setCname("servlet");
     
  39.         c.setCid(4L);
     
  40.         HibernateUtil.save(c);*/  
  41.            
  42.         //调用修改/删除
      
  43.     /*  String hql="update Student set sage=sage+1 where sdept=?";
     
  44.         String parameters[]={"计算机系"};
     
  45.         try {
     
  46.             HibernateUtil.executeUpdate(hql, parameters);
     
  47.         } catch (Exception e) {
     
  48.             System.out.println(e.getMessage());
     
  49.             // TODO: handle exception
     
  50.         }*/  
  51.         //请显示所有选择了21号课程的学生信息
      
  52.     /*  String hql="select student.sname,student.sdept from Studcourse where course.cid=?";
     
  53.         String parameters[]={"21"};
     
  54.         List<Object[]> list=HibernateUtil.executeQuery(hql, parameters);
     
  55.         for(Object[] s:list){
     
  56.             System.out.println(s[0].toString()+" "+s[1].toString());
     
  57.         }*/  
  58.            
  59.     /*  String hql="from Studcourse where course.cid=21";
     
  60.         List<Studcourse> list=HibernateUtil.executeQuery(hql, null);
     
  61.         //懒加载我们有一个章节详解.
     
  62.         for(Studcourse sc:list){
     
  63.             System.out.println(sc.getGrade()+sc.getStudent().getSname());
     
  64.         }*/  
  65.   
  66.         //查询年龄大于10岁的学生 criteria
      
  67.            
  68.         Session s=HibernateUtil.getCurrentSession();   
  69.         Transaction tx=s.beginTransaction();   
  70.         Criteria cri=s.createCriteria(Student.class);   
  71.         //添加检索条件
      
  72.         cri.add(Restrictions.gt("sage"new Long(10)));
      
  73.         List<Student> list=cri.list();   
  74.         for(Student s1: list){   
  75.             System.out.println(s1.getSname());   
  76.         }   
  77.            
  78.         tx.commit();   
  79.     }   
  80.   
  81. }  

抱歉!评论已关闭.