SpringData JPA动态拼接sql语句实现动态的多表条件查询

ゝ一世哀愁。 2022-02-24 07:50 3243阅读 0赞
  1. @Autowired
  2. private EntityManager entityManager;
  3. public List<Object[]> findSignFileAndPosition(int pageNum, TbSignFile search) {
  4. PageRequest pageRequest = new PageRequest(pageNum, 10);
  5. StringBuffer sql = new StringBuffer("SELECT sf.file_code, sup.type " +
  6. "FROM tb_sign_file sf LEFT JOIN tb_sign_user_position sup " +
  7. "ON sf.file_code = sup.file_id " +
  8. "where 1=1 ");
  9. Map<String, Object> map = new HashMap<String, Object>();
  10. int i = 1;
  11. if (StringUtils.isNotBlank(search.getFileType())) {
  12. sql.append(" and sf.file_type=");
  13. sql.append("?" + i);
  14. map.put(i + "", search.getFileType());
  15. i++;
  16. }
  17. if (StringUtils.isNotBlank(search.getSignerType())) {
  18. sql.append(" and sf.signer_type=");
  19. sql.append("?" + i);
  20. map.put(i + "", search.getSignerType());
  21. i++;
  22. }
  23. if (StringUtils.isNotBlank(search.getSignMethod())) {
  24. sql.append(" and sf.sign_method=");
  25. sql.append("?" + i);
  26. map.put(i + "", search.getSignMethod());
  27. i++;
  28. }
  29. if (StringUtils.isNotBlank(search.getStatus())) {
  30. sql.append(" and sf.status=");
  31. sql.append("?" + i);
  32. map.put(i + "", search.getStatus());
  33. i++;
  34. }
  35. sql.append(" order by sf.update_time desc");
  36. String sqlStr = sql.toString();
  37. String count = "SELECT count(1) ";
  38. String substring = sqlStr.substring(0, sql.indexOf("FROM"));
  39. String countSql = sqlStr.replace(substring, count);
  40. Query query = entityManager.createNativeQuery(sqlStr);
  41. Query countQuery = entityManager.createNativeQuery(countSql);
  42. for (String key : map.keySet()) {
  43. query.setParameter(key, map.get(key));
  44. countQuery.setParameter(key, map.get(key));
  45. }
  46. query.setFirstResult((pageNum -1) * 10);
  47. query.setMaxResults(10);
  48. long total = ((BigInteger)countQuery.getSingleResult()).longValue();
  49. List list = query.getResultList();
  50. return list;
  51. }

发表评论

表情:
评论列表 (有 0 条评论,3243人围观)

还没有评论,来说两句吧...

相关阅读