From 145a6efab30d7a0acb76eee6cd512eba93665efe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期六, 05 十二月 2020 17:19:40 +0800
Subject: [PATCH] 大淘客编码问题解决,mybatis优化

---
 utils/src/main/java/org/yeshi/utils/mybatis/ColumnParseUtil.java |  112 ++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 80 insertions(+), 32 deletions(-)

diff --git a/utils/src/main/java/org/yeshi/utils/mybatis/ColumnParseUtil.java b/utils/src/main/java/org/yeshi/utils/mybatis/ColumnParseUtil.java
index a179a73..01aedc6 100644
--- a/utils/src/main/java/org/yeshi/utils/mybatis/ColumnParseUtil.java
+++ b/utils/src/main/java/org/yeshi/utils/mybatis/ColumnParseUtil.java
@@ -1,42 +1,90 @@
 package org.yeshi.utils.mybatis;
 
+import org.springframework.data.annotation.Transient;
+
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 
 public class ColumnParseUtil {
 
-	public static void parseColumn(Class<?> clz, String path) {
-		Field[] fields = clz.getDeclaredFields();
-		for (Field fd : fields) {
-			Annotation[] as = fd.getAnnotations();
-			for (Annotation a : as) {
-				if (a instanceof Column) {
-					Column c = (Column) a;
-					System.out.println(c.name());
-					ColumnUtil.addColumnToMapper(path, c.name(), fd.getName(), getJDBCType(fd.getType().getName()));
-				}
-			}
-		}
-	}
+    /**
+     * 灏嗗睘鎬ц浆涓烘暟鎹簱瀛楁
+     *
+     * @param fieldName
+     * @return
+     */
+    private static String convertFieldToColumn(String fieldName) {
+        String column = "";
+        for (int i = 0; i < fieldName.length(); i++) {
+            //澶у啓瀛楁瘝
+            if (fieldName.charAt(i) >= 65 && fieldName.charAt(i) <= 90) {
+                //鍓嶉潰涓�涓负闈炲ぇ鍐�
+                if (i > 0 && (fieldName.charAt(i - 1) < 65 || fieldName.charAt(i - 1) > 90)) {
+                    column += "_" + fieldName.charAt(i);
+                } else {
+                    column += fieldName.charAt(i);
+                }
+            } else {
+                column += fieldName.charAt(i);
+            }
+        }
+        return column.toLowerCase();
+    }
 
-	public static String getJDBCType(String type) {
-		if (type.endsWith("java.lang.Long")) {
-			return "BIGINT";
-		} else if (type.endsWith("java.lang.Integer")) {
-			return "INTEGER";
-		} else if (type.endsWith("java.lang.String")) {
-			return "VARCHAR";
-		} else if (type.endsWith("java.lang.Boolean")) {
-			return "BOOLEAN";
-		} else if (type.endsWith("java.math.BigDecimal")) {
-			return "DECIMAL";
-		} else if (type.endsWith("java.util.Date")) {
-			return "TIMESTAMP";
-		} else if (type.endsWith("java.lang.Double")) {
-			return "DOUBLE";
-		} else {
-			return "VARCHAR";
-		}
-	}
+    public static void parseColumn(Class<?> clz, String path) {
+        Field[] fields = clz.getDeclaredFields();
+        for (Field fd : fields) {
+
+            //private/public 闈瀎inal锛宻tatic灞炴�ф墠浼氬弬涓庤В鏋�
+            if (fd.getModifiers() != 1 && fd.getModifiers() != 2) {
+                continue;
+            }
+
+
+            String columName = convertFieldToColumn(fd.getName());
+            Annotation[] as = fd.getAnnotations();
+            for (Annotation a : as) {
+                //涓嶅弬涓庤В鏋�
+                if (a instanceof Column) {
+                    Column c = (Column) a;
+                    columName = c.name();
+
+                }
+            }
+
+            for (Annotation a : as) {
+                //涓嶅弬涓庤В鏋�
+                if (a instanceof Transient || a instanceof java.beans.Transient) {
+                    columName = null;
+                    break;
+                }
+            }
+
+            if (columName != null) {
+                ColumnUtil.addColumnToMapper(path, columName, fd.getName(), getJDBCType(fd.getType().getName()));
+            }
+
+        }
+    }
+
+    public static String getJDBCType(String type) {
+        if (type.endsWith("java.lang.Long")) {
+            return "BIGINT";
+        } else if (type.endsWith("java.lang.Integer")) {
+            return "INTEGER";
+        } else if (type.endsWith("java.lang.String")) {
+            return "VARCHAR";
+        } else if (type.endsWith("java.lang.Boolean")) {
+            return "BOOLEAN";
+        } else if (type.endsWith("java.math.BigDecimal")) {
+            return "DECIMAL";
+        } else if (type.endsWith("java.util.Date")) {
+            return "TIMESTAMP";
+        } else if (type.endsWith("java.lang.Double")) {
+            return "DOUBLE";
+        } else {
+            return "VARCHAR";
+        }
+    }
 
 }

--
Gitblit v1.8.0