Просмотр исходного кода

数据库优化

(cherry picked from commit 394d65dcc0bce430982d4e8cdedd72797f09a9bd)
xiongzhu 4 лет назад
Родитель
Сommit
18894513ea

+ 4 - 0
src/main/java/com/izouma/nineth/annotations/Searchable.java

@@ -1,5 +1,7 @@
 package com.izouma.nineth.annotations;
 
+import com.izouma.nineth.enums.SearchMode;
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -9,4 +11,6 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Searchable {
     boolean value() default true;
+
+    SearchMode mode() default SearchMode.PREFIX;
 }

+ 4 - 1
src/main/java/com/izouma/nineth/domain/Collection.java

@@ -29,7 +29,10 @@ import java.util.List;
         @Index(columnList = "minterId"),
         @Index(columnList = "onShelf"),
         @Index(columnList = "ownerId"),
-        @Index(columnList = "assetId")
+        @Index(columnList = "assetId"),
+        @Index(columnList = "salable"),
+        @Index(columnList = "del"),
+        @Index(columnList = "name")
 })
 @AllArgsConstructor
 @NoArgsConstructor

+ 5 - 2
src/main/java/com/izouma/nineth/domain/User.java

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.izouma.nineth.JsonView.UserView;
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.enums.AuthStatus;
+import com.izouma.nineth.enums.SearchMode;
 import com.izouma.nineth.security.Authority;
 import com.izouma.nineth.utils.UserAuthoritySerializer;
 import io.swagger.annotations.ApiModel;
@@ -33,7 +34,9 @@ import java.util.Set;
         @Index(columnList = "admin"),
         @Index(columnList = "minter"),
         @Index(columnList = "createdAt"),
-        @Index(columnList = "settleAccountId")
+        @Index(columnList = "settleAccountId"),
+        @Index(columnList = "nickname"),
+        @Index(columnList = "del"),
 })
 @AllArgsConstructor
 @NoArgsConstructor
@@ -84,7 +87,7 @@ public class User extends BaseEntityNoID implements Serializable {
 
     private String country;
 
-    @Searchable
+    @Searchable(mode = SearchMode.EXACT)
     private String phone;
 
     private String email;

+ 8 - 0
src/main/java/com/izouma/nineth/enums/SearchMode.java

@@ -0,0 +1,8 @@
+package com.izouma.nineth.enums;
+
+public enum SearchMode {
+    PREFIX,
+    SUFFIX,
+    FULL,
+    EXACT
+}

+ 14 - 1
src/main/java/com/izouma/nineth/utils/JpaUtils.java

@@ -172,7 +172,20 @@ public class JpaUtils {
                 }
 
                 if (field.getType() == String.class) {
-                    or.add(criteriaBuilder.like(root.get(field.getName()), pageQuery.getSearch() + "%"));
+                    switch (annotation.mode()) {
+                        case PREFIX:
+                            or.add(criteriaBuilder.like(root.get(field.getName()), pageQuery.getSearch() + "%"));
+                            break;
+                        case SUFFIX:
+                            or.add(criteriaBuilder.like(root.get(field.getName()), "%" + pageQuery.getSearch()));
+                            break;
+                        case FULL:
+                            or.add(criteriaBuilder.like(root.get(field.getName()), "%" + pageQuery.getSearch() + "%"));
+                            break;
+                        case EXACT:
+                            or.add(criteriaBuilder.equal(root.get(field.getName()), pageQuery.getSearch()));
+                            break;
+                    }
                 } else if (field.getType() == Long.class || field.getType() == long.class) {
                     try {
                         or.add(criteriaBuilder.equal(root.get(field.getName()), Long.parseLong(pageQuery.getSearch())));