package com.sxdf.manage.dao.impl; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.stereotype.Component; import com.sxdf.manage.dao.SnippetDao; @Component("snippetDao") public class SnippetDaoImpl implements SnippetDao { @Resource(name = "sessionFactory") private SessionFactory hu; //统计总数(你可以使用count(*),前提是使用另一个HQL语句) public int count(final String hql, final Object[] param) { int count = 0; Session session = hu.getCurrentSession(); Query query = session.createQuery(hql); if (param.length > 0) { for (int i = 0; i < param.length; i++) { query.setString(i, param[i].toString()); } } List list = query.list(); if (list.size() > 0) { count = list.size(); } return count; } //查找当前页数据 public List<?> findPublic(final String hql, final Object[] param, final int start, final int limit) { Session session = hu.getCurrentSession(); Query query = session.createQuery(hql); if (param.length > 0) { for (int i = 0; i < param.length; i++) { query.setString(i, param[i].toString()); } } List<?> list = query.setFirstResult(start).setMaxResults(limit).list(); return list; } //得到后半段hql public String getHQL(Object[][] ob, Object[][] like ,String[][] datetime , String[] group,String[] asc, String[] desc) { StringBuffer hql = new StringBuffer(); String ss = null; if (null != ob) { for (Object[] o : ob) { // [key][value] name='value' boolean b = ((null != o[1]) && (null != o[0]) && (!"".equals(o[1].toString())) && (!"".equals(o[0].toString()))); if (b) { hql.append("and j." + o[0] + " =? "); } } } if (null != like) { for (Object[] l : like) { // [key][value] name like '%value%' boolean bl = ((null != l[1]) && (null != l[0]) && (!"".equals(l[1].toString())) && (!"".equals(l[0].toString()))); if (bl) { hql.append("and j." + l[0] + " LIKE? "); } } } //时间(模糊) if (null != datetime) { for (String[] d : datetime) { // [key][value] boolean bd = ((null != d[1]) && (null != d[0]) && (!"".equals(d[1])) && (!"".equals(d[0] .toString()))); if (bd) { hql.append("and to_char(j."+ d[0] +",'yyyy-mm-dd')" + " LIKE ? "); } } } // 分组 group by [value] if (null != group && group.length > 0) { StringBuffer groupb = new StringBuffer(); for (String str1 : group) { if (null != str1 && !"".equals(str1)) { groupb.append("j." + str1 + " , "); } } if (null != groupb && "".equals("")) { hql.append("group by "); hql.append(groupb.substring(0, groupb.lastIndexOf(","))); } } // 升序//降序(先升后降) order by [value] if (null != asc && asc.length > 0 || null != desc && desc.length > 0) { String oy1 = null; String oy2 = null; // orderb.append("order by "); if (null != asc && asc.length > 0) { StringBuffer orderb1 = new StringBuffer(); for (String str2 : asc) { if (null != str2 && !"".equals(str2)) { orderb1.append("j." + str2 + " , "); } } if (null != orderb1 && "".equals(orderb1)) { oy1 = orderb1.substring(0, orderb1.lastIndexOf(",")) + " asc "; } } if (null != desc && desc.length > 0) { StringBuffer orderb2 = new StringBuffer(); for (String str3 : desc) { if (null != str3 && !"".equals(str3)) { orderb2.append("j." + str3 + " , "); } } if (null != orderb2 && !"".equals(orderb2)) { oy2 = orderb2.substring(0, orderb2.lastIndexOf(",")) + " desc "; } } if ((null != oy2 && !"".equals(oy2)) || (null != oy1 && !"".equals(oy1))) { hql.append("order by "); if (null != oy1 && !"".equals(oy1)) { hql.append(oy1); } if ((null != oy2 && !"".equals(oy2)) && (null != oy1 && !"".equals(oy1))) { hql.append(" , "); } if (null != oy2 && !"".equals(oy2)) { hql.append(oy2); } } } if (hql.toString().contains("and")) { ss = hql.substring(4, hql.length()); } return ss; } //选值(=、like) public List<Object> getValue(Object[][] ob, Object[][] like,String[][] datetime) { List<Object> list = new ArrayList<Object>(); if (null != ob) { for (Object[] o : ob) { // [key][value] boolean b = ((null != o[1]) && (null != o[0]) && (!"".equals(o[1].toString())) && (!"".equals(o[0] .toString()))); if (b) { list.add(o[1]); } } } if (null != like) { for (Object[] l : like) { // [key][value] boolean bl = ((null != l[1]) && (null != l[0]) && (!"".equals(l[1].toString())) && (!"".equals(l[0] .toString()))); if (bl) { list.add("%" + l[1] + "%"); } } } //时间(模糊) if (null != datetime) { for (String[] d : datetime) { // [key][value] boolean bd = ((null != d[1]) && (null != d[0]) && (!"".equals(d[1])) && (!"".equals(d[0] .toString()))); if (bd) { list.add("%" + d[1] + "%"); } } } return list; } }
首先引入SnippetService
@Resource(name = "snippetServiceImpl") private SnippetService ss;
Object[][] aa1 =null; Object[][] aa2 =null; String[] group =null; String[] asc =null; String[] desc = null;; ActionWriteUtil.writeStr(JsonUtil.getPurchaseJson((List<Purchase>)ss.search(Purchase.class, aa1,aa2 ,null,group,asc,desc,start, limit), ss.count(Purchase.class, aa1,aa2,null,group,asc,desc)));
针对任何bean,无需在其service或dao层再写查询方法(对bean属性*查询, 比较、平均值等特殊查询除外)
相关文章:
SSH动态查询封装接口介绍
SSH动态查询具体实现之service