夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          package org.huy.fram.hibernate;

          import java.io.Serializable;
          import java.math.BigDecimal;
          import java.util.List;

          import org.hibernate.Query;
          import org.hibernate.Session;

          /**
           * 
           * <p>
           * Title:[Hibernate Data Access Object Support]
           * </p>
           * <p>
           * Description: [操作數(shù)據(jù)庫支持類,其它DAO可能繼承該類]
           * </p>
           * <p>
           * Copyright 2009 Huyvanpull Co., Ltd.
           * </p>
           * <p>
           * All right reserved.
           * </p>
           * 
           * 
          @version 1.0
           * 
           * <p>
           * Created by [Huyvanpull] [Jun 26, 2009]
           * </p>
           * <p>
           * Midified by [修改人] [修改時間]
           * </p>
           * 
           
          */

          public class HibDAOSupport
          {
              
          /** DAO的操作po的類型 */
              
          private Class<?> claz = null;
              
              
          /** 構(gòu)造方法,且只應(yīng)提供此種構(gòu)造方法 */
              
          public HibDAOSupport(Class<?> claz)
              
          {
                  
          this.claz = claz;
              }

              
              
          /**
               * 
               * <p>
               * Description:[加載對象,返回代理實例]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param id
               * 
          @return
               
          */

              
          public Object load(Serializable id)
              
          {
                  Object entity 
          = null;
                  
          try
                  
          {
                      Session session 
          = HibernateSessionFactory.getSession();
                      entity 
          = session.load(this.claz, id);
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return entity;
              }

              
              
          /**
               * 
               * <p>
               * Description:[得到對象,返回實體類]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param id
               * 
          @return
               
          */

              
          public Object get(Serializable id)
              
          {
                  Object entity 
          = null;
                  
          try
                  
          {
                      Session session 
          = HibernateSessionFactory.getSession();
                      entity 
          = session.get(this.claz, id);
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return entity;
              }

              
              
          /**
               * 
               * <p>
               * Description:[把實例保存到數(shù)據(jù)庫]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param entity
               * 
          @return
               
          */

              
          public Object save(Object entity)
              
          {
                  
          try
                  
          {
                      
          /** 如果entity不是claz的實例,此處會拋出異常,下面代碼不會執(zhí)行 */
                      
          this.isInstance(entity);
                      Session session 
          = HibernateSessionFactory.getSession();
                      session.save(entity);
                      
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return entity;
              }

              
              
          /**
               * 
               * <p>
               * Description:[把實例保存到數(shù)據(jù)庫]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param entity
               * 
          @return
               
          */

              
          public Object update(Object entity)
              
          {
                  
          try
                  
          {
                      
          /** 如果entity不是claz的實例,此處會拋出異常,下面代碼不會執(zhí)行 */
                      
          this.isInstance(entity);
                      Session session 
          = HibernateSessionFactory.getSession();
                      session.update(entity);
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return entity;
              }

              
              
          /**
               * 
               * <p>
               * Description:[根據(jù)實列刪除對象]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param object
               * 
          @return
               
          */

              
          public Object delete(Object entity)
              
          {
                  
          try
                  
          {
                      
          /** 如果entity不是claz的實例,此處會拋出異常,下面代碼不會執(zhí)行 */
                      
          this.isInstance(entity);
                      Session session 
          = HibernateSessionFactory.getSession();
                      session.delete(entity);
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return entity;
              }

              
              
          /**
               * 
               * <p>
               * Description:[根據(jù)id刪除對象]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param id
               
          */

              
          public void deleteById(Serializable id)
              
          {
                  delete(load(id));
              }

              
              
          /**
               * 
               * <p>
               * Description:[不附加條件查詢所有對象]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @return
               
          */

              
          public List<?> findAll()
              
          {
                  String hsql 
          = "from ".concat(this.getEntityClassName());
                  
          return this.find(hsql, 00);
              }

              
              
          /**
               * 
               * <p>
               * Description:[根據(jù)hsql查詢數(shù)據(jù)]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 30, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param hsql
               * HSQL
               * 
          @param beginIndex
               * 查詢起始位置
               * 
          @param pageSize
               * 每頁長度
               * 
          @return
               
          */

              
          public List<?> find(final String hsql, final int beginIndex,
                      
          final int pageSize)
              
          {
                  List
          <?> entityLst = null;
                  
          try
                  
          {
                      Session session 
          = HibernateSessionFactory.getSession();
                      Query query 
          = session.createQuery(hsql);
                      
          if (beginIndex != 0)
                      
          {
                          query.setFirstResult(beginIndex);
                      }

                      
          if (pageSize != 0)
                      
          {
                          query.setMaxResults(pageSize);
                      }

                      entityLst 
          = query.list();
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return entityLst;
              }

              
              
          /**
               * 
               * <p>
               * Description:[根據(jù)SQL查詢數(shù)據(jù)]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 30, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param sql
               * SQL
               * 
          @param beginIndex
               * 查詢起始位置
               * 
          @param pageSize
               * 每頁長度
               * 
          @return
               
          */

              
          public List<?> findBySql(final String sql, final int beginIndex,
                      
          final int pageSize)
              
          {
                  List
          <?> entityLst = null;
                  
          try
                  
          {
                      Session session 
          = HibernateSessionFactory.getSession();
                      Query query 
          = session.createSQLQuery(sql);
                      
          if (beginIndex != 0)
                      
          {
                          query.setFirstResult(beginIndex);
                      }

                      
          if (pageSize != 0)
                      
          {
                          query.setMaxResults(pageSize);
                      }

                      entityLst 
          = query.list();
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return entityLst;
              }

              
              
          /**
               * 
               * <p>
               * Description:[根據(jù)HQL統(tǒng)計合符條件的數(shù)目]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param hql
               * 
          @return
               
          */

              
          public int count(final String hql)
              
          {
                  
          int count = 0;
                  
          try
                  
          {
                      Session session 
          = HibernateSessionFactory.getSession();
                      Query query 
          = session.createQuery(hql);
                      count 
          = ((Integer) query.uniqueResult()).intValue();
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return count;
              }

              
              
          /**
               * 
               * <p>
               * Description:[根據(jù)原生SQL統(tǒng)計合符條件的數(shù)目]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param sql
               * 
          @return
               
          */

              
          public int countBySql(final String sql)
              
          {
                  
          int count = 0;
                  
          try
                  
          {
                      Session session 
          = HibernateSessionFactory.getSession();
                      Query query 
          = session.createSQLQuery(sql);
                      count 
          = ((BigDecimal) query.uniqueResult()).intValue();
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return count;
              }

              
              
          /**
               * 
               * <p>
               * Description:[執(zhí)行原生SQL,返回更改的條數(shù)]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param sql
               * 
          @return
               
          */

              
          public int executeSQL(final String sql)
              
          {
                  
          int updateCount = 0;
                  
          try
                  
          {
                      Session session 
          = HibernateSessionFactory.getSession();
                      Query query 
          = session.createSQLQuery(sql);
                      updateCount 
          = query.executeUpdate();
                  }

                  
          catch (RuntimeException re)
                  
          {
                      
          throw re;
                  }

                  
          return updateCount;
              }

              
              
          /**
               * 
               * <p>
               * Description:[如果不是claz的實例,則拋出異常]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @param entity
               
          */

              
          private void isInstance(Object entity)
              
          {
                  
          if (!this.claz.isInstance(entity))
                  
          {
                      
          /** 如果所傳的對象不是claz的實例,則拋出異常由上一級進行處理 */
                      StringBuffer exceptionInfo 
          = new StringBuffer(512);
                      exceptionInfo.append(
          "entity is not instance of ");
                      exceptionInfo.append(
          this.claz.getName());
                      exceptionInfo.trimToSize();
                      
          throw new RuntimeException(exceptionInfo.toString());
                  }

              }

              
              
          /**
               * 
               * <p>
               * Description:[本方法用于得到claz的名字]
               * </p>
               * <p>
               * Created by [Huyvanpull] [Jun 26, 2009]
               * </p>
               * <p>
               * Midified by [修改人] [修改時間]
               * </p>
               * 
               * 
          @return
               
          */

              
          private String getEntityClassName()
              
          {
                  String name 
          = this.claz.getName();
                  
          /** 得到類名 */
                  
          return name.substring(name.lastIndexOf("."+ 1, name.length());
              }

          }


              DAO繼承該類,幾乎不用寫代碼了.
          posted on 2009-06-29 09:52 HUIKK 閱讀(599) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 惠来县| 白沙| 新巴尔虎左旗| 海晏县| 桑日县| 宁海县| 安西县| 寿阳县| 龙山县| 慈利县| 阿瓦提县| 伊春市| 那坡县| 大理市| 平江县| 荥阳市| 开原市| 南涧| 游戏| 读书| 蒙山县| 于都县| 辛集市| 大冶市| 阳高县| 镇雄县| 垦利县| 略阳县| 瑞安市| 桑日县| 上杭县| 会东县| 徐水县| 余江县| 织金县| 清水县| 阿城市| 临江市| 金寨县| 辉南县| 额尔古纳市|