SSH框架中通用的原生SQL查詢基類支持,方便進行雙orm操作

koel 9年前發布 | 3K 次閱讀 SQL

package com.common;

import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map;

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

/**

  • 通用的SQL查詢基類 */ public class BaseGeneralQuery extends AbstractHibernateDAOImpl {

    /**

    • 通用的SQL查詢方法(返回多條記錄)
    • SQL:SQL語句,切記必須指定查詢字段,不可使用通配 *
    • sqlType:SQL(原生SQL)、HQL(HQL語句)
    • List對應每一條記錄,Map的put中對應中每一個字段、值。SQL語句,應規范SQL語句,HQL最好兼容SQL的寫法.
    • 解析Map的時候,需要通過查詢字段對應的下標獲取,從0開始。如:maps.get(0).toString(); */ public List<Map> executeQuery(String sqlType,String sql){ List<Map> list=null; try {

      list = new LinkedList<Map>();
      Session session = this.getSession();
      Query query = null;
      
      if("SQL".equals(sqlType)){
          query = session.createSQLQuery(sql);
      }
      if("HQL".equals(sqlType)){
          query = session.createQuery(sql);
      }
      
      //String hqlstr = sql.toString().substring(6, sql.toString().indexOf("from")).trim();
      //String[] codenames = hqlstr.split(",");
      
      Map maps = null;
      Iterator it  = query.list().iterator();
      while(it.hasNext()){
          maps = new HashMap();
          Object[] obj = (Object[])it.next();
          //由于SQL或者是HQL語句的查詢字段的復雜性和規范性,無法進行有效的截取判斷。只能進行數據條字段下標進行通用封裝。
          for(int i=0;i<obj.length;i++){
              maps.put(i, obj[i]==null?"":obj[i].toString());
          }   
          list.add(maps);
      }
      
      

      } catch (Exception e) {

      System.out.println("#Error BaseGeneralQuery.executeQuery(String sqlType,String sql) ["+e.getMessage()+"] ");
      

      }

      return list; }

      /**

    • 通用的SQL查詢方法(返回一條數據集合)
    • SQL:SQL語句(select aa,bb from table
    • 返回根據語句查詢到的記錄對象Map映射 */ public Map getObject(String sql){
      Map map = null; try { List<Object[]> object = super.getSession(true).createSQLQuery(sql).list();

      if(object != null && object.size() >0 ){

       map = new HashMap();
       for(int j=0;j<object.get(0).length;j++){
           map.put(j, object.get(0)[j]);
       }
      

      }

      super.getSession(true).close(); } catch (Exception e) { System.out.println("#Error BaseGeneralQuery.getObject(String sql) ["+e.getMessage()+"] "); }

      return map; }

      /**

    • 通用的SQL查詢方法(返回單個字段數據)
    • field: 單個查詢語句的字段aa
    • SQL:SQL語句(select aa from table
    • 返回根據語句查詢到的記錄對象Map映射 */ public String getString(String field,String sql){ String val = ""; try { val = (String)super.getSession(true).createSQLQuery(sql).addScalar(field, Hibernate.STRING).uniqueResult();

      super.getSession(true).close(); } catch (Exception e) { System.out.println("#Error BaseGeneralQuery.getString(String field,String sql) ["+e.getMessage()+"] "); } return val; }

      /**

    • 通用的SQL查詢方法(返回記錄條數)
    • SQL:SQL語句,(select count(*) counts from table )
    • sqlType:SQL(原生SQL)、HQL(HQL語句)
    • 返回根據語句查詢到的記錄條數 */ public int executeQueryCount(String sqlType,String sql){ int count = 0; try { Session session = this.getSession();

      if("SQL".equals(sqlType)){

       count = Integer.parseInt((String) session.createSQLQuery(sql).addScalar("counts",Hibernate.STRING).uniqueResult());
      

      } if("HQL".equals(sqlType)){

       count = session.createQuery(sql).list().size();
      

      }

      } catch (Exception e) { System.out.println("#Error BaseGeneralQuery.executeQueryCount(String sqlType,String sql) ["+e.getMessage()+"] "); }

      return count; }

      /**

    • 通用的SQL添加方法
    • SQL:SQL語句,(select count(*) counts from table )
    • sqlType:SQL(原生SQL)、HQL(HQL語句)
    • 返回SQL語句受影響的行數 */ public int executeSave(String sqlType,String sql){ int count = 0; try {

       Session session = this.getSession();
      
       if("SQL".equals(sqlType)){
           count = session.createSQLQuery(sql).executeUpdate();
       }
       if("HQL".equals(sqlType)){
           //count = session.createQuery(sql).list().size();
       }
      
      

      } catch (Exception e) {

       System.out.println("#Error BaseGeneralQuery.executeSave(String sqlType,String sql) ["+e.getMessage()+"] ");
      

      }

      return count; }

}</pre>

 本文由用戶 koel 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!