加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SSH框架中通用的原生SQL查询基类支持,利便举办双orm操纵

发布时间:2021-01-14 20:32:07 所属栏目:编程 来源:网络整理
导读:本日PHP站长网 52php.cn把网络自互联网的代码分享给各人,仅供参考。 package com.common; import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Ma

以下代码由PHP站长网 52php.cn网络自互联网

此刻PHP站长网小编把它分享给各人,仅供参考

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;
    }   
     
}

以上内容由PHP站长网【52php.cn】网络清算供各人参考研究

假如以上内容对您有辅佐,接待保藏、点赞、保举、分享。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读