SqlFrameUtil.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package jnpf.database.sql.util;
  2. import jnpf.database.sql.enums.base.SqlFrameBase;
  3. import jnpf.util.text.CharsetKit;
  4. import org.apache.commons.lang3.StringUtils;
  5. import org.springframework.web.util.HtmlUtils;
  6. import java.util.*;
  7. import java.util.regex.Pattern;
  8. /**
  9. * 类功能
  10. *
  11. * @author JNPF开发平台组 YanYu
  12. * @version V3.2.0
  13. * @copyright 引迈信息技术有限公司
  14. * @date 2022/1/14
  15. */
  16. public class SqlFrameUtil {
  17. /**
  18. * 去除模糊查询前后空白
  19. */
  20. public static String keyWordTrim(String keyWord){
  21. return keyWord.trim();
  22. }
  23. public static String htmlE(String str){
  24. if (str != null){
  25. return HtmlUtils.htmlEscape(str, CharsetKit.UTF_8);
  26. }
  27. return null;
  28. }
  29. private static final Pattern BRACKET = Pattern.compile("\\<.+?\\>");
  30. private static final Pattern BRACKET2 = Pattern.compile("\\[.+?\\]");
  31. /**
  32. * 正则处理
  33. */
  34. public static String formatSqlFrame(String sqlFrame){
  35. sqlFrame = sqlFrame.replace("<", "").replace(">", "")
  36. .replace("[", "").replace("]", "");
  37. // if (StringUtil.isEmpty(TenantDataSourceUtil.getTenantSchema())) {
  38. // // 去除<param>的<>框架,<>:固定关键词,{}:参数,[]:可选关键词
  39. // return sqlFrame.replace("《schema》.", "");
  40. // }
  41. // 去除<param>的<>框架,<>:固定关键词,{}:参数,[]:可选关键词
  42. return sqlFrame.replace("《schema》.", "");
  43. }
  44. /**
  45. * Sql框架参数设置
  46. * @param sqlFrameEnum SQL框架枚举
  47. * @param frameParamList 框架指定参数集合
  48. * @param params 实际参数集合
  49. * @return Sql语句
  50. */
  51. public static String outSqlCommon(SqlFrameBase sqlFrameEnum, List<String> frameParamList, String... params){
  52. String sqlFrame = sqlFrameEnum.getSqlFrame();
  53. List<String> paramList = Arrays.asList(params);
  54. // 组成paramsMap
  55. Map<String, String> paramsMap = new HashMap<>();
  56. for (int i = 0; i < paramList.size(); i++) {
  57. paramsMap.put(frameParamList.get(i), paramList.get(i));
  58. }
  59. sqlFrame = sqlFrameEnum.createIncrement(sqlFrame, paramsMap);
  60. sqlFrame = sqlFrameEnum.createPrimaryKeys(sqlFrame, paramsMap);
  61. // 对SQL框架指定参数设置为占位符
  62. for (int i = 0; i < frameParamList.size(); i++) {
  63. sqlFrame = sqlFrame.replace(frameParamList.get(i), "?_" + i);
  64. }
  65. sqlFrame = SqlFrameUtil.formatSqlFrame(sqlFrame);
  66. for (int i = 0; i < paramList.size(); i++) {
  67. String param = paramList.get(i) != null ? paramList.get(i) : "";
  68. sqlFrame = sqlFrame.replace("?_" + i, param);
  69. }
  70. return sqlFrame;
  71. }
  72. /**
  73. * 按下标循环分割字符串
  74. */
  75. public static List<String> splitStrRepeat(String str, Integer index){
  76. List<String> splitList = new ArrayList<>();
  77. while (str.length() > index){
  78. String[] splitStrArrays = {str.substring(0, index), str.substring(index)};
  79. splitList.add(splitStrArrays[0]);
  80. str = splitStrArrays[1];
  81. }
  82. // 最后一个小于index的字符串
  83. if(StringUtils.isNotEmpty(str)){
  84. splitList.add(str);
  85. }
  86. return splitList;
  87. }
  88. }