SSH框架中通用的原生SQL查询基类支持,方便进行双orm操作

前端之家收集整理的这篇文章主要介绍了SSH框架中通用的原生SQL查询基类支持,方便进行双orm操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

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查询方法(返回多条记录)
     * 
     *     sqlsql语句,切记必须指定查询字段,不可使用通配 *
     * 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查询方法(返回一条数据集合)
     *     sqlsql语句(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
     *     sqlsql语句(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查询方法(返回记录条数)
     * 
     *     sqlsql语句,(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添加方法
     * 
     *     sqlsql语句,(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;
    }   
     
}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

猜你在找的MySQL相关文章