hibernate 系列之BaseDao --基础创建sql,hql,分页查询
来源:互联网 发布:mysql教程 linux 编辑:程序博客网 时间:2024/06/05 03:07
HQL查询
1.创建,HQL查询
public Query createQuery (String hql,Object... params){ Query query = this.getSessionFactory().getCurrentSession().createQuery(hql); for(int i=0;i<params.length;i++){ query.setParameter(i,params[i]); } return query;}
2.不分页,HQL查询
public List<T> query(String hql, Object... params) { return this.createQuery(hql, params).list(); }
3.分页,HQL查询
/** * 创建HQL分页语句 * @param hql * @param offset * @param pagesize * @param params * @return */private Query createPageQuery(String hql, int offset, int pagesize, Object... params) { Query query = this.getSessionFactory().getCurrentSession() .createQuery(hql); for (int i = 0; i < params.length; i++) { query.setParameter(i, params[i]); } query.setFirstResult((offset-1)*pagesize).setMaxResults(pagesize); return query; }/** * 分页查询 * * @Title: pageQuery * @Description: * @param hql * @param offset * @param pagesize * @param params * @return */public List<T> pageQuery(String hql, int offset, int pagesize, Object... params) { return this.createPageQuery(hql, offset, pagesize, params).list(); }
SQL查询
1.查询不分页,原生sql查询
/** * 查询不分页,原生sql查询 * @Title: queryBySql * @Description: * @param sql * @param params * @return */ public List queryBySql(String sql, Object... params) { SQLQuery sqlQuery = this.getSessionFactory().getCurrentSession() .createSQLQuery(sql); for (int i = 0; i < params.length; i++) { sqlQuery.setParameter(i, params[i]); } return sqlQuery.list(); }
2.查询分页,原生sql查询
/** * 查询分页,原生sql查询 * @param sql * @param offset * @param pagesize * @param total * @param params * @return */ public Map<String, Object> pageQueryBySql(String sql, Integer offset, Integer pagesize, Integer total, Object...params) { if (offset == null || offset < 0) { offset = 0; } if (pagesize == null || pagesize == 0) { pagesize = 20; } if (total == null || total == 0) { String countSQL = "select count(*) from (" + sql +") t"; List result = this.queryBySql(countSQL, params); total = Integer.parseInt(result.get(0).toString()); } List<Map<String, String>> listResult = this.pageQueryMapBySql(sql, offset, pagesize, params); Map<String, Object> retMap = new HashMap<String, Object>(); retMap.put("total", total); retMap.put("page_size", pagesize); retMap.put("page", offset); retMap.put("data", listResult); return retMap; }
3.分页 -sql转为Map
/*** *分页 -sql转为Map * @param sql * @param offset * @param pagesize * @param params * @return */ public List<Map<String, String>> pageQueryMapBySql(String sql, int offset, int pagesize, Object... params) { SQLQuery sqlQuery = this.getSessionFactory().getCurrentSession().createSQLQuery(sql); for (int i = 0; i < params.length; i++) { sqlQuery.setParameter(i, params[i]); } sqlQuery.setFirstResult((offset-1)*pagesize).setMaxResults(pagesize); List<Map<String, String>> retList = resultAsMap(sqlQuery,sql); return retList; }
4.不分页 -sql转为Map
/** * 不分页 -sql转为Map * @param sql * @param params * @return */ public List<Map<String, String>> queryMapBySql(String sql, Object... params) { SQLQuery sqlQuery = this.getSessionFactory().getCurrentSession() .createSQLQuery(sql); for (int i = 0; i < params.length; i++) { sqlQuery.setParameter(i, params[i]); } List<Map<String, String>> retList = resultAsMap(sqlQuery, sql); return retList; }
5.list 转 Map
/** * list<Object> 转 Map * @param sqlQuery * @param sql * @return */ private List<Map<String, String>> resultAsMap(SQLQuery sqlQuery, String sql) { List<Map<String, String>> retList = new ArrayList<Map<String, String>>(); List<Object[]> result = sqlQuery.list(); String[] columns = this.getQueryColumns(sql); if (columns == null || columns.length == 0) { throw new RuntimeException("不支持的查询方式"); } for (Object[] objs : result) { Map<String, String> rowData = new HashMap<String, String>();// for (int i = 0; i < objs.length; i++) {//修改分页objs为columns author:xyy ;modifytime:20170323 for (int i = 0; i < columns.length; i++) { if (objs[i] != null) { rowData.put(columns[i], objs[i].toString()); } else { rowData.put(columns[i], ""); } } retList.add(rowData); } return retList; }
6.获得sql语句中的列的集合
/** * 获得sql语句中的列的集合 * @param sql * @return */ private String[] getQueryColumns(String sql) { if (sql != null) { String[] keywords = sql.split(" |,"); List<String> columns = new ArrayList<String>(); boolean begin = false; for (int i= 0; i < keywords.length; i++) { String keyword = keywords[i]; if ("select".equals(keyword.toLowerCase().trim())) { begin = true; continue; } if ("as".equals(keyword.trim().toLowerCase())) {// i++; columns.remove(columns.size() - 1); continue; } if ("".equals(keyword.trim()) || "*".equals(keyword.trim())) { continue; } if ("from".equals(keyword.toLowerCase().trim())) { begin = false; break; } if (begin) { keyword = keyword.replaceAll("[.]", "_").replaceAll("`", ""); columns.add(keyword); } } return columns.toArray(new String[0]); } throw new RuntimeException("SQL不能为空"); } //测试 public static void main(String args[]) { BaseDAO baseDao = new BaseDAO(); String sql = "select a, b, c from x"; String[] columns = baseDao.getQueryColumns(sql); for (String column : columns) { System.out.println(column); } }
0 0
- hibernate 系列之BaseDao --基础创建sql,hql,分页查询
- Hibernate基础--->HQL查询的分页功能
- Hibernate HQL 查询分页()
- hibernate hql 分页查询
- Hibernate基础之HQL查询基础中
- Hibernate基础之HQL查询基础下
- Hibernate基础之HQL查询基础上
- hibernate 分页后,查询总数 使用hql和sql
- Hibernate HQL查询 分页查询 模糊查询
- Hibernate HQL查询 分页查询 模糊查询
- Hibernate HQL查询 分页查询 模糊查询 .
- Hibernate之HQL查询
- Hibernate之HQL查询
- Hibernate之HQL查询
- 4 Hibernate HQL查询,分页查询
- Hibernate查询之HQL查询
- 【知识整理】Hibernate-HQL查询之分页查询、投影查询、报表查询
- hibernate中的批量查询(HQL查询&投影&Criteria&离线&sql)---【小白系列】0基础到熟练应用hibernate框架(十一)
- 关于windows新版Chrome无法正常使用第三方扩展程序的解决方案
- JStorm源码分析(四)深入解读Task概念与实现(草稿版)
- C++ Primer 07 函数
- 网站优化新手必看经典
- 【Python网络爬虫开发教程】Beautiful Soup 4.2.0 文档
- hibernate 系列之BaseDao --基础创建sql,hql,分页查询
- quartz 遇到的问题
- 【强制】表单、 AJAX 提交必须执行 CSRF 安全过滤。
- Android Studio使用中遇到问题解决记录
- Android7.0中PopupWindow的showAsDropDown异常问题
- Java_XmlSchema_Validate
- mac os10.10 安装caffe步骤参照
- React学习之高级ReactDOM(二十四)
- JavaScript 实现反转字符串