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

2021-11-01 11:53:47 浏览数 (2)

代码语言:javascript复制
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> 

0 人点赞