package jnpf.database.sql.util;
import jnpf.database.sql.enums.base.SqlFrameBase;
import jnpf.util.text.CharsetKit;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.util.HtmlUtils;
import java.util.*;
import java.util.regex.Pattern;
/**
* 类功能
*
* @author JNPF开发平台组 YanYu
* @version V3.2.0
* @copyright 引迈信息技术有限公司
* @date 2022/1/14
*/
public class SqlFrameUtil {
/**
* 去除模糊查询前后空白
*/
public static String keyWordTrim(String keyWord){
return keyWord.trim();
}
public static String htmlE(String str){
if (str != null){
return HtmlUtils.htmlEscape(str, CharsetKit.UTF_8);
}
return null;
}
private static final Pattern BRACKET = Pattern.compile("\\<.+?\\>");
private static final Pattern BRACKET2 = Pattern.compile("\\[.+?\\]");
/**
* 正则处理
*/
public static String formatSqlFrame(String sqlFrame){
sqlFrame = sqlFrame.replace("<", "").replace(">", "")
.replace("[", "").replace("]", "");
// if (StringUtil.isEmpty(TenantDataSourceUtil.getTenantSchema())) {
// // 去除的<>框架,<>:固定关键词,{}:参数,[]:可选关键词
// return sqlFrame.replace("《schema》.", "");
// }
// 去除的<>框架,<>:固定关键词,{}:参数,[]:可选关键词
return sqlFrame.replace("《schema》.", "");
}
/**
* Sql框架参数设置
* @param sqlFrameEnum SQL框架枚举
* @param frameParamList 框架指定参数集合
* @param params 实际参数集合
* @return Sql语句
*/
public static String outSqlCommon(SqlFrameBase sqlFrameEnum, List frameParamList, String... params){
String sqlFrame = sqlFrameEnum.getSqlFrame();
List paramList = Arrays.asList(params);
// 组成paramsMap
Map paramsMap = new HashMap<>();
for (int i = 0; i < paramList.size(); i++) {
paramsMap.put(frameParamList.get(i), paramList.get(i));
}
sqlFrame = sqlFrameEnum.createIncrement(sqlFrame, paramsMap);
sqlFrame = sqlFrameEnum.createPrimaryKeys(sqlFrame, paramsMap);
// 对SQL框架指定参数设置为占位符
for (int i = 0; i < frameParamList.size(); i++) {
sqlFrame = sqlFrame.replace(frameParamList.get(i), "?_" + i);
}
sqlFrame = SqlFrameUtil.formatSqlFrame(sqlFrame);
for (int i = 0; i < paramList.size(); i++) {
String param = paramList.get(i) != null ? paramList.get(i) : "";
sqlFrame = sqlFrame.replace("?_" + i, param);
}
return sqlFrame;
}
/**
* 按下标循环分割字符串
*/
public static List splitStrRepeat(String str, Integer index){
List splitList = new ArrayList<>();
while (str.length() > index){
String[] splitStrArrays = {str.substring(0, index), str.substring(index)};
splitList.add(splitStrArrays[0]);
str = splitStrArrays[1];
}
// 最后一个小于index的字符串
if(StringUtils.isNotEmpty(str)){
splitList.add(str);
}
return splitList;
}
}