浏览代码

修复mysql兼容问题

周浩 9 年之前
父节点
当前提交
cc9ee96f0b

+ 9 - 9
hsweb-web-bean/src/main/resources/system/install/sql/mysql/install.sql

@@ -64,7 +64,7 @@ ALTER TABLE `s_template` COMMENT '模板';
 -- Table structure for S_MODULES
 -- ----------------------------
 CREATE TABLE `s_modules` (
-  `u_id`       VARCHAR(256)  NOT NULL PRIMARY KEY
+  `u_id`       VARCHAR(32)  NOT NULL PRIMARY KEY
   COMMENT 'uid',
   `name`       VARCHAR(256)  NOT NULL
   COMMENT '模块名称',
@@ -87,7 +87,7 @@ ALTER TABLE `s_modules` COMMENT '系统模块';
 
 
 CREATE TABLE `s_module_meta` (
-  `u_id`      VARCHAR(256)  NOT NULL PRIMARY KEY
+  `u_id`      VARCHAR(32)  NOT NULL PRIMARY KEY
   COMMENT 'uid',
   `key`       VARCHAR(256)  NOT NULL
   COMMENT '标识',
@@ -118,7 +118,7 @@ INSERT INTO `s_modules` VALUES ('s_logger', '日志管理', 'admin/logger/list.h
 -- Table structure for S_RESOURCES
 -- ----------------------------
 CREATE TABLE `s_resources` (
-  `u_id`        VARCHAR(256)  NOT NULL PRIMARY KEY
+  `u_id`        VARCHAR(32)  NOT NULL PRIMARY KEY
   COMMENT 'uid',
   `name`        VARCHAR(256)  NOT NULL
   COMMENT '资源名称',
@@ -159,7 +159,7 @@ ALTER TABLE `s_resources` COMMENT '资源表';
 -- Table structure for S_ROLE
 -- ----------------------------
 CREATE TABLE `s_role` (
-  `u_id`   VARCHAR(256) NOT NULL PRIMARY KEY
+  `u_id`   VARCHAR(32) NOT NULL PRIMARY KEY
   COMMENT 'uid',
   `name`   VARCHAR(256) NOT NULL
   COMMENT '角色名称',
@@ -179,7 +179,7 @@ INSERT INTO `s_role` VALUES ('admin', '超级管理员', NULL, '初始数据');
 -- Table structure for S_ROLE_MODULES
 -- ----------------------------
 CREATE TABLE `s_role_modules` (
-  `u_id`      VARCHAR(256) NOT NULL PRIMARY KEY
+  `u_id`      VARCHAR(32) NOT NULL PRIMARY KEY
   COMMENT 'uid',
   `module_id` VARCHAR(256) NOT NULL
   COMMENT '模块id',
@@ -194,7 +194,7 @@ ALTER TABLE `s_role_modules` COMMENT '角色模块绑定表';
 -- Table structure for S_SCRIPT
 -- ----------------------------
 CREATE TABLE `s_script` (
-  `u_id`    VARCHAR(256)  NOT NULL PRIMARY KEY
+  `u_id`    VARCHAR(32)  NOT NULL PRIMARY KEY
   COMMENT 'uid',
   `name`    VARCHAR(256)  NOT NULL
   COMMENT '脚本名称',
@@ -219,7 +219,7 @@ ALTER TABLE `s_script` COMMENT '脚本';
 -- Table structure for S_USER
 -- ----------------------------
 CREATE TABLE `s_user` (
-  `u_id`        VARCHAR(64)  NOT NULL PRIMARY KEY
+  `u_id`        VARCHAR(32)  NOT NULL PRIMARY KEY
   COMMENT 'ID',
   `username`    VARCHAR(64)  NOT NULL
   COMMENT '用户名',
@@ -245,12 +245,12 @@ ALTER TABLE `s_user` COMMENT '用户表';
 -- ----------------------------
 -- Records of S_USER
 -- ----------------------------
-INSERT INTO `s_user` VALUES ('admin', 'admin', '23ec59e119da971084cbd0ba72d230a0', '超级管理员', NULL, NULL, '1', TO_datetime('2015-11-19 12:10:36', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL);
+INSERT INTO `s_user` VALUES ('admin', 'admin', '23ec59e119da971084cbd0ba72d230a0', '超级管理员', NULL, NULL, '1', '1991-08-11 12:10:36', NULL, NULL);
 -- ----------------------------
 -- Table structure for S_USER_ROLE
 -- ----------------------------
 CREATE TABLE `s_user_role` (
-  `u_id`    VARCHAR(256) NOT NULL PRIMARY KEY
+  `u_id`    VARCHAR(32) NOT NULL PRIMARY KEY
   COMMENT 'UID',
   `user_id` VARCHAR(256) NOT NULL
   COMMENT '用户ID',

+ 0 - 3
hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/FormController.java

@@ -32,9 +32,6 @@ public class FormController extends GenericController<Form, String> {
     @Resource
     private FormService formService;
 
-    @Resource
-    private HistoryService historyService;
-
     @Override
     public FormService getService() {
         return this.formService;

+ 16 - 14
hsweb-web-dao-impl-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java

@@ -24,21 +24,20 @@ import java.util.*;
  */
 public class DefaultSqlParamBuilder {
 
-    public String getQuoteStart() {
-        return "\"";
-    }
-
-    public String getQuoteEnd() {
-        return "\"";
-    }
-
     public Dialect getDialect() {
         return Dialect.ORACLE;
     }
 
+    public boolean filedToUpperCase() {
+        return true;
+    }
+
     protected static final Map<Class, String> simpleName = new HashMap<>();
+
     private static DefaultSqlParamBuilder instance = new DefaultSqlParamBuilder();
-   protected PropertyUtilsBean propertyUtils = BeanUtilsBean.getInstance().getPropertyUtils();
+
+    protected PropertyUtilsBean propertyUtils = BeanUtilsBean.getInstance().getPropertyUtils();
+
     public DefaultSqlParamBuilder() {
         simpleName.put(Integer.class, "int");
         simpleName.put(Byte.class, "byte");
@@ -124,7 +123,10 @@ public class DefaultSqlParamBuilder {
             listData = Arrays.asList(param.getData());
         }
         param.setData(listData);
-        String fields = mappings.keySet().stream().reduce((f1, f2) -> f1 + "," + f2).get();
+        String fields = mappings.keySet().stream()
+                .map(str -> new SqlAppender().add(getDialect().getQuoteStart(), filedToUpperCase() ? str.toUpperCase() : str, getDialect().getQuoteEnd()).toString())
+                .reduce((f1, f2) -> new SqlAppender().add(f1, ",", f2)
+                        .toString()).get();
         //批量
         int size = listData.size();
         SqlAppender batchSql = new SqlAppender();
@@ -164,11 +166,11 @@ public class DefaultSqlParamBuilder {
             if (!appender.isEmpty())
                 appender.add(",");
             if (!k.contains(".") || k.split("[.]")[0].equals(tableName)) {
-                appender.add(tableName, ".", k, " as ");
+                appender.add(tableName, ".", getDialect().getQuoteStart(), filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), " as ");
             } else {
-                appender.add(k, " as ");
+                appender.add(getDialect().getQuoteStart(),  filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), " as ");
             }
-            appender.addEdSpc(getQuoteStart(), k, getQuoteEnd());
+            appender.addEdSpc(getDialect().getQuoteStart(), k, getDialect().getQuoteEnd());
         });
         if (appender.isEmpty()) return "*";
         return appender.toString();
@@ -187,7 +189,7 @@ public class DefaultSqlParamBuilder {
                     if (!appender.isEmpty())
                         appender.add(",");
                     Map<String, Object> config = ((Map) fieldConfig.get(k));
-                    appender.add(k, "=", "#{data.", v);
+                    appender.add(getDialect().getQuoteStart(), filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), "=", "#{data.", v);
                     if (config != null) {
                         Object jdbcType = config.get("jdbcType"),
                                 javaType = config.get("javaType");

+ 5 - 9
hsweb-web-dao-impl-mybatis/src/main/java/org/hsweb/web/mybatis/builder/MysqlParamBuilder.java

@@ -11,6 +11,11 @@ public class MysqlParamBuilder extends DefaultSqlParamBuilder {
     public MysqlParamBuilder() {
     }
 
+    @Override
+    public boolean filedToUpperCase() {
+        return false;
+    }
+
     @Override
     public Dialect getDialect() {
         return Dialect.MYSQL;
@@ -20,13 +25,4 @@ public class MysqlParamBuilder extends DefaultSqlParamBuilder {
         return instance;
     }
 
-    @Override
-    public String getQuoteStart() {
-        return "`";
-    }
-
-    @Override
-    public String getQuoteEnd() {
-        return "`";
-    }
 }

+ 23 - 20
hsweb-web-dao-impl-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/mysql/basic/BasicMapper.xml

@@ -5,44 +5,56 @@
 <mapper namespace="BasicMapper">
     <!--通用查询条件-->
     <sql id="buildWhere">
-        ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildWhere(resultMapId,$tableName,#this['_parameter'].terms)}
+        ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildWhere(resultMapId,tableName,#this['_parameter'].terms)}
     </sql>
+
     <!--生成查询字段-->
     <sql id="buildSelectField">
-        ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildSelectFields(resultMapId,#this['_parameter'])}
+        ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildSelectFields(resultMapId,tableName,#this['_parameter'])}
     </sql>
 
     <!--生成修改字段-->
     <sql id="buildUpdateField">
-       <set>
-           ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildUpdateFields(resultMapId,#this['_parameter'])}
-       </set>
+        <set>
+            ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildUpdateFields(resultMapId,#this['_parameter'])}
+        </set>
     </sql>
 
     <!--生成排序字段-->
     <sql id="buildSortField">
-        ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildOrder(resultMapId,$tableName,#this['_parameter'])}
+        ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildOrder(resultMapId,tableName,#this['_parameter'])}
     </sql>
 
     <!--生成查询sql-->
     <sql id="buildSelectSql">
         select
         <include refid="BasicMapper.buildSelectField"/>
-        from ${$tableName}
+        from ${tableName}
         <where>
             <include refid="BasicMapper.buildWhere"/>
         </where>
         <include refid="BasicMapper.buildSortField"/>
     </sql>
 
+    <!--生成删除sql-->
+    <sql id="buildDeleteSql">
+        delete ${tableName} from ${tableName}
+        <where>
+            <include refid="BasicMapper.buildWhere"/>
+            <if test="terms.size()==0">
+              1=2
+            </if>
+        </where>
+    </sql>
+
     <!--生成InsertSql-->
     <sql id="buildInsertSql">
-        insert into ${tableName} ${@org.hsweb.web.mybatis.builder.DefaultSqlParamBuilder@instance().buildInsertSql(resultMapId,#this['_parameter'])}
+        insert into ${tableName} ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildInsertSql(resultMapId,#this['_parameter'])}
     </sql>
 
     <!--生成UpdateSql-->
     <sql id="buildUpdateSql">
-        update ${$tableName}
+        update ${tableName}
         <include refid="BasicMapper.buildUpdateField"/>
         <where>
             <include refid="BasicMapper.buildWhere"/>
@@ -51,19 +63,10 @@
             </if>
         </where>
     </sql>
-    <!--生成删除sql-->
-    <sql id="buildDeleteSql">
-        delete from ${tableName}
-        <where>
-            <include refid="BasicMapper.buildWhere"/>
-            <if test="terms.size()==0">
-                u_id is null
-            </if>
-        </where>
-    </sql>
+
     <!--生成查询数量sql-->
     <sql id="buildTotalSql">
-        select count(0) as "total" from ${$tableName}
+        select count(0) as "total" from ${tableName}
         <where>
             <include refid="BasicMapper.buildWhere"/>
         </where>

+ 1 - 1
hsweb-web-dao-impl-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/mysql/form/FormMapper.xml

@@ -45,7 +45,7 @@
     </select>
 
     <select id="selectUsing" parameterType="string" resultMap="FormResultMap">
-        select * from s_form WHERE using=1 and name=#{name}
+        select * from s_form WHERE `using`=1 and `name`=#{name}
     </select>
 
     <select id="selectLatestList" parameterType="org.hsweb.web.bean.common.QueryParam" resultMap="FormResultMap">

+ 1 - 1
hsweb-web-dao-impl-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/oracle/basic/BasicMapper.xml

@@ -42,7 +42,7 @@
         <where>
             <include refid="BasicMapper.buildWhere"/>
             <if test="terms.size()==0">
-                u_id is null
+               1=2
             </if>
         </where>
     </sql>

+ 28 - 7
hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/system/DataBaseManagerServiceImpl.java

@@ -1,12 +1,19 @@
 package org.hsweb.web.service.impl.system;
 
 import org.hsweb.ezorm.executor.SqlExecutor;
-import org.hsweb.web.bean.common.database.TableField;
+import org.hsweb.ezorm.meta.TableMetaData;
+import org.hsweb.ezorm.meta.parser.MysqlTableMetaParser;
+import org.hsweb.ezorm.meta.parser.OracleTableMetaParser;
+import org.hsweb.ezorm.meta.parser.TableMetaParser;
+import org.hsweb.web.core.Install;
+import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.service.system.DataBaseManagerService;
 import org.hsweb.web.service.system.SqlExecuteProcess;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
+import java.sql.SQLException;
 import java.util.List;
 
 /**
@@ -22,18 +29,32 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
     @Resource
     private SqlExecutor sqlExecutor;
 
-    @Override
-    public List<String> getTableNameList() {
-        return null;
+    private TableMetaParser tableMetaParser;
+
+    @PostConstruct
+    public void init() {
+        switch (Install.getDatabaseType()) {
+            case "mysql":
+                tableMetaParser = new MysqlTableMetaParser(sqlExecutor);
+                break;
+            case "oracle":
+                tableMetaParser = new OracleTableMetaParser(sqlExecutor);
+                break;
+        }
     }
 
     @Override
-    public List<TableField> getFieldList(String tableName) {
-        return null;
+    public List<TableMetaData> getTableList() throws SQLException {
+        if (tableMetaParser == null) {
+            throw new BusinessException("表结构解析器不支持");
+        }
+        return tableMetaParser.parseAll();
     }
 
     @Override
-    public void executeSQL(String sql, SqlExecuteProcess process) throws Exception {
+    public void executeSQL(String sql, SqlExecuteProcess process) throws SQLException {
 
     }
+
+
 }

+ 4 - 12
hsweb-web-service-interface/src/main/java/org/hsweb/web/service/system/DataBaseManagerService.java

@@ -1,7 +1,8 @@
 package org.hsweb.web.service.system;
 
-import org.hsweb.web.bean.common.database.TableField;
+import org.hsweb.ezorm.meta.TableMetaData;
 
+import java.sql.SQLException;
 import java.util.List;
 
 /**
@@ -17,17 +18,8 @@ public interface DataBaseManagerService {
      *
      * @return 表名集合
      */
-    List<String> getTableNameList();
+    List<TableMetaData> getTableList() throws SQLException;
 
-    /**
-     * 获取数据库表的字段信息
-     * 能自动获取数据库类型,并列出表对于的字段
-     * 当前版本支持数据库:h2,mysql,oracle
-     *
-     * @param tableName 数据库表名
-     * @return 字段集合
-     */
-    List<TableField> getFieldList(String tableName);
 
     /**
      * 执行sql语句,多条sql语句使用[;\n]分割
@@ -35,5 +27,5 @@ public interface DataBaseManagerService {
      * @param sql     sql语句
      * @param process 执行过程回调,每执行一个sql都应该调用对应的回调方法
      */
-    void executeSQL(String sql, SqlExecuteProcess process) throws Exception;
+   void executeSQL(String sql, SqlExecuteProcess process) throws SQLException;
 }