SSH框架中通用的原生SQL查询基类支持,方便进行双orm操作
2018-07-20 来源:open-open
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; } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
最新资讯
热门推荐