ソースを参照

优化sqlserver支持

zhouhao 8 年 前
コミット
c65db15d0d

+ 18 - 12
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/EasyOrmSqlBuilder.java

@@ -30,7 +30,6 @@ import java.util.concurrent.ConcurrentMap;
 
 /**
  * @author zhouhao
- * @TODO
  */
 public class EasyOrmSqlBuilder {
 
@@ -148,8 +147,8 @@ public class EasyOrmSqlBuilder {
         SqlAppender appender = new SqlAppender();
         columns.forEach(column -> {
             RDBColumnMetaData columnMetaData = column.getRDBColumnMetaData();
-            if (columnMetaData.getName().contains(".")) return;
             if (columnMetaData == null) return;
+            if (columnMetaData.getName().contains(".")) return;
             try {
                 Object tmp = propertyUtils.getProperty(param.getData(), columnMetaData.getAlias());
                 if (tmp == null) return;
@@ -219,16 +218,15 @@ public class EasyOrmSqlBuilder {
     public String buildOrder(String resultMapId, String tableName, QueryParam param) {
         RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
         SqlAppender appender = new SqlAppender(" order by ");
-        param.getSorts().stream()
-                .forEach(sort -> {
-                    RDBColumnMetaData column = tableMetaData.getColumn(sort.getName());
-                    if (column == null)
-                        column = tableMetaData.findColumn(sort.getName());
-                    if (column == null) return;
-                    String cname = column.getName();
-                    if (!cname.contains(".")) cname = tableName.concat(".").concat(cname);
-                    appender.add(encodeColumn(tableMetaData.getDatabaseMetaData().getDialect(), cname), " ", sort.getOrder(), ",");
-                });
+        param.getSorts().forEach(sort -> {
+            RDBColumnMetaData column = tableMetaData.getColumn(sort.getName());
+            if (column == null)
+                column = tableMetaData.findColumn(sort.getName());
+            if (column == null) return;
+            String cname = column.getName();
+            if (!cname.contains(".")) cname = tableName.concat(".").concat(cname);
+            appender.add(encodeColumn(tableMetaData.getDatabaseMetaData().getDialect(), cname), " ", sort.getOrder(), ",");
+        });
         if (appender.isEmpty()) return "";
         appender.removeLast();
         return appender.toString();
@@ -242,6 +240,14 @@ public class EasyOrmSqlBuilder {
         return where;
     }
 
+    public String buildQuerySql(String resultMapId, String tableName, Object param) {
+        Pager.reset(); //不使用插件进行分页
+        RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
+        RDBDatabaseMetaData databaseMetaDate = getActiveDatabase();
+        CommonSqlRender render = (CommonSqlRender) databaseMetaDate.getRenderer(SqlRender.TYPE.SELECT);
+        return render.render(tableMetaData, param).getSql();
+    }
+
     public String buildWhere(String resultMapId, String tableName, List<Term> terms) {
         RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
         RDBDatabaseMetaData databaseMetaDate = getActiveDatabase();

+ 26 - 4
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/system/DataBaseManagerServiceImpl.java

@@ -6,12 +6,10 @@ import org.hsweb.ezorm.rdb.executor.SqlExecutor;
 import org.hsweb.ezorm.rdb.meta.RDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
 import org.hsweb.ezorm.rdb.meta.expand.SimpleMapWrapper;
-import org.hsweb.ezorm.rdb.meta.parser.H2TableMetaParser;
-import org.hsweb.ezorm.rdb.meta.parser.MysqlTableMetaParser;
-import org.hsweb.ezorm.rdb.meta.parser.OracleTableMetaParser;
-import org.hsweb.ezorm.rdb.meta.parser.TableMetaParser;
+import org.hsweb.ezorm.rdb.meta.parser.*;
 import org.hsweb.ezorm.rdb.render.SqlRender;
 import org.hsweb.ezorm.rdb.render.dialect.H2RDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.render.dialect.MSSQLRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.render.dialect.MysqlRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.render.dialect.OracleRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.render.support.simple.SimpleSQL;
@@ -97,6 +95,7 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
     }
 
     public String createAlterSql(RDBDatabaseMetaData databaseMetaData, TableMetaParser tableMetaParser, RDBTableMetaData newTable) throws Exception {
+        newTable.setDatabaseMetaData(databaseMetaData);
         databaseMetaData.putTable(tableMetaParser.parse(newTable.getName()));
         SQL sql = databaseMetaData.getRenderer(SqlRender.TYPE.META_ALTER).render(newTable, true);
         if (sql instanceof EmptySQL) return "";
@@ -113,6 +112,7 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
     }
 
     public String createCreateSql(RDBDatabaseMetaData databaseMetaData, RDBTableMetaData newTable) throws Exception {
+        newTable.setDatabaseMetaData(databaseMetaData);
         SQL sql = databaseMetaData.getRenderer(SqlRender.TYPE.META_CREATE).render(newTable, true);
         if (sql instanceof EmptySQL) return "";
         StringBuilder builder = new StringBuilder(sql.getSql());
@@ -159,6 +159,28 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
             public RDBDatabaseMetaData getDatabaseMetaData() {
                 return new H2RDBDatabaseMetaData();
             }
+        },
+        sqlserver {
+            @Override
+            public RDBDatabaseMetaData getDatabaseMetaData() {
+                return new MSSQLRDBDatabaseMetaData();
+            }
+
+            @Override
+            public TableMetaParser getTableMetaParser(SqlExecutor sqlExecutor) {
+                return new SqlServer2012TableMetaParser(sqlExecutor);
+            }
+        },
+        jtds_sqlserver{
+            @Override
+            public RDBDatabaseMetaData getDatabaseMetaData() {
+                return new MSSQLRDBDatabaseMetaData();
+            }
+
+            @Override
+            public TableMetaParser getTableMetaParser(SqlExecutor sqlExecutor) {
+                return new SqlServer2012TableMetaParser(sqlExecutor);
+            }
         };
 
         public abstract RDBDatabaseMetaData getDatabaseMetaData();