@@ -2982,7 +2982,7 @@ public Object getSQLValue(@NotNull Object value) {
29822982 return SQL .NULL ;
29832983 }
29842984 // return (value instanceof Number || value instanceof Boolean) && DATABASE_POSTGRESQL.equals(getDatabase()) ? value : "'" + value + "'";
2985- return (value instanceof Number || value instanceof Boolean ) ? value : "'" + value .toString ().replaceAll ("'" , "\\ '" ) + "'" ; //MySQL 隐式转换用不了索引
2985+ return (value instanceof Number || value instanceof Boolean ) ? value : "'" + value .toString ().replaceAll ("\\ '" , "\\ \\ '" ) + "'" ; //MySQL 隐式转换用不了索引
29862986 }
29872987
29882988 @ Override
@@ -3044,7 +3044,7 @@ public String getSearchString(String key, String column, Object[] values, int ty
30443044 // throw new IllegalArgumentException(key + "$:value 中 value 值 " + v + " 中包含 %% !不允许有连续的 % !");
30453045 // }
30463046
3047- condition += (i <= 0 ? "" : (Logic .isAnd (type ) ? AND : OR )) + getLikeString (key , column , v );
3047+ condition += (i <= 0 ? "" : (Logic .isAnd (type ) ? AND : OR )) + getLikeString (key , column , ( String ) v );
30483048 }
30493049
30503050 return getCondition (Logic .isNot (type ), condition );
@@ -3057,7 +3057,53 @@ public String getSearchString(String key, String column, Object[] values, int ty
30573057 * @return key LIKE 'value'
30583058 */
30593059 @ JSONField (serialize = false )
3060- public String getLikeString (String key , String column , Object value ) {
3060+ public String getLikeString (@ NotNull String key , @ NotNull String column , String value ) {
3061+ String k = key .substring (0 , key .length () - 1 );
3062+ char r = k .charAt (k .length () - 1 );
3063+
3064+ char l ;
3065+ if (r == '%' || r == '_' || r == '?' ) {
3066+ k = k .substring (0 , k .length () - 1 );
3067+
3068+ l = k .charAt (k .length () - 1 );
3069+ if (l == '%' || l == '_' || l == '?' ) {
3070+ if (l == r ) {
3071+ throw new IllegalArgumentException (key + ":value 中字符 " + k + " 不合法!key$:value 中不允许 key 中有连续相同的占位符!" );
3072+ }
3073+
3074+ k = k .substring (0 , k .length () - 1 );
3075+ }
3076+ else if (l > 0 && StringUtil .isName (String .valueOf (l ))) {
3077+ l = r ;
3078+ }
3079+
3080+ if (l == '?' ) {
3081+ l = 0 ;
3082+ }
3083+ if (r == '?' ) {
3084+ r = 0 ;
3085+ }
3086+ }
3087+ else {
3088+ l = r = 0 ;
3089+ }
3090+
3091+ if (l > 0 || r > 0 ) {
3092+ if (value == null ) {
3093+ throw new IllegalArgumentException (key + ":value 中 value 为 null!key$:value 中 value 不能为 null,且类型必须是 String !" );
3094+ }
3095+
3096+ value = value .replaceAll ("\\ \\ " , "\\ \\ \\ \\ " );
3097+ value = value .replaceAll ("\\ %" , "\\ \\ %" );
3098+ value = value .replaceAll ("\\ _" , "\\ \\ _" );
3099+ if (l > 0 ) {
3100+ value = l + value ;
3101+ }
3102+ if (r > 0 ) {
3103+ value = value + r ;
3104+ }
3105+ }
3106+
30613107 return getKey (column ) + " LIKE " + getValue (key , column , value );
30623108 }
30633109
0 commit comments