Ver Fonte

增加驼峰命名

mxd há 5 anos atrás
pai
commit
bea407944d

+ 3 - 2
src/main/java/com/ssssssss/configuration/S8Configuration.java

@@ -17,7 +17,6 @@ import javax.sql.DataSource;
 @Configuration
 public class S8Configuration {
 
-
     @Bean
     public RequestExecutor requestExecutor() {
         return new RequestExecutor();
@@ -36,7 +35,9 @@ public class S8Configuration {
 
     @Bean
     public StatementExecutor statementExecutor(DataSource dataSource,PageProvider pageProvider) {
-        return new StatementExecutor(new SqlExecutor(dataSource),pageProvider);
+        SqlExecutor sqlExecutor = new SqlExecutor(dataSource);
+        sqlExecutor.setMapUnderscoreToCamelCase(true);
+        return new StatementExecutor(sqlExecutor, pageProvider);
     }
 
     @Bean

+ 21 - 1
src/main/java/com/ssssssss/context/CookieContext.java

@@ -1,4 +1,24 @@
 package com.ssssssss.context;
 
-public class CookieContext {
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+
+public class CookieContext extends HashMap<String,String> {
+
+    private Cookie[] cookies;
+
+    public CookieContext(HttpServletRequest request){
+        this.cookies = request.getCookies();
+    }
+
+    @Override
+    public String get(Object key) {
+        for (int i = 0; i < cookies.length; i++) {
+            if(cookies[i].getName().equalsIgnoreCase("" + key)){
+                return cookies[i].getValue();
+            }
+        }
+        return null;
+    }
 }

+ 2 - 0
src/main/java/com/ssssssss/context/RequestContext.java

@@ -25,6 +25,8 @@ public class RequestContext extends HashMap<String,Object> {
             put(key,request.getParameter(key));
         }
         put("header",new HeaderContext(request));
+        put("cookie",new CookieContext(request));
+        put("session",new SessionContext(request.getSession()));
     }
 
     public HttpServletRequest getRequest() {

+ 13 - 3
src/main/java/com/ssssssss/context/SessionContext.java

@@ -1,9 +1,19 @@
 package com.ssssssss.context;
 
-import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.HashMap;
+import java.util.Objects;
 
-public class SessionContext {
+public class SessionContext extends HashMap<String,Object> {
 
-    private HttpServletRequest request;
+    private HttpSession session;
 
+    public SessionContext(HttpSession session){
+        this.session = session;
+    }
+
+    @Override
+    public Object get(Object key) {
+        return session.getAttribute(key.toString());
+    }
 }

+ 42 - 13
src/main/java/com/ssssssss/executor/SqlExecutor.java

@@ -16,10 +16,19 @@ public class SqlExecutor {
 
     private Logger logger = LoggerFactory.getLogger(SqlExecutor.class);
 
+    /**
+     * 是否启用驼峰命名
+     */
+    private boolean mapUnderscoreToCamelCase;
+
     public SqlExecutor(DataSource dataSource) {
         this.dataSource = dataSource;
     }
 
+    public void setMapUnderscoreToCamelCase(boolean mapUnderscoreToCamelCase) {
+        this.mapUnderscoreToCamelCase = mapUnderscoreToCamelCase;
+    }
+
     public Object execute(SqlMode mode, String sql, List<Object> parameters, Class<?> returnType) throws SQLException {
         if (SqlMode.SELECT_LIST == mode) {
             return queryForList(sql, parameters, returnType == null ? Map.class : returnType);
@@ -95,11 +104,7 @@ public class SqlExecutor {
                 ResultSetMetaData rsd = rs.getMetaData();
                 int columnCount = rsd.getColumnCount();
                 if (rs.next()) {
-                    Map<String, Object> row = new HashMap<>(columnCount);
-                    for (int i = 1; i <= columnCount; i++) {
-                        row.put(rsd.getColumnName(i), rs.getObject(i));
-                    }
-                    return row;
+                    return fetchResultSet(rs);
                 }
             } else if (rs.next()) {
                 return rs.getObject(1, returnType);
@@ -120,15 +125,8 @@ public class SqlExecutor {
             rs = stmt.executeQuery();
             List<Object> list = new ArrayList<>();
             if (returnType == null || returnType == Map.class) {
-                Map<String, Object> row;
-                ResultSetMetaData rsd = rs.getMetaData();
-                int columnCount = rsd.getColumnCount();
                 while (rs.next()) {
-                    row = new HashMap<>(columnCount);
-                    for (int i = 1; i <= columnCount; i++) {
-                        row.put(rsd.getColumnName(i), rs.getObject(i));
-                    }
-                    list.add(row);
+                    list.add(fetchResultSet(rs));
                 }
             } else {
                 while (rs.next()) {
@@ -142,6 +140,37 @@ public class SqlExecutor {
         }
     }
 
+    private Map<String,Object> fetchResultSet(ResultSet rs) throws SQLException {
+        ResultSetMetaData rsd = rs.getMetaData();
+        int columnCount = rsd.getColumnCount();
+        Map<String,Object> row = new HashMap<>(columnCount);
+        for (int i = 1; i <= columnCount; i++) {
+            row.put(underscoreToCamelCase(rsd.getColumnName(i)), rs.getObject(i));
+        }
+        return row;
+    }
+
+    private String underscoreToCamelCase(String columnName){
+        if(mapUnderscoreToCamelCase){
+            columnName = columnName.toLowerCase();
+            boolean upperCase = false;
+            StringBuilder sb = new StringBuilder();
+            for (int i = 0; i < columnName.length(); i++) {
+                char ch = columnName.charAt(i);
+                if (ch == '_') {
+                    upperCase = true;
+                } else if (upperCase) {
+                    sb.append(Character.toUpperCase(ch));
+                    upperCase = false;
+                } else {
+                    sb.append(ch);
+                }
+            }
+            columnName = sb.toString();
+        }
+        return columnName;
+    }
+
     private List<Object> queryForList(String sql, List<Object> params, Class<?> returnType) throws SQLException {
         Connection connection = getConnection();
         try {