hibernate关联查询三

注意:查询select 后面的字段要有对应的构造函数

public Page<PortalCatalog> getPage(Page page, String name) {
    String sql = "select tc.id,tc.name,tc.url,tc.orderindex,tc.display,tc.orgid,tc.createrid,tp.docTitle from t_portalcatalog_tab tc left join t_portal_tab tp on tc.id=tp.portalCatalogId where 1=1";
    if (null != name && !name.trim().equals("")) {
         sql += " and tc.name like '%"+ StringUtil.sqlValidate(name)+"%'";
         sql += " or tp.docTitle like '%"+ StringUtil.sqlValidate(name)+"%'";
     }
     List<PortalCatalog> list = this.createSQLQuery(sql).addEntity(PortalCatalog.class).list();
     Integer count = getCount(sql);
     page.setTotalCount(count);
     page.setResult(list);
     return page;
}

查询总记录数:

public Integer getCount(String sql){
    return this.countSqlQueryResult(sql.toString());
 }
/**
     * 获取查询记录总数
     * @param sql
     * @param values
     * @return
     */
protected int countSqlQueryResult(String sql, Object... values){
    Matcher m = Pattern.compile("from", Pattern.CASE_INSENSITIVE).matcher(sql);
    m.find();
    int index = m.start();
    StringBuffer sb = new StringBuffer("select count(1) ");
    sb.append(sql.substring(index, sql.length()));
    Query query = createSQLQuery(sb.toString(), values);
    return ((Number) query.uniqueResult()).intValue();
}
/**
	 * SQL方式查询
	 * @param sql 符合SQL语法的查询语句
	 * @param values 数量可变的条件值,按顺序绑定
	 */
public SQLQuery createSQLQuery(final String sql,final Object... values){
     SQLQuery query = getSession().createSQLQuery(sql);
     if (values != null) {
	  for (int i = 0; i < values.length; i++) {
	      query.setParameter(i, values[i]);
	  }
     }
     return query;
}



猜你喜欢

转载自blog.csdn.net/cdw_sunshine/article/details/80578371