Forráskód Böngészése

优化orm。使用新版easyorm。查询更方便

zhouhao 8 éve
szülő
commit
4e24d1ba34
100 módosított fájl, 1817 hozzáadás és 734 törlés
  1. 2 1
      README.md
  2. 53 0
      doc/2.API.md
  3. 2 2
      hsweb-web-bean/pom.xml
  4. 1 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/DeleteParam.java
  5. 1 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/InsertParam.java
  6. 5 8
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/QueryParam.java
  7. 0 7
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/Sort.java
  8. 2 2
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/SqlParam.java
  9. 1 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateMapParam.java
  10. 1 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateParam.java
  11. 18 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/GenericPo.java
  12. 41 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/classified/Classified.java
  13. 24 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/config/Config.java
  14. 45 0
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/datasource/DataSource.java
  15. 31 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/draft/Draft.java
  16. 66 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/form/Form.java
  17. 46 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/history/History.java
  18. 96 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/logger/LoggerInfo.java
  19. 37 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/Module.java
  20. 36 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/ModuleMeta.java
  21. 35 0
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/plan/QueryPlan.java
  22. 21 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/profile/UserProfile.java
  23. 36 0
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJob.java
  24. 30 0
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJobHistory.java
  25. 51 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/resource/Resources.java
  26. 26 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/Role.java
  27. 26 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/RoleModule.java
  28. 17 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/UserRole.java
  29. 27 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/script/DynamicScript.java
  30. 31 13
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/system/SystemVersion.java
  31. 71 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/template/Template.java
  32. 50 1
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java
  33. 1 1
      hsweb-web-concurrent/hsweb-web-concurrent-cache/pom.xml
  34. 1 1
      hsweb-web-concurrent/hsweb-web-concurrent-lock/pom.xml
  35. 1 1
      hsweb-web-concurrent/pom.xml
  36. 1 1
      hsweb-web-controller/pom.xml
  37. 2 10
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/ExceptionHandlerConfiguration.java
  38. 4 2
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/RestControllerExceptionTranslator.java
  39. 11 12
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java
  40. 22 6
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/login/UserModuleController.java
  41. 11 11
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/system/DatabaseManagerController.java
  42. 9 7
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/user/UserController.java
  43. 2 2
      hsweb-web-core/pom.xml
  44. 3 3
      hsweb-web-core/src/main/java/org/hsweb/web/core/Install.java
  45. 12 6
      hsweb-web-core/src/main/java/org/hsweb/web/core/datasource/DatabaseType.java
  46. 1 1
      hsweb-web-dao/hsweb-web-dao-api/pom.xml
  47. 1 1
      hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/form/FormMapper.java
  48. 1 1
      hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/template/TemplateMapper.java
  49. 1 1
      hsweb-web-dao/hsweb-web-dao-mybatis/README.md
  50. 12 10
      hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml
  51. 4 2
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/MyBatisAutoConfiguration.java
  52. 22 22
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java
  53. 266 0
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/EasyOrmSqlBuilder.java
  54. 17 0
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/InsertSqlBuilder.java
  55. 3 4
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/MysqlParamBuilder.java
  56. 10 12
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/SqlBuilder.java
  57. 22 0
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/UpdateSqlBuilder.java
  58. 65 0
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/Pager.java
  59. 0 13
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerHelper.java
  60. 18 22
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerInterceptor.java
  61. 0 15
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/H2PagerHelper.java
  62. 0 29
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/MysqlPagerHelper.java
  63. 0 34
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/OraclePagerHelper.java
  64. 2 1
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/utils/SqlAppender.java
  65. 36 28
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/basic/BasicMapper.xml
  66. 2 3
      hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/SpringApplication.java
  67. 22 1
      hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/user/UserMapperTest.java
  68. 1 1
      hsweb-web-dao/hsweb-web-dao-mybatis/src/test/resources/application.yml
  69. 1 1
      hsweb-web-dao/pom.xml
  70. 1 1
      hsweb-web-datasource/pom.xml
  71. 16 49
      hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicDataSourceSqlExecutorService.java
  72. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-controller/pom.xml
  73. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-core/pom.xml
  74. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-mybatis/pom.xml
  75. 15 1
      hsweb-web-oauth2/hsweb-web-oauth2-service-simple/pom.xml
  76. 0 1
      hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ClientServiceImpl.java
  77. 1 2
      hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ServiceImpl.java
  78. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-simple/pom.xml
  79. 1 1
      hsweb-web-oauth2/pom.xml
  80. 1 1
      hsweb-web-service/hsweb-web-service-api/pom.xml
  81. 48 3
      hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/GenericService.java
  82. 3 2
      hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormDataValidator.java
  83. 4 4
      hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormService.java
  84. 3 7
      hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/FormParser.java
  85. 5 4
      hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/system/DataBaseManagerService.java
  86. 2 2
      hsweb-web-service/hsweb-web-service-simple/pom.xml
  87. 18 0
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/AbstractServiceImpl.java
  88. 20 29
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DataBaseAutoConfiguration.java
  89. 0 46
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DatabaseMetaDataFactoryBean.java
  90. 3 10
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/FormDeployContextLoaderListener.java
  91. 14 68
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/basic/SqlExecutorService.java
  92. 4 1
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/config/ConfigServiceImpl.java
  93. 9 7
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/datasource/DataSourceServiceImpl.java
  94. 53 89
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DefaultFormParser.java
  95. 45 54
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java
  96. 10 10
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java
  97. 4 4
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidator.java
  98. 11 6
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidatorFactory.java
  99. 6 9
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/history/HistoryServiceImpl.java
  100. 0 0
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleMetaServiceImpl.java

+ 2 - 1
README.md

@@ -1,4 +1,4 @@
-## 后台管理基础框架
+## hsweb后台管理基础框架
 
 
 [![Build Status](https://travis-ci.org/hs-web/hsweb-framework.svg?branch=master)](https://travis-ci.org/hs-web/hsweb-framework)
 [![Build Status](https://travis-ci.org/hs-web/hsweb-framework.svg?branch=master)](https://travis-ci.org/hs-web/hsweb-framework)
 [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg?style=flat-square)](https://www.apache.org/licenses/LICENSE-2.0.html)
 [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg?style=flat-square)](https://www.apache.org/licenses/LICENSE-2.0.html)
@@ -37,6 +37,7 @@
 7. 数据库支持 mysql,oracle,h2.
 7. 数据库支持 mysql,oracle,h2.
 8. websocket支持.
 8. websocket支持.
 9. 定时调度支持,可在页面配置定时任务,编写任务脚本执行。
 9. 定时调度支持,可在页面配置定时任务,编写任务脚本执行。
+10. **强大的dsl查询方式,复杂条件一句生成**
 
 
 ### 演示
 ### 演示
 1. 示例:[demo.hsweb.me](http://demo.hsweb.me)
 1. 示例:[demo.hsweb.me](http://demo.hsweb.me)

+ 53 - 0
doc/2.API.md

@@ -0,0 +1,53 @@
+# hsweb 常用api
+
+## CRUD
+[如何创建通用crud](./create-crud.md)
+
+查询:
+```java
+    
+    import static MyBean.Property.*; //属性名
+    myService.createQuery()
+        .where(name,"admin")
+        .or(name,"root")
+        .list(); //list(), list(0,10), single(),total();
+    //or
+    myService.createQuery().fromBean(myBean)
+        .where(name)
+        .or(name)
+        .list(); 
+    
+    // 复杂查询条件
+    // 等同sql  where name is not null and (name like '李%' or name like '周%') and age >0
+    // 参数全部预编译,不用担心注入
+     myService.createQuery()
+        .where().notNull(name)
+        .nest().or().like$(name,"李").or().like$(name,"周").end()
+        .and().gt(age,10).list();
+     
+    //自定义sql条件
+    import static org.hsweb.ezorm.rdb.render.dialect.Dialect.TermTypeMapper.sql;
+    
+    myService.createQuery()
+        .where()
+        .and(id,sql("name !=''"))// 第一个参数为任意值,只要是表中的字段
+        .or(id,sql("age > #{age}",{age:10}))// 使用预编译方式
+        .or(id,sql("age > #{[0]}",Arrays.asList(10)))
+        .list(); 
+```
+
+修改,支持和query一致的条件
+```java
+    import static MyBean.Property.*;
+    myService.createUpdate()
+        .set(status,1)
+        .where(id,"data-id").exec();
+    // or
+    myService.createUpdate(myBean).fromBean().where(id).exec();
+```
+
+删除,支持和query一致的条件
+```java
+    import static MyBean.Property.*;
+    myService.createDelete().where(id,"data-id").exec();
+```

+ 2 - 2
hsweb-web-bean/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-bean</artifactId>
     <artifactId>hsweb-web-bean</artifactId>
@@ -18,7 +18,7 @@
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>org.hsweb</groupId>
             <groupId>org.hsweb</groupId>
-            <artifactId>hsweb-easy-orm</artifactId>
+            <artifactId>hsweb-easy-orm-rdb</artifactId>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>org.hsweb</groupId>
             <groupId>org.hsweb</groupId>

+ 1 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/DeleteParam.java

@@ -3,7 +3,7 @@ package org.hsweb.web.bean.common;
 /**
 /**
  * Created by zhouhao on 16-4-19.
  * Created by zhouhao on 16-4-19.
  */
  */
-public class DeleteParam extends SqlParam<DeleteParam> {
+public class DeleteParam extends SqlParam {
     public static DeleteParam build() {
     public static DeleteParam build() {
         return new DeleteParam();
         return new DeleteParam();
     }
     }

+ 1 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/InsertParam.java

@@ -3,7 +3,7 @@ package org.hsweb.web.bean.common;
 /**
 /**
  * Created by zhouhao on 16-4-19.
  * Created by zhouhao on 16-4-19.
  */
  */
-public class InsertParam<T> extends org.hsweb.ezorm.param.InsertParam<T> {
+public class InsertParam<T> extends org.hsweb.ezorm.core.param.InsertParam<T> {
 
 
     public InsertParam() {
     public InsertParam() {
     }
     }

+ 5 - 8
hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/QueryParam.java

@@ -1,20 +1,17 @@
 package org.hsweb.web.bean.common;
 package org.hsweb.web.bean.common;
 
 
 
 
-import org.hsweb.ezorm.param.Term;
-import org.hsweb.ezorm.param.TermType;
+import org.hsweb.ezorm.core.param.Term;
+import org.hsweb.ezorm.core.param.TermType;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
-/**
- * Created by 浩 on 2016-01-16 0016.
- */
-public class QueryParam extends org.hsweb.ezorm.param.QueryParam<QueryParam> implements Serializable {
-    private static final long serialVersionUID = 7941767360194797891L;
-    private Map<String, Object> param = new HashMap<>();
+public class QueryParam extends org.hsweb.ezorm.core.param.QueryParam implements Serializable {
+    private static final long                serialVersionUID = 7941767360194797891L;
+    private              Map<String, Object> param            = new HashMap<>();
 
 
     public QueryParam noPaging() {
     public QueryParam noPaging() {
         setPaging(false);
         setPaging(false);

+ 0 - 7
hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/Sort.java

@@ -1,7 +0,0 @@
-package org.hsweb.web.bean.common;
-
-/**
- * Created by zhouhao on 16-5-14.
- */
-public class Sort extends org.hsweb.ezorm.param.Sort {
-}

+ 2 - 2
hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/SqlParam.java

@@ -8,7 +8,7 @@ import java.util.Map;
 /**
 /**
  * Created by zhouhao on 16-4-19.
  * Created by zhouhao on 16-4-19.
  */
  */
-public class SqlParam<R extends SqlParam> extends org.hsweb.ezorm.param.SqlParam<R> {
+public class SqlParam extends org.hsweb.ezorm.core.param.Param {
 
 
     protected Map<String, Object> params = new HashMap<>();
     protected Map<String, Object> params = new HashMap<>();
 
 
@@ -26,6 +26,6 @@ public class SqlParam<R extends SqlParam> extends org.hsweb.ezorm.param.SqlParam
     }
     }
 
 
     public static SqlParam build() {
     public static SqlParam build() {
-        return new SqlParam<>();
+        return new SqlParam();
     }
     }
 }
 }

+ 1 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateMapParam.java

@@ -16,7 +16,7 @@ public class UpdateMapParam extends UpdateParam<Map<String, Object>> {
     }
     }
 
 
     public UpdateMapParam set(String key, Object value) {
     public UpdateMapParam set(String key, Object value) {
-        this.getData().put(key, value);
+        ((Map<String, Object>) this.getData()).put(key, value);
         return this;
         return this;
     }
     }
 
 

+ 1 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateParam.java

@@ -3,7 +3,7 @@ package org.hsweb.web.bean.common;
 /**
 /**
  * Created by zhouhao on 16-4-19.
  * Created by zhouhao on 16-4-19.
  */
  */
-public class UpdateParam<T> extends org.hsweb.ezorm.param.UpdateParam<T,UpdateParam<T>> {
+public class UpdateParam<T> extends org.hsweb.ezorm.core.param.UpdateParam<T> {
 
 
     public UpdateParam() {
     public UpdateParam() {
     }
     }

+ 18 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/GenericPo.java

@@ -2,6 +2,7 @@ package org.hsweb.web.bean.po;
 
 
 
 
 import org.hsweb.commons.MD5;
 import org.hsweb.commons.MD5;
+import org.hsweb.web.bean.po.module.Module;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
@@ -78,8 +79,24 @@ public class GenericPo<PK> implements Serializable, Cloneable {
     public Object clone() throws CloneNotSupportedException {
     public Object clone() throws CloneNotSupportedException {
         Field[] fields = this.getClass().getDeclaredFields();
         Field[] fields = this.getClass().getDeclaredFields();
         for (int i = 0; i < fields.length; i++) {
         for (int i = 0; i < fields.length; i++) {
-            
+
         }
         }
         return super.clone();
         return super.clone();
     }
     }
+
+    public interface Property {
+        /**
+         * 主键
+         *
+         * @see GenericPo#id
+         */
+        String id = "id";
+
+        /**
+         * 其他属性
+         *
+         * @see GenericPo#properties
+         */
+        String properties = "properties";
+    }
 }
 }

+ 41 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/classified/Classified.java

@@ -151,4 +151,44 @@ public class Classified extends GenericPo<String> {
     public void setSortIndex(int sortIndex) {
     public void setSortIndex(int sortIndex) {
         this.sortIndex = sortIndex;
         this.sortIndex = sortIndex;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see Classified#name
+	 */
+	String name="name";
+	/**
+	 *
+	 * @see Classified#remark
+	 */
+	String remark="remark";
+	/**
+	 *
+	 * @see Classified#type
+	 */
+	String type="type";
+	/**
+	 *
+	 * @see Classified#parentId
+	 */
+	String parentId="parentId";
+	/**
+	 *
+	 * @see Classified#icon
+	 */
+	String icon="icon";
+	/**
+	 *
+	 * @see Classified#config
+	 */
+	String config="config";
+	/**
+	 *
+	 * @see Classified#sortIndex
+	 */
+	String sortIndex="sortIndex";
+	}
+}

+ 24 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/config/Config.java

@@ -165,4 +165,27 @@ public class Config extends GenericPo<String> {
         List<Map<Object, Object>> array = (List) JSON.parseArray(getContent(), Map.class);
         List<Map<Object, Object>> array = (List) JSON.parseArray(getContent(), Map.class);
         return array;
         return array;
     }
     }
-}
+
+    public interface Property extends GenericPo.Property {
+        /**
+         * @see Config#remark
+         */
+        String remark           = "remark";
+        /**
+         * @see Config#content
+         */
+        String content          = "content";
+        /**
+         * @see Config#createDate
+         */
+        String createDate       = "createDate";
+        /**
+         * @see Config#updateDate
+         */
+        String updateDate       = "updateDate";
+        /**
+         * @see Config#classifiedId
+         */
+        String classifiedId     = "classifiedId";
+    }
+}

+ 45 - 0
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/datasource/DataSource.java

@@ -154,4 +154,49 @@ public class DataSource extends GenericPo<String> {
         builder.append(driver).append(url).append(username).append(password).append(enabled);
         builder.append(driver).append(url).append(username).append(password).append(enabled);
         return builder.toString().hashCode();
         return builder.toString().hashCode();
     }
     }
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see DataSource#name
+	 */
+	String name="name";
+	/**
+	 *
+	 * @see DataSource#driver
+	 */
+	String driver="driver";
+	/**
+	 *
+	 * @see DataSource#url
+	 */
+	String url="url";
+	/**
+	 *
+	 * @see DataSource#username
+	 */
+	String username="username";
+	/**
+	 *
+	 * @see DataSource#testSql
+	 */
+	String testSql="testSql";
+	/**
+	 *
+	 * @see DataSource#password
+	 */
+	String password="password";
+	/**
+	 *
+	 * @see DataSource#enabled
+	 */
+	String enabled="enabled";
+	/**
+	 *
+	 * @see DataSource#createDate
+	 */
+	String createDate="createDate";
+	}
 }
 }

+ 31 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/draft/Draft.java

@@ -54,4 +54,34 @@ public class Draft extends GenericPo<String> {
     public void setKey(String key) {
     public void setKey(String key) {
         this.key = key;
         this.key = key;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see Draft#name
+	 */
+	String name="name";
+	/**
+	 *
+	 * @see Draft#value
+	 */
+	String value="value";
+	/**
+	 *
+	 * @see Draft#key
+	 */
+	String key="key";
+	/**
+	 *
+	 * @see Draft#createDate
+	 */
+	String createDate="createDate";
+	/**
+	 *
+	 * @see Draft#creatorId
+	 */
+	String creatorId="creatorId";
+	}
+}

+ 66 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/form/Form.java

@@ -189,4 +189,69 @@ public class Form extends GenericPo<String> {
     public void setClassifiedId(String classifiedId) {
     public void setClassifiedId(String classifiedId) {
         this.classifiedId = classifiedId;
         this.classifiedId = classifiedId;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see Form#name
+	 */
+	String name="name";
+	/**
+	 *
+	 * @see Form#html
+	 */
+	String html="html";
+	/**
+	 *
+	 * @see Form#meta
+	 */
+	String meta="meta";
+	/**
+	 *
+	 * @see Form#config
+	 */
+	String config="config";
+	/**
+	 *
+	 * @see Form#remark
+	 */
+	String remark="remark";
+	/**
+	 *
+	 * @see Form#version
+	 */
+	String version="version";
+	/**
+	 *
+	 * @see Form#revision
+	 */
+	String revision="revision";
+	/**
+	 *
+	 * @see Form#release
+	 */
+	String release="release";
+	/**
+	 *
+	 * @see Form#using
+	 */
+	String using="using";
+	/**
+	 *
+	 * @see Form#createDate
+	 */
+	String createDate="createDate";
+	/**
+	 *
+	 * @see Form#updateDate
+	 */
+	String updateDate="updateDate";
+	/**
+	 *
+	 * @see Form#classifiedId
+	 */
+	String classifiedId="classifiedId";
+	}
+}

+ 46 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/history/History.java

@@ -131,4 +131,49 @@ public class History extends GenericPo<String> {
         history.setCreatorId("Sys");
         history.setCreatorId("Sys");
         return history;
         return history;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see History#type
+	 */
+	String type="type";
+	/**
+	 *
+	 * @see History#describe
+	 */
+	String describe="describe";
+	/**
+	 *
+	 * @see History#primaryKeyName
+	 */
+	String primaryKeyName="primaryKeyName";
+	/**
+	 *
+	 * @see History#primaryKeyValue
+	 */
+	String primaryKeyValue="primaryKeyValue";
+	/**
+	 *
+	 * @see History#changeBefore
+	 */
+	String changeBefore="changeBefore";
+	/**
+	 *
+	 * @see History#changeAfter
+	 */
+	String changeAfter="changeAfter";
+	/**
+	 *
+	 * @see History#createDate
+	 */
+	String createDate="createDate";
+	/**
+	 *
+	 * @see History#creatorId
+	 */
+	String creatorId="creatorId";
+	}
+}

+ 96 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/logger/LoggerInfo.java

@@ -246,4 +246,99 @@ public class LoggerInfo extends GenericPo<String> {
     public void setCacheKey(String cacheKey) {
     public void setCacheKey(String cacheKey) {
         this.cacheKey = cacheKey;
         this.cacheKey = cacheKey;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see LoggerInfo#clientIp
+	 */
+	String clientIp="clientIp";
+	/**
+	 *
+	 * @see LoggerInfo#requestUri
+	 */
+	String requestUri="requestUri";
+	/**
+	 *
+	 * @see LoggerInfo#requestUrl
+	 */
+	String requestUrl="requestUrl";
+	/**
+	 *
+	 * @see LoggerInfo#requestMethod
+	 */
+	String requestMethod="requestMethod";
+	/**
+	 *
+	 * @see LoggerInfo#responseContent
+	 */
+	String responseContent="responseContent";
+	/**
+	 *
+	 * @see LoggerInfo#userId
+	 */
+	String userId="userId";
+	/**
+	 *
+	 * @see LoggerInfo#requestTime
+	 */
+	String requestTime="requestTime";
+	/**
+	 *
+	 * @see LoggerInfo#responseTime
+	 */
+	String responseTime="responseTime";
+	/**
+	 *
+	 * @see LoggerInfo#useTime
+	 */
+	String useTime="useTime";
+	/**
+	 *
+	 * @see LoggerInfo#referer
+	 */
+	String referer="referer";
+	/**
+	 *
+	 * @see LoggerInfo#userAgent
+	 */
+	String userAgent="userAgent";
+	/**
+	 *
+	 * @see LoggerInfo#responseCode
+	 */
+	String responseCode="responseCode";
+	/**
+	 *
+	 * @see LoggerInfo#requestHeader
+	 */
+	String requestHeader="requestHeader";
+	/**
+	 *
+	 * @see LoggerInfo#className
+	 */
+	String className="className";
+	/**
+	 *
+	 * @see LoggerInfo#moduleDesc
+	 */
+	String moduleDesc="moduleDesc";
+	/**
+	 *
+	 * @see LoggerInfo#requestParam
+	 */
+	String requestParam="requestParam";
+	/**
+	 *
+	 * @see LoggerInfo#exceptionInfo
+	 */
+	String exceptionInfo="exceptionInfo";
+	/**
+	 *
+	 * @see LoggerInfo#cacheKey
+	 */
+	String cacheKey="cacheKey";
+	}
+}

+ 37 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/Module.java

@@ -196,4 +196,40 @@ public class Module extends GenericPo<String> implements Comparable<Module> {
         return ((Long) getSortIndex()).compareTo(o.getSortIndex());
         return ((Long) getSortIndex()).compareTo(o.getSortIndex());
     }
     }
 
 
-}
+
+    public interface Property extends GenericPo.Property {
+        /**
+         * @see Module#name
+         */
+        String name      = "name";
+        /**
+         * @see Module#uri
+         */
+        String uri       = "uri";
+        /**
+         * @see Module#icon
+         */
+        String icon      = "icon";
+        /**
+         * @see Module#parentId
+         */
+        String parentId  = "parentId";
+        /**
+         * @see Module#remark
+         */
+        String remark    = "remark";
+        /**
+         * @see Module#status
+         */
+        String status    = "status";
+        /**
+         * @see Module#optional
+         */
+        String optional  = "optional";
+        /**
+         * @see Module#sortIndex
+         */
+        String sortIndex = "sortIndex";
+    }
+
+}

+ 36 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/ModuleMeta.java

@@ -81,4 +81,39 @@ public class ModuleMeta extends GenericPo<String> {
         builder.append(status);
         builder.append(status);
         return MD5.defaultEncode(builder.toString());
         return MD5.defaultEncode(builder.toString());
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see ModuleMeta#key
+	 */
+	String key="key";
+	/**
+	 *
+	 * @see ModuleMeta#remark
+	 */
+	String remark="remark";
+	/**
+	 *
+	 * @see ModuleMeta#moduleId
+	 */
+	String moduleId="moduleId";
+	/**
+	 *
+	 * @see ModuleMeta#roleId
+	 */
+	String roleId="roleId";
+	/**
+	 *
+	 * @see ModuleMeta#meta
+	 */
+	String meta="meta";
+	/**
+	 *
+	 * @see ModuleMeta#status
+	 */
+	String status="status";
+	}
+}

+ 35 - 0
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/plan/QueryPlan.java

@@ -134,4 +134,39 @@ public class QueryPlan extends GenericPo<String> {
     public void setCreateDate(java.util.Date createDate) {
     public void setCreateDate(java.util.Date createDate) {
         this.createDate = createDate;
         this.createDate = createDate;
     }
     }
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see QueryPlan#name
+	 */
+	String name="name";
+	/**
+	 *
+	 * @see QueryPlan#type
+	 */
+	String type="type";
+	/**
+	 *
+	 * @see QueryPlan#config
+	 */
+	String config="config";
+	/**
+	 *
+	 * @see QueryPlan#sharing
+	 */
+	String sharing="sharing";
+	/**
+	 *
+	 * @see QueryPlan#creatorId
+	 */
+	String creatorId="creatorId";
+	/**
+	 *
+	 * @see QueryPlan#createDate
+	 */
+	String createDate="createDate";
+	}
 }
 }

+ 21 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/profile/UserProfile.java

@@ -39,4 +39,24 @@ public class UserProfile extends GenericPo<String> {
     public void setContent(String content) {
     public void setContent(String content) {
         this.content = content;
         this.content = content;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see UserProfile#userId
+	 */
+	String userId="userId";
+	/**
+	 *
+	 * @see UserProfile#type
+	 */
+	String type="type";
+	/**
+	 *
+	 * @see UserProfile#content
+	 */
+	String content="content";
+	}
+}

+ 36 - 0
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJob.java

@@ -183,4 +183,40 @@ public class QuartzJob extends GenericPo<String> {
     public void setType(byte type) {
     public void setType(byte type) {
         this.type = type;
         this.type = type;
     }
     }
+
+
+    public interface Property extends GenericPo.Property {
+        /**
+         * @see QuartzJob#name
+         */
+        String name       = "name";
+        /**
+         * @see QuartzJob#remark
+         */
+        String remark     = "remark";
+        /**
+         * @see QuartzJob#cron
+         */
+        String cron       = "cron";
+        /**
+         * @see QuartzJob#script
+         */
+        String script     = "script";
+        /**
+         * @see QuartzJob#language
+         */
+        String language   = "language";
+        /**
+         * @see QuartzJob#enabled
+         */
+        String enabled    = "enabled";
+        /**
+         * @see QuartzJob#parameters
+         */
+        String parameters = "parameters";
+        /**
+         * @see QuartzJob#type
+         */
+        String type       = "type";
+    }
 }
 }

+ 30 - 0
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJobHistory.java

@@ -163,4 +163,34 @@ public class QuartzJobHistory extends GenericPo<String> {
             }
             }
         }
         }
     }
     }
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see QuartzJobHistory#jobId
+	 */
+	String jobId="jobId";
+	/**
+	 *
+	 * @see QuartzJobHistory#startTime
+	 */
+	String startTime="startTime";
+	/**
+	 *
+	 * @see QuartzJobHistory#endTime
+	 */
+	String endTime="endTime";
+	/**
+	 *
+	 * @see QuartzJobHistory#result
+	 */
+	String result="result";
+	/**
+	 *
+	 * @see QuartzJobHistory#status
+	 */
+	String status="status";
+	}
 }
 }

+ 51 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/resource/Resources.java

@@ -180,4 +180,54 @@ public class Resources extends GenericPo<String> {
         return FileUtils.getSuffix(getName());
         return FileUtils.getSuffix(getName());
     }
     }
 
 
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see Resources#name
+	 */
+	String name="name";
+	/**
+	 *
+	 * @see Resources#path
+	 */
+	String path="path";
+	/**
+	 *
+	 * @see Resources#createDate
+	 */
+	String createDate="createDate";
+	/**
+	 *
+	 * @see Resources#creatorId
+	 */
+	String creatorId="creatorId";
+	/**
+	 *
+	 * @see Resources#md5
+	 */
+	String md5="md5";
+	/**
+	 *
+	 * @see Resources#type
+	 */
+	String type="type";
+	/**
+	 *
+	 * @see Resources#classified
+	 */
+	String classified="classified";
+	/**
+	 *
+	 * @see Resources#size
+	 */
+	String size="size";
+	/**
+	 *
+	 * @see Resources#status
+	 */
+	String status="status";
+	}
+}

+ 26 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/Role.java

@@ -91,4 +91,29 @@ public class Role extends GenericPo<String> {
     public void setType(String type) {
     public void setType(String type) {
         this.type = type;
         this.type = type;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see Role#name
+	 */
+	String name="name";
+	/**
+	 *
+	 * @see Role#remark
+	 */
+	String remark="remark";
+	/**
+	 *
+	 * @see Role#type
+	 */
+	String type="type";
+	/**
+	 *
+	 * @see Role#modules
+	 */
+	String modules="modules";
+	}
+}

+ 26 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/RoleModule.java

@@ -80,4 +80,29 @@ public class RoleModule extends GenericPo<String> {
     public void setActions(List<String> actions) {
     public void setActions(List<String> actions) {
         this.actions = actions;
         this.actions = actions;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see RoleModule#moduleId
+	 */
+	String moduleId="moduleId";
+	/**
+	 *
+	 * @see RoleModule#roleId
+	 */
+	String roleId="roleId";
+	/**
+	 *
+	 * @see RoleModule#actions
+	 */
+	String actions="actions";
+	/**
+	 *
+	 * @see RoleModule#module
+	 */
+	String module="module";
+	}
+}

+ 17 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/UserRole.java

@@ -66,4 +66,20 @@ public class UserRole extends GenericPo<String> {
     public void setRole(Role role) {
     public void setRole(Role role) {
         this.role = role;
         this.role = role;
     }
     }
-}
+
+
+    public interface Property {
+        /**
+         * @see UserRole#userId
+         */
+        String userId = "userId";
+        /**
+         * @see UserRole#roleId
+         */
+        String roleId = "roleId";
+        /**
+         * @see UserRole#role
+         */
+        String role   = "role";
+    }
+}

+ 27 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/script/DynamicScript.java

@@ -131,4 +131,30 @@ public class DynamicScript extends GenericPo<String> {
         this.status = status;
         this.status = status;
     }
     }
 
 
-}
+    public interface Property extends GenericPo.Property {
+        /**
+         * @see DynamicScript#name
+         */
+        String name         = "name";
+        /**
+         * @see DynamicScript#type
+         */
+        String type         = "type";
+        /**
+         * @see DynamicScript#content
+         */
+        String content      = "content";
+        /**
+         * @see DynamicScript#remark
+         */
+        String remark       = "remark";
+        /**
+         * @see DynamicScript#classifiedId
+         */
+        String classifiedId = "classifiedId";
+        /**
+         * @see DynamicScript#status
+         */
+        String status       = "status";
+    }
+}

+ 31 - 13
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/system/SystemVersion.java

@@ -99,17 +99,35 @@ public class SystemVersion implements Comparable<SystemVersion> {
         }
         }
     }
     }
 
 
-    public static void main(String[] args) {
-        SystemVersion systemVersion = new SystemVersion();
-        systemVersion.setMajorVersion(2);
-        systemVersion.setMinorVersion(2);
-        systemVersion.setRevisionVersion(1);
 
 
-        SystemVersion systemVersion2 = new SystemVersion();
-        systemVersion2.setMajorVersion(3);
-        systemVersion2.setMinorVersion(2);
-        systemVersion2.setRevisionVersion(1);
-
-        System.out.println(systemVersion.compareTo(systemVersion2));
-    }
-}
+    public interface Property {
+        /**
+         * @see SystemVersion#name
+         */
+        String name            = "name";
+        /**
+         * @see SystemVersion#comment
+         */
+        String comment         = "comment";
+        /**
+         * @see SystemVersion#website
+         */
+        String website         = "website";
+        /**
+         * @see SystemVersion#majorVersion
+         */
+        String majorVersion    = "majorVersion";
+        /**
+         * @see SystemVersion#minorVersion
+         */
+        String minorVersion    = "minorVersion";
+        /**
+         * @see SystemVersion#revisionVersion
+         */
+        String revisionVersion = "revisionVersion";
+        /**
+         * @see SystemVersion#snapshot
+         */
+        String snapshot        = "snapshot";
+    }
+}

+ 71 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/template/Template.java

@@ -135,4 +135,74 @@ public class Template extends GenericPo<String> {
     public void setUsing(boolean using) {
     public void setUsing(boolean using) {
         this.using = using;
         this.using = using;
     }
     }
-}
+
+
+
+public interface Property extends GenericPo.Property{
+	/**
+	 *
+	 * @see Template#name
+	 */
+	String name="name";
+	/**
+	 *
+	 * @see Template#remark
+	 */
+	String remark="remark";
+	/**
+	 *
+	 * @see Template#template
+	 */
+	String template="template";
+	/**
+	 *
+	 * @see Template#classifiedId
+	 */
+	String classifiedId="classifiedId";
+	/**
+	 *
+	 * @see Template#type
+	 */
+	String type="type";
+	/**
+	 *
+	 * @see Template#script
+	 */
+	String script="script";
+	/**
+	 *
+	 * @see Template#css
+	 */
+	String css="css";
+	/**
+	 *
+	 * @see Template#cssLinks
+	 */
+	String cssLinks="cssLinks";
+	/**
+	 *
+	 * @see Template#scriptLinks
+	 */
+	String scriptLinks="scriptLinks";
+	/**
+	 *
+	 * @see Template#version
+	 */
+	String version="version";
+	/**
+	 *
+	 * @see Template#revision
+	 */
+	String revision="revision";
+	/**
+	 *
+	 * @see Template#release
+	 */
+	String release="release";
+	/**
+	 *
+	 * @see Template#using
+	 */
+	String using="using";
+	}
+}

+ 50 - 1
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java

@@ -299,4 +299,53 @@ public class User extends GenericPo<String> {
     public void setRoleInfo(Map<Module, Set<String>> roleInfo) {
     public void setRoleInfo(Map<Module, Set<String>> roleInfo) {
         this.roleInfo = roleInfo;
         this.roleInfo = roleInfo;
     }
     }
-}
+
+
+    public interface Property extends GenericPo.Property {
+        /**
+         * @see User#username
+         */
+        String username   = "username";
+        /**
+         * @see User#password
+         */
+        String password   = "password";
+        /**
+         * @see User#name
+         */
+        String name       = "name";
+        /**
+         * @see User#email
+         */
+        String email      = "email";
+        /**
+         * @see User#phone
+         */
+        String phone      = "phone";
+        /**
+         * @see User#status
+         */
+        String status     = "status";
+        /**
+         * @see User#createDate
+         */
+        String createDate = "createDate";
+        /**
+         * @see User#updateDate
+         */
+        String updateDate = "updateDate";
+        /**
+         * @see User#userRoles
+         */
+        String userRoles  = "userRoles";
+        /**
+         * @see User#roleInfo
+         */
+        String roleInfo   = "roleInfo";
+
+        /**
+         * @see User#getModules()
+         */
+        String modules = "modules";
+    }
+}

+ 1 - 1
hsweb-web-concurrent/hsweb-web-concurrent-cache/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-concurrent</artifactId>
         <artifactId>hsweb-web-concurrent</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-concurrent-cache</artifactId>
     <artifactId>hsweb-web-concurrent-cache</artifactId>

+ 1 - 1
hsweb-web-concurrent/hsweb-web-concurrent-lock/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-concurrent</artifactId>
         <artifactId>hsweb-web-concurrent</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-concurrent-lock</artifactId>
     <artifactId>hsweb-web-concurrent-lock</artifactId>

+ 1 - 1
hsweb-web-concurrent/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>
     <packaging>pom</packaging>

+ 1 - 1
hsweb-web-controller/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-controller</artifactId>
     <artifactId>hsweb-web-controller</artifactId>

+ 2 - 10
hsweb-web-controller/src/main/java/org/hsweb/web/controller/ExceptionHandlerConfiguration.java

@@ -1,6 +1,7 @@
 package org.hsweb.web.controller;
 package org.hsweb.web.controller;
 
 
-import org.hsweb.ezorm.exception.ValidationException;
+import org.hsweb.commons.ClassUtils;
+import org.hsweb.ezorm.rdb.exception.ValidationException;
 import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.core.exception.ExceptionHandler;
 import org.hsweb.web.core.exception.ExceptionHandler;
 import org.hsweb.web.core.message.ResponseMessage;
 import org.hsweb.web.core.message.ResponseMessage;
@@ -8,23 +9,14 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.web.DefaultErrorAttributes;
 import org.springframework.boot.autoconfigure.web.DefaultErrorAttributes;
-import org.springframework.boot.autoconfigure.web.ErrorAttributes;
-import org.springframework.boot.autoconfigure.web.ErrorController;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.annotation.Order;
 import org.springframework.core.annotation.Order;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestAttributes;
-import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.ModelAndView;
-import org.hsweb.commons.ClassUtils;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 

+ 4 - 2
hsweb-web-controller/src/main/java/org/hsweb/web/controller/RestControllerExceptionTranslator.java

@@ -1,7 +1,9 @@
 package org.hsweb.web.controller;
 package org.hsweb.web.controller;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import org.hsweb.ezorm.rdb.exception.*;
 import org.hsweb.web.core.exception.*;
 import org.hsweb.web.core.exception.*;
+import org.hsweb.web.core.exception.ValidationException;
 import org.hsweb.web.core.message.ResponseMessage;
 import org.hsweb.web.core.message.ResponseMessage;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -25,10 +27,10 @@ public class RestControllerExceptionTranslator {
         return ResponseMessage.error(exception.getMessage(), 400);
         return ResponseMessage.error(exception.getMessage(), 400);
     }
     }
 
 
-    @ExceptionHandler(org.hsweb.ezorm.exception.ValidationException.class)
+    @ExceptionHandler(org.hsweb.ezorm.rdb.exception.ValidationException.class)
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     @ResponseBody
     @ResponseBody
-    ResponseMessage handleException(org.hsweb.ezorm.exception.ValidationException exception) {
+    ResponseMessage handleException(org.hsweb.ezorm.rdb.exception.ValidationException exception) {
         return ResponseMessage.error(JSON.toJSONString(exception.getValidateResult()), 400);
         return ResponseMessage.error(JSON.toJSONString(exception.getValidateResult()), 400);
     }
     }
 
 

+ 11 - 12
hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java

@@ -16,9 +16,9 @@
 
 
 package org.hsweb.web.controller.form;
 package org.hsweb.web.controller.form;
 
 
-import org.hsweb.ezorm.meta.FieldMetaData;
-import org.hsweb.ezorm.meta.TableMetaData;
-import org.hsweb.ezorm.meta.expand.OptionConverter;
+import org.hsweb.ezorm.core.OptionConverter;
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.UpdateMapParam;
 import org.hsweb.web.bean.common.UpdateMapParam;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.form.Form;
@@ -31,7 +31,6 @@ import org.hsweb.web.core.message.ResponseMessage;
 import org.hsweb.web.service.form.DynamicFormService;
 import org.hsweb.web.service.form.DynamicFormService;
 import org.hsweb.web.service.form.FormService;
 import org.hsweb.web.service.form.FormService;
 import org.hsweb.web.service.resource.FileService;
 import org.hsweb.web.service.resource.FileService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
@@ -171,9 +170,9 @@ public class DynamicFormController {
      * @param name 表单名称
      * @param name 表单名称
      * @param data 数据
      * @param data 数据
      * @return 新增成功后返回被新增数据的主键值
      * @return 新增成功后返回被新增数据的主键值
-     * @throws SQLException                                  执行查询sql错误
-     * @throws NotFoundException                             表单不存在或在未发布
-     * @throws org.hsweb.ezorm.exception.ValidationException 数据格式验证失败时抛出此异常
+     * @throws SQLException                                      执行查询sql错误
+     * @throws NotFoundException                                 表单不存在或在未发布
+     * @throws org.hsweb.ezorm.rdb.exception.ValidationException 数据格式验证失败时抛出此异常
      */
      */
     @RequestMapping(value = "/{name}", method = RequestMethod.POST)
     @RequestMapping(value = "/{name}", method = RequestMethod.POST)
     @AccessLogger("新增数据")
     @AccessLogger("新增数据")
@@ -191,9 +190,9 @@ public class DynamicFormController {
      * @param primaryKey 数据主键值
      * @param primaryKey 数据主键值
      * @param data       数据
      * @param data       数据
      * @return 更新记录数量
      * @return 更新记录数量
-     * @throws SQLException                                  执行查询sql错误
-     * @throws NotFoundException                             表单不存在或在未发布
-     * @throws org.hsweb.ezorm.exception.ValidationException 数据格式验证失败时抛出此异常
+     * @throws SQLException                                      执行查询sql错误
+     * @throws NotFoundException                                 表单不存在或在未发布
+     * @throws org.hsweb.ezorm.rdb.exception.ValidationException 数据格式验证失败时抛出此异常
      */
      */
     @RequestMapping(value = "/{name}/{primaryKey}", method = RequestMethod.PUT)
     @RequestMapping(value = "/{name}/{primaryKey}", method = RequestMethod.PUT)
     @AccessLogger("更新数据")
     @AccessLogger("更新数据")
@@ -293,8 +292,8 @@ public class DynamicFormController {
                                         @PathVariable("data") String data,
                                         @PathVariable("data") String data,
                                         @PathVariable("type") String type) {
                                         @PathVariable("type") String type) {
         try {
         try {
-            TableMetaData metaData = dynamicFormService.getDefaultDatabase().getTable(name).getMeta();
-            FieldMetaData fieldMetaData = metaData.findFieldByName(field);
+            RDBTableMetaData metaData = dynamicFormService.getDefaultDatabase().getTable(name).getMeta();
+            RDBColumnMetaData fieldMetaData = metaData.findColumn(field);
             if (fieldMetaData == null) throw new NullPointerException();
             if (fieldMetaData == null) throw new NullPointerException();
             OptionConverter converter = fieldMetaData.getOptionConverter();
             OptionConverter converter = fieldMetaData.getOptionConverter();
             if (converter == null) return ResponseMessage.ok(data);
             if (converter == null) return ResponseMessage.ok(data);

+ 22 - 6
hsweb-web-controller/src/main/java/org/hsweb/web/controller/login/UserModuleController.java

@@ -25,13 +25,13 @@ import org.hsweb.web.core.logger.annotation.AccessLogger;
 import org.hsweb.web.core.message.ResponseMessage;
 import org.hsweb.web.core.message.ResponseMessage;
 import org.hsweb.web.core.utils.WebUtil;
 import org.hsweb.web.core.utils.WebUtil;
 import org.hsweb.web.service.module.ModuleService;
 import org.hsweb.web.service.module.ModuleService;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -43,6 +43,24 @@ public class UserModuleController {
     @Resource
     @Resource
     public ModuleService moduleService;
     public ModuleService moduleService;
 
 
+    @RequestMapping(value = "/loginUser", produces = {MediaType.APPLICATION_JSON_VALUE})
+    @ResponseBody
+    @Authorize
+    public ResponseMessage loginUserInfo() {
+        User user = WebUtil.getLoginUser();
+        Map<String, Set<String>> modules = user.getRoleInfo()
+                .entrySet()
+                .stream()
+                .collect(Collectors.toMap(entry -> entry.getKey().getId(), entry -> entry.getValue()));
+        Map<String, Object> map = new LinkedHashMap<>();
+        map.put("username", user.getUsername());
+        map.put("name", user.getName());
+        map.put("properties", user.getProperties());
+        map.put("modules", modules);
+        map.put("roles", user.getUserRoles());
+        map.put("modulesData", user.getModules());
+        return ResponseMessage.ok(map).exclude(Module.class, "optional").onlyData();
+    }
     @RequestMapping
     @RequestMapping
     @Authorize
     @Authorize
     @AccessLogger("用户模块信息")
     @AccessLogger("用户模块信息")
@@ -53,9 +71,7 @@ public class UserModuleController {
         User user = WebUtil.getLoginUser();
         User user = WebUtil.getLoginUser();
         List<Module> modules;
         List<Module> modules;
         if (user == null) {
         if (user == null) {
-            QueryParam queryParam = new QueryParam();
-            queryParam.includes(includes).orderBy("sortIndex");
-            modules = moduleService.select(queryParam);
+            modules = moduleService.createQuery().select(includes).orderByAsc(Module.Property.sortIndex).listNoPaging();
             modules = modules.stream()
             modules = modules.stream()
                     .filter(module -> {
                     .filter(module -> {
                         Object obj = module.getOptionalMap().get("M");
                         Object obj = module.getOptionalMap().get("M");

+ 11 - 11
hsweb-web-controller/src/main/java/org/hsweb/web/controller/system/DatabaseManagerController.java

@@ -2,9 +2,9 @@ package org.hsweb.web.controller.system;
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
-import org.hsweb.ezorm.meta.FieldMetaData;
-import org.hsweb.ezorm.meta.TableMetaData;
-import org.hsweb.ezorm.render.SqlAppender;
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
+import org.hsweb.ezorm.rdb.render.SqlAppender;
 import org.hsweb.web.bean.po.user.User;
 import org.hsweb.web.bean.po.user.User;
 import org.hsweb.web.core.authorize.annotation.Authorize;
 import org.hsweb.web.core.authorize.annotation.Authorize;
 import org.hsweb.web.core.datasource.DynamicDataSource;
 import org.hsweb.web.core.datasource.DynamicDataSource;
@@ -54,8 +54,8 @@ public class DatabaseManagerController {
     @AccessLogger("获取所有表结构")
     @AccessLogger("获取所有表结构")
     public ResponseMessage showTables() throws SQLException {
     public ResponseMessage showTables() throws SQLException {
         return ResponseMessage.ok(dataBaseManagerService.getTableList())
         return ResponseMessage.ok(dataBaseManagerService.getTableList())
-                .include(TableMetaData.class, "name", "alias", "comment", "fields")
-                .include(FieldMetaData.class, "name", "alias", "comment", "dataType", "properties")
+                .include(RDBTableMetaData.class, "name", "alias", "comment", "fields")
+                .include(RDBColumnMetaData.class, "name", "alias", "comment", "dataType", "properties")
                 .onlyData();
                 .onlyData();
     }
     }
 
 
@@ -85,8 +85,8 @@ public class DatabaseManagerController {
             checkDynamicDataSourceSupport();
             checkDynamicDataSourceSupport();
             DynamicDataSource.use(dataSourceId);
             DynamicDataSource.use(dataSourceId);
             return ResponseMessage.ok(dataBaseManagerService.getTableList())
             return ResponseMessage.ok(dataBaseManagerService.getTableList())
-                    .include(TableMetaData.class, "name", "alias", "comment", "fields")
-                    .include(FieldMetaData.class, "name", "alias", "comment", "dataType", "properties")
+                    .include(RDBTableMetaData.class, "name", "alias", "comment", "fields")
+                    .include(RDBColumnMetaData.class, "name", "alias", "comment", "dataType", "properties")
                     .onlyData();
                     .onlyData();
         } finally {
         } finally {
             DynamicDataSource.useDefault(false);
             DynamicDataSource.useDefault(false);
@@ -158,14 +158,14 @@ public class DatabaseManagerController {
         }
         }
     }
     }
 
 
-    protected TableMetaData createTableMetaDataByJson(JSONObject jsonObject) {
-        TableMetaData tableMetaData = new TableMetaData();
+    protected RDBTableMetaData createTableMetaDataByJson(JSONObject jsonObject) {
+        RDBTableMetaData tableMetaData = new RDBTableMetaData();
         tableMetaData.setName(jsonObject.getString("name"));
         tableMetaData.setName(jsonObject.getString("name"));
         tableMetaData.setComment(jsonObject.getString("comment"));
         tableMetaData.setComment(jsonObject.getString("comment"));
         JSONArray jsonArray = jsonObject.getJSONArray("fields");
         JSONArray jsonArray = jsonObject.getJSONArray("fields");
         for (int i = 0; i < jsonArray.size(); i++) {
         for (int i = 0; i < jsonArray.size(); i++) {
-            FieldMetaData field = jsonArray.getObject(i, FieldMetaData.class);
-            tableMetaData.addField(field);
+            RDBColumnMetaData columnMetaData = jsonArray.getObject(i, RDBColumnMetaData.class);
+            tableMetaData.addColumn(columnMetaData);
         }
         }
         return tableMetaData;
         return tableMetaData;
     }
     }

+ 9 - 7
hsweb-web-controller/src/main/java/org/hsweb/web/controller/user/UserController.java

@@ -14,6 +14,8 @@ import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 
 
+import static org.hsweb.web.bean.po.user.User.Property.*;
+
 /**
 /**
  * 后台管理用户控制器,继承自GenericController,使用rest+json
  * 后台管理用户控制器,继承自GenericController,使用rest+json
  * Created by generator 2015-8-26 10:35:57
  * Created by generator 2015-8-26 10:35:57
@@ -34,22 +36,22 @@ public class UserController extends GenericController<User, String> {
     }
     }
 
 
     @Override
     @Override
-    public ResponseMessage list(QueryParam param)  {
-        param.excludes("password");
+    public ResponseMessage list(QueryParam param) {
+        param.excludes(password);
         return super.list(param)
         return super.list(param)
-                .exclude(User.class, "password", "modules", "userRoles")
+                .exclude(User.class, password, modules, userRoles)
                 .onlyData();
                 .onlyData();
     }
     }
 
 
     @Override
     @Override
-    public ResponseMessage info(@PathVariable("id") String id)  {
-        return super.info(id).exclude(User.class, "password", "modules");
+    public ResponseMessage info(@PathVariable("id") String id) {
+        return super.info(id).exclude(User.class, password, modules);
     }
     }
 
 
     @AccessLogger("禁用")
     @AccessLogger("禁用")
     @RequestMapping(value = "/{id}/disable", method = RequestMethod.PUT)
     @RequestMapping(value = "/{id}/disable", method = RequestMethod.PUT)
     @Authorize(action = "disable")
     @Authorize(action = "disable")
-    public ResponseMessage disable(@PathVariable("id") String id)  {
+    public ResponseMessage disable(@PathVariable("id") String id) {
         getService().disableUser(id);
         getService().disableUser(id);
         return ResponseMessage.ok();
         return ResponseMessage.ok();
     }
     }
@@ -57,7 +59,7 @@ public class UserController extends GenericController<User, String> {
     @AccessLogger("启用")
     @AccessLogger("启用")
     @RequestMapping(value = "/{id}/enable", method = RequestMethod.PUT)
     @RequestMapping(value = "/{id}/enable", method = RequestMethod.PUT)
     @Authorize(action = "enable")
     @Authorize(action = "enable")
-    public ResponseMessage enable(@PathVariable("id") String id)  {
+    public ResponseMessage enable(@PathVariable("id") String id) {
         getService().enableUser(id);
         getService().enableUser(id);
         return ResponseMessage.ok();
         return ResponseMessage.ok();
     }
     }

+ 2 - 2
hsweb-web-core/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-core</artifactId>
     <artifactId>hsweb-web-core</artifactId>
@@ -37,7 +37,7 @@
 
 
         <dependency>
         <dependency>
             <groupId>org.hsweb</groupId>
             <groupId>org.hsweb</groupId>
-            <artifactId>hsweb-easy-orm</artifactId>
+            <artifactId>hsweb-easy-orm-rdb</artifactId>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>org.hsweb</groupId>
             <groupId>org.hsweb</groupId>

+ 3 - 3
hsweb-web-core/src/main/java/org/hsweb/web/core/Install.java

@@ -1,9 +1,9 @@
 package org.hsweb.web.core;
 package org.hsweb.web.core;
 
 
 import org.hsweb.commons.file.FileUtils;
 import org.hsweb.commons.file.FileUtils;
-import org.hsweb.ezorm.executor.SqlExecutor;
-import org.hsweb.ezorm.render.SqlAppender;
-import org.hsweb.ezorm.render.support.simple.SimpleSQL;
+import org.hsweb.ezorm.rdb.executor.SqlExecutor;
+import org.hsweb.ezorm.rdb.render.SqlAppender;
+import org.hsweb.ezorm.rdb.render.support.simple.SimpleSQL;
 import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;

+ 12 - 6
hsweb-web-core/src/main/java/org/hsweb/web/core/datasource/DatabaseType.java

@@ -16,19 +16,21 @@
 
 
 package org.hsweb.web.core.datasource;
 package org.hsweb.web.core.datasource;
 
 
+import org.hsweb.ezorm.rdb.render.dialect.Dialect;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
 public enum DatabaseType {
 public enum DatabaseType {
-    unknown(null, null, null),
-    mysql("com.mysql.jdbc.Driver", "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource", "select 1"),
-    h2("org.h2.Driver", "org.h2.jdbcx.JdbcDataSource", "select 1"),
-    oracle("oracle.jdbc.driver.OracleDriver", "oracle.jdbc.xa.client.OracleXADataSource", "select 1 from dual");
+    unknown(null, null, null,null),
+    mysql("com.mysql.jdbc.Driver", "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource", "select 1",Dialect.MYSQL),
+    h2("org.h2.Driver", "org.h2.jdbcx.JdbcDataSource", "select 1",Dialect.H2),
+    oracle("oracle.jdbc.driver.OracleDriver", "oracle.jdbc.xa.client.OracleXADataSource", "select 1 from dual",Dialect.ORACLE);
 
 
-    DatabaseType(String driverClassName, String xaDataSourceClassName, String testQuery) {
+    DatabaseType(String driverClassName, String xaDataSourceClassName, String testQuery,Dialect dialect) {
         this.driverClassName = driverClassName;
         this.driverClassName = driverClassName;
         this.testQuery = testQuery;
         this.testQuery = testQuery;
         this.xaDataSourceClassName = xaDataSourceClassName;
         this.xaDataSourceClassName = xaDataSourceClassName;
+        this.dialect=dialect;
     }
     }
 
 
     private final String testQuery;
     private final String testQuery;
@@ -36,7 +38,7 @@ public enum DatabaseType {
     private final String driverClassName;
     private final String driverClassName;
 
 
     private final String xaDataSourceClassName;
     private final String xaDataSourceClassName;
-
+    private final Dialect dialect;
     public String getDriverClassName() {
     public String getDriverClassName() {
         return driverClassName;
         return driverClassName;
     }
     }
@@ -49,6 +51,10 @@ public enum DatabaseType {
         return testQuery;
         return testQuery;
     }
     }
 
 
+    public Dialect getDialect() {
+        return dialect;
+    }
+
     public static DatabaseType fromJdbcUrl(String url) {
     public static DatabaseType fromJdbcUrl(String url) {
         if (StringUtils.hasLength(url)) {
         if (StringUtils.hasLength(url)) {
             Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'");
             Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'");

+ 1 - 1
hsweb-web-dao/hsweb-web-dao-api/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-dao</artifactId>
         <artifactId>hsweb-web-dao</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-dao-api</artifactId>
     <artifactId>hsweb-web-dao-api</artifactId>

+ 1 - 1
hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/form/FormMapper.java

@@ -1,6 +1,6 @@
 package org.hsweb.web.dao.form;
 package org.hsweb.web.dao.form;
 
 
-import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.ezorm.core.param.QueryParam;
 import org.hsweb.web.dao.GenericMapper;
 import org.hsweb.web.dao.GenericMapper;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.form.Form;
 
 

+ 1 - 1
hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/template/TemplateMapper.java

@@ -1,6 +1,6 @@
 package org.hsweb.web.dao.template;
 package org.hsweb.web.dao.template;
 
 
-import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.ezorm.core.param.QueryParam;
 import org.hsweb.web.bean.po.template.Template;
 import org.hsweb.web.bean.po.template.Template;
 import org.hsweb.web.dao.GenericMapper;
 import org.hsweb.web.dao.GenericMapper;
 
 

+ 1 - 1
hsweb-web-dao/hsweb-web-dao-mybatis/README.md

@@ -10,7 +10,7 @@
      <dependency>
      <dependency>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
         <artifactId>hsweb-web-dao-mybatis</artifactId>
         <artifactId>hsweb-web-dao-mybatis</artifactId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </dependency>
     </dependency>
 ```
 ```
 
 

+ 12 - 10
hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml

@@ -5,19 +5,12 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-dao</artifactId>
         <artifactId>hsweb-web-dao</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-dao-mybatis</artifactId>
     <artifactId>hsweb-web-dao-mybatis</artifactId>
 
 
-    <properties>
-        <mybatis.version>3.3.2</mybatis.version>
-        <mybatis.spring.version>1.2.3</mybatis.spring.version>
-        <druid.version>1.0.5</druid.version>
-    </properties>
-
     <dependencies>
     <dependencies>
-
         <!--test-->
         <!--test-->
         <dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <groupId>org.springframework.boot</groupId>
@@ -30,7 +23,16 @@
             <version>1.0.26</version>
             <version>1.0.26</version>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
-
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
         <dependency>
             <groupId>org.hsweb</groupId>
             <groupId>org.hsweb</groupId>
             <artifactId>hsweb-web-dao-api</artifactId>
             <artifactId>hsweb-web-dao-api</artifactId>
@@ -56,7 +58,7 @@
         <dependency>
         <dependency>
             <groupId>org.mybatis.spring.boot</groupId>
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
-            <version>1.0.2</version>
+            <version>1.1.1</version>
         </dependency>
         </dependency>
 
 
         <!--mybatis end-->
         <!--mybatis end-->

+ 4 - 2
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/MyBatisAutoConfiguration.java

@@ -54,13 +54,15 @@ public class MyBatisAutoConfiguration {
     @Bean(name = "sqlSessionFactory")
     @Bean(name = "sqlSessionFactory")
     public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
     public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
         SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
         SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
+
         if (properties.isDynamicDatasource())
         if (properties.isDynamicDatasource())
             factory.setSqlSessionFactoryBuilder(new DynamicDataSourceSqlSessionFactoryBuilder());
             factory.setSqlSessionFactoryBuilder(new DynamicDataSourceSqlSessionFactoryBuilder());
+
         factory.setDataSource(dataSource);
         factory.setDataSource(dataSource);
         factory.setVfs(SpringBootVFS.class);
         factory.setVfs(SpringBootVFS.class);
-        if (StringUtils.hasText(this.properties.getConfig())) {
+        if (StringUtils.hasText(this.properties.getConfigLocation())) {
             factory.setConfigLocation(this.resourceLoader.getResource(this.properties
             factory.setConfigLocation(this.resourceLoader.getResource(this.properties
-                    .getConfig()));
+                    .getConfigLocation()));
         }
         }
         if (this.interceptors != null && this.interceptors.length > 0) {
         if (this.interceptors != null && this.interceptors.length > 0) {
             factory.setPlugins(this.interceptors);
             factory.setPlugins(this.interceptors);

+ 22 - 22
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java

@@ -6,9 +6,11 @@ import org.apache.ibatis.mapping.ResultMap;
 import org.apache.ibatis.mapping.ResultMapping;
 import org.apache.ibatis.mapping.ResultMapping;
 import org.hsweb.commons.DateTimeUtils;
 import org.hsweb.commons.DateTimeUtils;
 import org.hsweb.commons.StringUtils;
 import org.hsweb.commons.StringUtils;
-import org.hsweb.ezorm.meta.FieldMetaData;
-import org.hsweb.ezorm.param.Term;
-import org.hsweb.ezorm.render.Dialect;
+import org.hsweb.ezorm.core.param.Param;
+import org.hsweb.ezorm.core.param.Sort;
+import org.hsweb.ezorm.core.param.Term;
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.render.dialect.Dialect;
 import org.hsweb.web.bean.common.InsertParam;
 import org.hsweb.web.bean.common.InsertParam;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.common.UpdateParam;
@@ -19,9 +21,7 @@ import java.sql.JDBCType;
 import java.sql.SQLException;
 import java.sql.SQLException;
 import java.util.*;
 import java.util.*;
 
 
-/**
- * Created by zhouhao on 16-5-9.
- */
+@Deprecated
 public class DefaultSqlParamBuilder {
 public class DefaultSqlParamBuilder {
 
 
     public Dialect getDialect() {
     public Dialect getDialect() {
@@ -73,23 +73,23 @@ public class DefaultSqlParamBuilder {
 
 
     public KeyWordMapper getKeyWordMapper(String type) {
     public KeyWordMapper getKeyWordMapper(String type) {
         return (paramKey, tableName, term, jdbcType) -> {
         return (paramKey, tableName, term, jdbcType) -> {
-            String termField = term.getField();
+            String termField = term.getColumn();
             if (termField.contains(".")) {
             if (termField.contains(".")) {
                 String[] tmp = termField.split("[.]");
                 String[] tmp = termField.split("[.]");
                 tableName = tmp[0];
                 tableName = tmp[0];
                 termField = tmp[1];
                 termField = tmp[1];
             }
             }
-            FieldMetaData field = new FieldMetaData();
+            RDBColumnMetaData field = new RDBColumnMetaData();
             field.setName(termField);
             field.setName(termField);
             field.setJdbcType(jdbcType);
             field.setJdbcType(jdbcType);
-            return getDialect().wrapperWhere(paramKey, term, field, tableName);
+            return getDialect().buildCondition(paramKey, term, field, tableName).toString();
         };
         };
     }
     }
 
 
     protected Map<String, Object> createConfig(String resultMapId) {
     protected Map<String, Object> createConfig(String resultMapId) {
         ResultMap resultMaps = ResultMapsUtils.getResultMap(resultMapId);
         ResultMap resultMaps = ResultMapsUtils.getResultMap(resultMapId);
         Map<String, Object> fieldConfig = new HashMap<>();
         Map<String, Object> fieldConfig = new HashMap<>();
-        List<ResultMapping> resultMappings=new ArrayList<>(resultMaps.getResultMappings());
+        List<ResultMapping> resultMappings = new ArrayList<>(resultMaps.getResultMappings());
         resultMappings.addAll(resultMaps.getIdResultMappings());
         resultMappings.addAll(resultMaps.getIdResultMappings());
         resultMappings.forEach(resultMapping -> {
         resultMappings.forEach(resultMapping -> {
             if (resultMapping.getNestedQueryId() == null) {
             if (resultMapping.getNestedQueryId() == null) {
@@ -161,7 +161,7 @@ public class DefaultSqlParamBuilder {
         return javaType;
         return javaType;
     }
     }
 
 
-    public String buildSelectFields(String resultMapId, String tableName, org.hsweb.ezorm.param.SqlParam param) {
+    public String buildSelectFields(String resultMapId, String tableName, Param param) {
         Map<String, Object> fieldConfig = createConfig(resultMapId);
         Map<String, Object> fieldConfig = createConfig(resultMapId);
         if (param == null) return "*";
         if (param == null) return "*";
         Map<String, String> propertyMapper = getPropertyMapper(fieldConfig, param);
         Map<String, String> propertyMapper = getPropertyMapper(fieldConfig, param);
@@ -219,9 +219,9 @@ public class DefaultSqlParamBuilder {
         tmp.setSorts(param.getSorts());
         tmp.setSorts(param.getSorts());
         Map<String, String> propertyMapper = getPropertyMapper(fieldConfig, tmp);
         Map<String, String> propertyMapper = getPropertyMapper(fieldConfig, tmp);
         if (tmp.getSorts().isEmpty()) return "";
         if (tmp.getSorts().isEmpty()) return "";
-        Set<org.hsweb.ezorm.param.Sort> sorts = new LinkedHashSet<>();
+        Set<Sort> sorts = new LinkedHashSet<>();
         param.getSorts().forEach(sort -> {
         param.getSorts().forEach(sort -> {
-            String fieldName = sort.getField();
+            String fieldName = sort.getName();
             if (StringUtils.isNullOrEmpty(fieldName)) return;
             if (StringUtils.isNullOrEmpty(fieldName)) return;
             if (fieldName.contains("."))
             if (fieldName.contains("."))
                 fieldName = fieldName.split("[.]")[1];
                 fieldName = fieldName.split("[.]")[1];
@@ -229,7 +229,7 @@ public class DefaultSqlParamBuilder {
                 if (propertyMapper.get(fieldName) == null) {
                 if (propertyMapper.get(fieldName) == null) {
                     for (Map.Entry<String, String> entry : propertyMapper.entrySet()) {
                     for (Map.Entry<String, String> entry : propertyMapper.entrySet()) {
                         if (entry.getValue().equals(fieldName)) {
                         if (entry.getValue().equals(fieldName)) {
-                            sort.setField(entry.getKey());
+                            sort.setName(entry.getKey());
                         }
                         }
                     }
                     }
                 }
                 }
@@ -239,17 +239,17 @@ public class DefaultSqlParamBuilder {
         if (sorts.isEmpty()) return "";
         if (sorts.isEmpty()) return "";
         String sql = sorts.stream()
         String sql = sorts.stream()
                 .map(sort -> {
                 .map(sort -> {
-                    String fieldName = sort.getField();
+                    String fieldName = sort.getName();
                     if (fieldName.contains("."))
                     if (fieldName.contains("."))
                         fieldName = fieldName.split("[.]")[1];
                         fieldName = fieldName.split("[.]")[1];
                     return new SqlAppender()
                     return new SqlAppender()
-                            .add(tableName, ".", fieldName, " ", sort.getDir()).toString();
+                            .add(tableName, ".", fieldName, " ", sort.getOrder()).toString();
                 })
                 })
                 .reduce((s, s1) -> new SqlAppender().add(s, ",", s1).toString()).get();
                 .reduce((s, s1) -> new SqlAppender().add(s, ",", s1).toString()).get();
         return " order by ".concat(sql);
         return " order by ".concat(sql);
     }
     }
 
 
-    public Map<String, String> getPropertyMapper(Map<String, Object> fieldConfig, org.hsweb.ezorm.param.SqlParam param) {
+    public Map<String, String> getPropertyMapper(Map<String, Object> fieldConfig, Param param) {
         Set<String> includes = param.getIncludes(),
         Set<String> includes = param.getIncludes(),
                 excludes = param.getExcludes();
                 excludes = param.getExcludes();
         boolean includesIsEmpty = includes.isEmpty(),
         boolean includesIsEmpty = includes.isEmpty(),
@@ -306,11 +306,11 @@ public class DefaultSqlParamBuilder {
         int index = 0;
         int index = 0;
         String prefixTmp = StringUtils.concat(prefix, StringUtils.isNullOrEmpty(prefix) ? "" : ".");
         String prefixTmp = StringUtils.concat(prefix, StringUtils.isNullOrEmpty(prefix) ? "" : ".");
         for (Term term : terms) {
         for (Term term : terms) {
-            String column = getColumn(fieldConfig, term.getField());
-            if (column != null) term.setField(column);
-            boolean nullTerm = StringUtils.isNullOrEmpty(term.getField());
+            String column = getColumn(fieldConfig, term.getColumn());
+            if (column != null) term.setColumn(column);
+            boolean nullTerm = StringUtils.isNullOrEmpty(term.getColumn());
             //不是空条件 也不是可选字段
             //不是空条件 也不是可选字段
-            if (!nullTerm && !fieldConfig.containsKey(term.getField())) continue;
+            if (!nullTerm && !fieldConfig.containsKey(term.getColumn())) continue;
             //不是空条件,值为空
             //不是空条件,值为空
             if (!nullTerm && StringUtils.isNullOrEmpty(term.getValue())) continue;
             if (!nullTerm && StringUtils.isNullOrEmpty(term.getValue())) continue;
             //是空条件,但是无嵌套
             //是空条件,但是无嵌套
@@ -318,7 +318,7 @@ public class DefaultSqlParamBuilder {
             //用于sql预编译的参数名
             //用于sql预编译的参数名
             prefix = StringUtils.concat(prefixTmp, "terms[", index++, "]");
             prefix = StringUtils.concat(prefixTmp, "terms[", index++, "]");
             //JDBC类型
             //JDBC类型
-            JDBCType jdbcType = getFieldJDBCType(term.getField(), fieldConfig);
+            JDBCType jdbcType = getFieldJDBCType(term.getColumn(), fieldConfig);
             //转换参数的值
             //转换参数的值
             term.setValue(transformationValue(jdbcType, term.getValue()));
             term.setValue(transformationValue(jdbcType, term.getValue()));
             //添加类型,and 或者 or
             //添加类型,and 或者 or

+ 266 - 0
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/EasyOrmSqlBuilder.java

@@ -0,0 +1,266 @@
+package org.hsweb.web.mybatis.builder;
+
+import org.apache.commons.beanutils.BeanUtilsBean;
+import org.apache.commons.beanutils.PropertyUtilsBean;
+import org.apache.ibatis.mapping.ResultMap;
+import org.apache.ibatis.mapping.ResultMapping;
+import org.hsweb.commons.StringUtils;
+import org.hsweb.ezorm.core.param.QueryParam;
+import org.hsweb.ezorm.core.param.Term;
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
+import org.hsweb.ezorm.rdb.render.SqlAppender;
+import org.hsweb.ezorm.rdb.render.SqlRender;
+import org.hsweb.ezorm.rdb.render.dialect.Dialect;
+import org.hsweb.ezorm.rdb.render.dialect.H2RDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.render.dialect.MysqlRDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.render.dialect.OracleRDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.render.support.simple.CommonSqlRender;
+import org.hsweb.ezorm.rdb.render.support.simple.SimpleWhereSqlBuilder;
+import org.hsweb.web.bean.common.InsertParam;
+import org.hsweb.web.bean.common.UpdateParam;
+import org.hsweb.web.core.datasource.DataSourceHolder;
+import org.hsweb.web.core.datasource.DatabaseType;
+import org.hsweb.web.mybatis.plgins.pager.Pager;
+import org.hsweb.web.mybatis.utils.ResultMapsUtils;
+
+import java.sql.JDBCType;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author zhouhao
+ * @TODO
+ */
+public class EasyOrmSqlBuilder {
+
+    private static final   EasyOrmSqlBuilder  instance   = new EasyOrmSqlBuilder();
+    protected static final Map<Class, String> simpleName = new HashMap<>();
+
+    protected PropertyUtilsBean propertyUtils = BeanUtilsBean.getInstance().getPropertyUtils();
+
+    public static EasyOrmSqlBuilder getInstance() {
+        return instance;
+    }
+
+    private EasyOrmSqlBuilder() {
+    }
+
+    static {
+        simpleName.put(Integer.class, "int");
+        simpleName.put(Byte.class, "byte");
+        simpleName.put(Double.class, "double");
+        simpleName.put(Float.class, "float");
+        simpleName.put(Boolean.class, "boolean");
+        simpleName.put(Long.class, "long");
+        simpleName.put(Short.class, "short");
+        simpleName.put(Character.class, "char");
+        simpleName.put(String.class, "string");
+        simpleName.put(int.class, "int");
+        simpleName.put(double.class, "double");
+        simpleName.put(float.class, "float");
+        simpleName.put(boolean.class, "boolean");
+        simpleName.put(long.class, "long");
+        simpleName.put(short.class, "short");
+        simpleName.put(char.class, "char");
+        simpleName.put(byte.class, "byte");
+    }
+
+    public static String getJavaType(Class type) {
+        String javaType = simpleName.get(type);
+        if (javaType == null) javaType = type.getName();
+        return javaType;
+    }
+
+    private final RDBDatabaseMetaData mysql  = new MysqlMeta();
+    private final RDBDatabaseMetaData oracle = new OracleMeta();
+    private final RDBDatabaseMetaData h2     = new H2Meta();
+
+    private final ConcurrentMap<RDBDatabaseMetaData, Map<String, RDBTableMetaData>> metaCache = new ConcurrentHashMap<RDBDatabaseMetaData, Map<String, RDBTableMetaData>>() {
+        @Override
+        public Map<String, RDBTableMetaData> get(Object key) {
+            Map<String, RDBTableMetaData> map = super.get(key);
+            if (map == null) {
+                map = new HashMap<>();
+                put((RDBDatabaseMetaData) key, map);
+            }
+            return map;
+        }
+    };
+
+    public RDBDatabaseMetaData getActiveDatabase() {
+        DatabaseType type = DataSourceHolder.getActiveDatabaseType();
+        switch (type) {
+            case h2:
+                return h2;
+            case mysql:
+                return mysql;
+            case oracle:
+                return oracle;
+            default:
+                return h2;
+        }
+    }
+
+    protected RDBTableMetaData createMeta(String tableName, String resultMapId) {
+        RDBDatabaseMetaData active = getActiveDatabase();
+        String cacheKey = tableName.concat("-").concat(resultMapId);
+        Map<String, RDBTableMetaData> cache = metaCache.get(active);
+        RDBTableMetaData cached = cache.get(cacheKey);
+        if (cached != null) {
+            return cached;
+        }
+        RDBTableMetaData rdbTableMetaData = new RDBTableMetaData();
+        rdbTableMetaData.setName(tableName);
+        rdbTableMetaData.setDatabaseMetaData(active);
+        ResultMap resultMaps = ResultMapsUtils.getResultMap(resultMapId);
+        List<ResultMapping> resultMappings = new ArrayList<>(resultMaps.getResultMappings());
+        resultMappings.addAll(resultMaps.getIdResultMappings());
+        resultMappings.forEach(resultMapping -> {
+            if (resultMapping.getNestedQueryId() == null) {
+                RDBColumnMetaData column = new RDBColumnMetaData();
+                column.setJdbcType(JDBCType.valueOf(resultMapping.getJdbcType().name()));
+                column.setName(resultMapping.getColumn());
+                if (!StringUtils.isNullOrEmpty(resultMapping.getProperty()))
+                    column.setAlias(resultMapping.getProperty());
+                column.setJavaType(resultMapping.getJavaType());
+                column.setProperty("resultMapping", resultMapping);
+                rdbTableMetaData.addColumn(column);
+            }
+        });
+        cache.put(cacheKey, rdbTableMetaData);
+        return rdbTableMetaData;
+    }
+
+    public String buildUpdateFields(String resultMapId, String tableName, UpdateParam param) {
+        param.excludes("id");
+        RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
+        RDBDatabaseMetaData databaseMetaDate = getActiveDatabase();
+        Dialect dialect = databaseMetaDate.getDialect();
+        CommonSqlRender render = (CommonSqlRender) databaseMetaDate.getRenderer(SqlRender.TYPE.SELECT);
+        List<CommonSqlRender.OperationColumn> columns = render.parseOperationField(tableMetaData, param);
+        SqlAppender appender = new SqlAppender();
+        columns.forEach(column -> {
+            RDBColumnMetaData columnMetaData = column.getRDBColumnMetaData();
+            if (columnMetaData.getName().contains(".")) return;
+            if (columnMetaData == null) return;
+            try {
+                Object tmp = propertyUtils.getProperty(param.getData(), columnMetaData.getAlias());
+                if (tmp == null) return;
+            } catch (Exception e) {
+                return;
+            }
+            appender.add(",", encodeColumn(dialect, columnMetaData.getName())
+                    , "=", "#{data.", columnMetaData.getAlias(),
+                    ",javaType=", EasyOrmSqlBuilder.getJavaType(columnMetaData.getJavaType()),
+                    ",jdbcType=", columnMetaData.getJdbcType(),
+                    "}");
+        });
+        if (!appender.isEmpty()) appender.removeFirst();
+        return appender.toString();
+    }
+
+    public String encodeColumn(Dialect dialect, String field) {
+        if (field.contains(".")) {
+            String[] tmp = field.split("[.]");
+            return tmp[0] + "." + dialect.getQuoteStart() + (dialect.columnToUpperCase() ? (tmp[1].toUpperCase()) : tmp[1]) + dialect.getQuoteEnd();
+        } else {
+            return dialect.getQuoteStart() + (dialect.columnToUpperCase() ? (field.toUpperCase()) : field) + dialect.getQuoteEnd();
+        }
+    }
+
+    public String buildInsertSql(String resultMapId, String tableName, InsertParam param) {
+        RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
+        SqlRender<InsertParam> render = tableMetaData.getDatabaseMetaData().getRenderer(SqlRender.TYPE.INSERT);
+        return render.render(tableMetaData, param).getSql();
+    }
+
+    public String buildUpdateSql(String resultMapId, String tableName, UpdateParam param) {
+        RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
+        SqlRender<UpdateParam> render = tableMetaData.getDatabaseMetaData().getRenderer(SqlRender.TYPE.UPDATE);
+        return render.render(tableMetaData, param).getSql();
+    }
+
+    public String buildSelectFields(String resultMapId, String tableName, QueryParam param) {
+        if (param.isPaging() && Pager.get() == null) {
+            Pager.doPaging(param.getPageIndex(), param.getPageSize());
+        }
+        RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
+        RDBDatabaseMetaData databaseMetaDate = getActiveDatabase();
+        Dialect dialect = databaseMetaDate.getDialect();
+        CommonSqlRender render = (CommonSqlRender) databaseMetaDate.getRenderer(SqlRender.TYPE.SELECT);
+        List<CommonSqlRender.OperationColumn> columns = render.parseOperationField(tableMetaData, param);
+        SqlAppender appender = new SqlAppender();
+        columns.forEach(column -> {
+            RDBColumnMetaData columnMetaData = column.getRDBColumnMetaData();
+            if (columnMetaData == null) return;
+            String cname = columnMetaData.getName();
+            if (!cname.contains(".")) cname = tableName.concat(".").concat(cname);
+            appender.add(",", encodeColumn(dialect, cname)
+                    , " AS "
+                    , dialect.getQuoteStart()
+                    , columnMetaData.getName()
+                    , dialect.getQuoteEnd());
+        });
+        param.getIncludes().remove("*");
+        if (appender.isEmpty()) return "*";
+        appender.removeFirst();
+        return appender.toString();
+    }
+
+    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;
+                    appender.add(column.getName(), " ", sort.getOrder(), ",");
+                });
+        if (appender.isEmpty()) return "";
+        appender.removeLast();
+        return appender.toString();
+    }
+
+    public String buildWhere(String resultMapId, String tableName, List<Term> terms) {
+        RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
+        RDBDatabaseMetaData databaseMetaDate = getActiveDatabase();
+        SimpleWhereSqlBuilder builder = new SimpleWhereSqlBuilder() {
+            @Override
+            public Dialect getDialect() {
+                return databaseMetaDate.getDialect();
+            }
+        };
+        SqlAppender appender = new SqlAppender();
+        builder.buildWhere(tableMetaData, "", terms, appender, new HashSet<>());
+        return appender.toString();
+    }
+
+    class MysqlMeta extends MysqlRDBDatabaseMetaData {
+        public MysqlMeta() {
+            super();
+            renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder());
+            renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.MYSQL));
+        }
+    }
+
+    class OracleMeta extends OracleRDBDatabaseMetaData {
+        public OracleMeta() {
+            super();
+            renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder());
+            renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.MYSQL));
+        }
+    }
+
+    class H2Meta extends H2RDBDatabaseMetaData {
+        public H2Meta() {
+            super();
+            renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder());
+            renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.MYSQL));
+        }
+    }
+}

+ 17 - 0
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/InsertSqlBuilder.java

@@ -0,0 +1,17 @@
+package org.hsweb.web.mybatis.builder;
+
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.render.SqlAppender;
+import org.hsweb.ezorm.rdb.render.support.simple.SimpleInsertSqlRender;
+
+/**
+ * @author zhouhao
+ */
+public class InsertSqlBuilder extends SimpleInsertSqlRender {
+    @Override
+    protected SqlAppender getParamString(String paramName, RDBColumnMetaData rdbColumnMetaData) {
+        return new SqlAppender().add("#{", paramName,
+                ",javaType=", EasyOrmSqlBuilder.getJavaType(rdbColumnMetaData.getJavaType()),
+                ",jdbcType=", rdbColumnMetaData.getJdbcType(), "}");
+    }
+}

+ 3 - 4
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/MysqlParamBuilder.java

@@ -1,10 +1,9 @@
 package org.hsweb.web.mybatis.builder;
 package org.hsweb.web.mybatis.builder;
 
 
-import org.hsweb.ezorm.render.Dialect;
 
 
-/**
- * Created by zhouhao on 16-5-9.
- */
+import org.hsweb.ezorm.rdb.render.dialect.Dialect;
+
+@Deprecated
 public class MysqlParamBuilder extends DefaultSqlParamBuilder {
 public class MysqlParamBuilder extends DefaultSqlParamBuilder {
     private static MysqlParamBuilder instance = new MysqlParamBuilder();
     private static MysqlParamBuilder instance = new MysqlParamBuilder();
 
 

+ 10 - 12
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/SqlBuilder.java

@@ -16,9 +16,6 @@
 
 
 package org.hsweb.web.mybatis.builder;
 package org.hsweb.web.mybatis.builder;
 
 
-import org.hsweb.web.core.datasource.DataSourceHolder;
-import org.hsweb.web.core.datasource.DatabaseType;
-
 /**
 /**
  * @author zhouhao
  * @author zhouhao
  */
  */
@@ -26,15 +23,16 @@ public class SqlBuilder {
     private static boolean dynamic;
     private static boolean dynamic;
 
 
     public static final Object current() {
     public static final Object current() {
-        DatabaseType type = dynamic
-                ? DataSourceHolder.getActiveDatabaseType()
-                : DataSourceHolder.getDefaultDatabaseType();
-        switch (type) {
-            case mysql:
-                return MysqlParamBuilder.instance();
-            default:
-                return DefaultSqlParamBuilder.instance();
-        }
+        return EasyOrmSqlBuilder.getInstance();
+//        DatabaseType type = dynamic
+//                ? DataSourceHolder.getActiveDatabaseType()
+//                : DataSourceHolder.getDefaultDatabaseType();
+//        switch (type) {
+//            case mysql:
+//                return MysqlParamBuilder.instance();
+//            default:
+//                return DefaultSqlParamBuilder.instance();
+//        }
     }
     }
 
 
     public static void setDynamic(boolean dynamic) {
     public static void setDynamic(boolean dynamic) {

+ 22 - 0
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/UpdateSqlBuilder.java

@@ -0,0 +1,22 @@
+package org.hsweb.web.mybatis.builder;
+
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.render.SqlAppender;
+import org.hsweb.ezorm.rdb.render.dialect.Dialect;
+import org.hsweb.ezorm.rdb.render.support.simple.SimpleUpdateSqlRender;
+
+/**
+ * @author zhouhao
+ */
+public class UpdateSqlBuilder extends SimpleUpdateSqlRender {
+    public UpdateSqlBuilder(Dialect dialect) {
+        super(dialect);
+    }
+
+    @Override
+    protected SqlAppender getParamString(String paramName, RDBColumnMetaData rdbColumnMetaData) {
+        return new SqlAppender().add("#{", paramName,
+                ",javaType=", EasyOrmSqlBuilder.getJavaType(rdbColumnMetaData.getJavaType()),
+                ",jdbcType=", rdbColumnMetaData.getJdbcType(), "}");
+    }
+}

+ 65 - 0
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/Pager.java

@@ -0,0 +1,65 @@
+package org.hsweb.web.mybatis.plgins.pager;
+
+import org.hsweb.web.core.utils.ThreadLocalUtils;
+
+/**
+ * 分页插件,通过此接口进行分页操作
+ *
+ * @author zhouhao
+ * @see PagerInterceptor
+ */
+public interface Pager {
+    int pageIndex();
+
+    int pageSize();
+
+    String threadLocalKey = "nowPager";
+
+    static Pager getAndReset() {
+        try {
+            return get();
+        } finally {
+            reset();
+        }
+    }
+
+    static Pager get() {
+        return ThreadLocalUtils.get(threadLocalKey);
+    }
+
+    static void reset() {
+        ThreadLocalUtils.remove(threadLocalKey);
+    }
+
+    static void doPaging(int pageIndex, int pageSize) {
+        ThreadLocalUtils.put(threadLocalKey, new Pager() {
+            @Override
+            public int pageIndex() {
+                return pageIndex;
+            }
+
+            @Override
+            public int pageSize() {
+                return pageSize;
+            }
+        });
+    }
+
+    static void doPaging(int pageIndex, int pageSize, int total) {
+        doPaging(pageIndex, pageSize);
+        rePaging(total);
+    }
+
+    static void rePaging(int total) {
+        Pager pager = get();
+        int pageIndex = 0;
+        if (pager != null) {
+            // 当前页没有数据后跳转到最后一页
+            if (pager.pageIndex() != 0 && (pager.pageIndex() * pager.pageSize()) >= total) {
+                int tmp = total / pager.pageSize();
+                pageIndex = total % pager.pageSize() == 0 ? tmp - 1 : tmp;
+            }
+            doPaging(pageIndex, pager.pageSize());
+        }
+    }
+}

+ 0 - 13
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerHelper.java

@@ -1,13 +0,0 @@
-package org.hsweb.web.mybatis.plgins.pager;
-
-import org.hsweb.web.bean.common.QueryParam;
-
-/**
- * Created by zhouhao on 16-4-13.
- */
-public interface PagerHelper {
-
-    String getDialect();
-
-    String doPaging(QueryParam param, String sql);
-}

+ 18 - 22
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerInterceptor.java

@@ -3,6 +3,7 @@ package org.hsweb.web.mybatis.plgins.pager;
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.executor.statement.StatementHandler;
 import org.apache.ibatis.executor.statement.StatementHandler;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.ParameterMapping;
 import org.apache.ibatis.plugin.*;
 import org.apache.ibatis.plugin.*;
 import org.apache.ibatis.reflection.MetaObject;
 import org.apache.ibatis.reflection.MetaObject;
 import org.apache.ibatis.reflection.SystemMetaObject;
 import org.apache.ibatis.reflection.SystemMetaObject;
@@ -10,12 +11,14 @@ import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
 import org.apache.ibatis.session.RowBounds;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.hsweb.web.core.datasource.DataSourceHolder;
+import org.hsweb.web.mybatis.builder.EasyOrmSqlBuilder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PostConstruct;
 import java.util.HashMap;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Properties;
 
 
@@ -23,10 +26,6 @@ import java.util.Properties;
         RowBounds.class, ResultHandler.class})})
         RowBounds.class, ResultHandler.class})})
 @Component
 @Component
 public class PagerInterceptor implements Interceptor {
 public class PagerInterceptor implements Interceptor {
-    protected Map<String, PagerHelper> pagerHelperBase = new HashMap<>();
-
-    @Autowired
-    private ApplicationContext context;
 
 
     @Override
     @Override
     public Object intercept(Invocation target) throws Throwable {
     public Object intercept(Invocation target) throws Throwable {
@@ -39,15 +38,22 @@ public class PagerInterceptor implements Interceptor {
             StatementHandler statementHandler = (StatementHandler) target;
             StatementHandler statementHandler = (StatementHandler) target;
             MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler);
             MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler);
             String sql = statementHandler.getBoundSql().getSql();
             String sql = statementHandler.getBoundSql().getSql();
-            Object obj = statementHandler.getParameterHandler().getParameterObject();
-            if (obj instanceof QueryParam) {
-                QueryParam param = (QueryParam) obj;
-                PagerHelper helper = pagerHelperBase.get(getDialect());
-                if (helper != null && param.isPaging() && !sql.contains("count(0)")) {
-                    String newSql = helper.doPaging(param, sql);
-                    metaStatementHandler.setValue("delegate.boundSql.sql", newSql);
-                }
+            Pager pager = Pager.getAndReset();
+            if (pager != null) {
+                String newSql = EasyOrmSqlBuilder.getInstance()
+                        .getActiveDatabase().getDialect()
+                        .doPaging(sql, pager.pageIndex(), pager.pageSize());
+                metaStatementHandler.setValue("delegate.boundSql.sql", newSql);
             }
             }
+//            else if (obj instanceof QueryParam) {
+//                QueryParam param = (QueryParam) obj;
+//                if (param.isPaging()) {
+//                    String newSql = EasyOrmSqlBuilder.getInstance()
+//                            .getActiveDatabase().getDialect()
+//                            .doPaging(sql, param.getPageIndex(), param.getPageSize());
+//                    metaStatementHandler.setValue("delegate.boundSql.sql", newSql);
+//                }
+//            }
         }
         }
         return Plugin.wrap(target, this);
         return Plugin.wrap(target, this);
     }
     }
@@ -55,14 +61,4 @@ public class PagerInterceptor implements Interceptor {
     @Override
     @Override
     public void setProperties(Properties properties) {
     public void setProperties(Properties properties) {
     }
     }
-
-    @PostConstruct
-    public void init() {
-        Map<String, PagerHelper> helperMap = context.getBeansOfType(PagerHelper.class);
-        helperMap.forEach((name, helper) -> pagerHelperBase.put(helper.getDialect(), helper));
-    }
-
-    public String getDialect() {
-        return DataSourceHolder.getDefaultDatabaseType().name();
-    }
 }
 }

+ 0 - 15
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/H2PagerHelper.java

@@ -1,15 +0,0 @@
-package org.hsweb.web.mybatis.plgins.pager.dialect;
-
-import org.springframework.stereotype.Component;
-
-/**
- * Created by zhouhao on 16-4-13.
- */
-@Component
-public class H2PagerHelper extends MysqlPagerHelper {
-
-    @Override
-    public String getDialect() {
-        return "h2";
-    }
-}

+ 0 - 29
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/MysqlPagerHelper.java

@@ -1,29 +0,0 @@
-package org.hsweb.web.mybatis.plgins.pager.dialect;
-
-import org.hsweb.web.bean.common.QueryParam;
-import org.hsweb.web.mybatis.plgins.pager.PagerHelper;
-import org.springframework.stereotype.Component;
-import org.hsweb.commons.StringUtils;
-
-/**
- * Created by zhouhao on 16-4-13.
- */
-@Component
-public class MysqlPagerHelper implements PagerHelper {
-    @Override
-    public String doPaging(QueryParam param, String sql) {
-        StringBuilder builder = new StringBuilder(sql);
-        if (param.isPaging())
-            builder.append(" limit ")
-                    .append(param.getPageSize() * param.getPageIndex())
-                    .append(",")
-                    .append(param.getPageSize() * (param.getPageIndex() + 1));
-        return builder.toString();
-    }
-
-
-    @Override
-    public String getDialect() {
-        return "mysql";
-    }
-}

+ 0 - 34
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/OraclePagerHelper.java

@@ -1,34 +0,0 @@
-package org.hsweb.web.mybatis.plgins.pager.dialect;
-
-import org.hsweb.web.bean.common.QueryParam;
-import org.hsweb.web.mybatis.plgins.pager.PagerHelper;
-import org.springframework.stereotype.Component;
-import org.hsweb.commons.StringUtils;
-
-/**
- * Created by zhouhao on 16-4-13.
- */
-@Component
-public class OraclePagerHelper implements PagerHelper {
-    @Override
-    public String doPaging(QueryParam param, String sql) {
-        if (!param.isPaging()) {
-            return sql;
-        }
-        int startWith = param.getPageSize() * (param.getPageIndex() + 1);
-        StringBuilder builder = new StringBuilder()
-                .append("select * from ( select row_.*, rownum rownum_ from (")
-                .append(sql)
-                .append(") row_ )")
-                .append("where rownum_ <= ")
-                .append(startWith)
-                .append(" and rownum_ > ")
-                .append(param.getPageSize() * param.getPageIndex());
-        return builder.toString();
-    }
-
-    @Override
-    public String getDialect() {
-        return "oracle";
-    }
-}

+ 2 - 1
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/utils/SqlAppender.java

@@ -3,7 +3,8 @@ package org.hsweb.web.mybatis.utils;
 import java.util.LinkedList;
 import java.util.LinkedList;
 
 
 /**
 /**
- * Created by zhouhao on 16-5-9.
+ * @see org.hsweb.ezorm.rdb.render.SqlAppender
+ * @deprecated
  */
  */
 public class SqlAppender extends LinkedList<String> {
 public class SqlAppender extends LinkedList<String> {
 
 

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

@@ -16,7 +16,7 @@
     <!--生成修改字段-->
     <!--生成修改字段-->
     <sql id="buildUpdateField">
     <sql id="buildUpdateField">
         <set>
         <set>
-            ${@org.hsweb.web.mybatis.builder.SqlBuilder@current().buildUpdateFields(resultMapId,#this['_parameter'])}
+            ${@org.hsweb.web.mybatis.builder.SqlBuilder@current().buildUpdateFields(resultMapId,tableName,#this['_parameter'])}
         </set>
         </set>
     </sql>
     </sql>
 
 
@@ -27,48 +27,56 @@
 
 
     <!--生成查询sql-->
     <!--生成查询sql-->
     <sql id="buildSelectSql">
     <sql id="buildSelectSql">
-        select
-        <include refid="BasicMapper.buildSelectField"/>
-        from ${tableName}
-        <where>
-            <include refid="BasicMapper.buildWhere"/>
-        </where>
-        <include refid="BasicMapper.buildSortField"/>
+        <trim>
+            select
+            <include refid="BasicMapper.buildSelectField"/>
+            from ${tableName}
+            <where>
+                <include refid="BasicMapper.buildWhere"/>
+            </where>
+            <include refid="BasicMapper.buildSortField"/>
+        </trim>
     </sql>
     </sql>
 
 
     <!--生成删除sql-->
     <!--生成删除sql-->
     <sql id="buildDeleteSql">
     <sql id="buildDeleteSql">
-        delete from ${tableName}
-        <where>
-            <include refid="BasicMapper.buildWhere"/>
-            <if test="terms.size()==0">
-               1=2
-            </if>
-        </where>
+        <trim>
+            delete from ${tableName}
+            <where>
+                <include refid="BasicMapper.buildWhere"/>
+                <if test="terms.size()==0">
+                    1=2
+                </if>
+            </where>
+        </trim>
     </sql>
     </sql>
 
 
     <!--生成InsertSql-->
     <!--生成InsertSql-->
     <sql id="buildInsertSql">
     <sql id="buildInsertSql">
-        insert into ${tableName} ${@org.hsweb.web.mybatis.builder.SqlBuilder@current().buildInsertSql(resultMapId,#this['_parameter'])}
+        ${@org.hsweb.web.mybatis.builder.SqlBuilder@current().buildInsertSql(resultMapId,tableName,#this['_parameter'])}
     </sql>
     </sql>
 
 
     <!--生成UpdateSql-->
     <!--生成UpdateSql-->
     <sql id="buildUpdateSql">
     <sql id="buildUpdateSql">
-        update ${tableName}
-        <include refid="BasicMapper.buildUpdateField"/>
-        <where>
-            <include refid="BasicMapper.buildWhere"/>
-            <if test="terms.size()==0">
-                u_id=#{data.id}
-            </if>
-        </where>
+        <trim>
+            update ${tableName}
+            <include refid="BasicMapper.buildUpdateField"/>
+            <where>
+                <include refid="BasicMapper.buildWhere"/>
+                <if test="terms.size()==0">
+                    u_id=#{data.id}
+                </if>
+            </where>
+        </trim>
     </sql>
     </sql>
 
 
     <!--生成查询数量sql-->
     <!--生成查询数量sql-->
     <sql id="buildTotalSql">
     <sql id="buildTotalSql">
-        select count(0) as "total" from ${tableName}
-        <where>
-            <include refid="BasicMapper.buildWhere"/>
-        </where>
+        <trim>
+            select count(0) as total from ${tableName}
+            <where>
+                <include refid="BasicMapper.buildWhere"/>
+            </where>
+        </trim>
     </sql>
     </sql>
 </mapper>
 </mapper>

+ 2 - 3
hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/SpringApplication.java

@@ -16,8 +16,8 @@
 
 
 package org.hsweb.web.mybatis;
 package org.hsweb.web.mybatis;
 
 
-import org.hsweb.ezorm.executor.AbstractJdbcSqlExecutor;
-import org.hsweb.ezorm.executor.SqlExecutor;
+import org.hsweb.ezorm.rdb.executor.AbstractJdbcSqlExecutor;
+import org.hsweb.ezorm.rdb.executor.SqlExecutor;
 import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.hsweb.web.core.datasource.DatabaseType;
 import org.hsweb.web.core.datasource.DatabaseType;
 import org.mybatis.spring.annotation.MapperScan;
 import org.mybatis.spring.annotation.MapperScan;
@@ -26,7 +26,6 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.jdbc.datasource.DataSourceUtils;
 import org.springframework.jdbc.datasource.DataSourceUtils;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
 import javax.sql.DataSource;
 import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.Connection;

+ 22 - 1
hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/user/UserMapperTest.java

@@ -16,17 +16,25 @@
 
 
 package org.hsweb.web.mybatis.user;
 package org.hsweb.web.mybatis.user;
 
 
+import org.hsweb.ezorm.core.dsl.Query;
+import org.hsweb.ezorm.rdb.render.dialect.Dialect;
+import org.hsweb.web.bean.common.DeleteParam;
 import org.hsweb.web.bean.common.InsertParam;
 import org.hsweb.web.bean.common.InsertParam;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.po.user.User;
 import org.hsweb.web.bean.po.user.User;
+import org.hsweb.web.dao.form.FormMapper;
 import org.hsweb.web.dao.user.UserMapper;
 import org.hsweb.web.dao.user.UserMapper;
 import org.hsweb.web.mybatis.AbstractTestCase;
 import org.hsweb.web.mybatis.AbstractTestCase;
+import org.hsweb.web.mybatis.plgins.pager.Pager;
 import org.junit.Assert;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
 import java.util.Date;
 import java.util.Date;
 
 
+import static org.hsweb.ezorm.rdb.render.dialect.Dialect.TermTypeMapper.sql;
+
 /**
 /**
  * @author zhouhao
  * @author zhouhao
  */
  */
@@ -35,6 +43,9 @@ public class UserMapperTest extends AbstractTestCase {
     @Autowired
     @Autowired
     private UserMapper userMapper;
     private UserMapper userMapper;
 
 
+    @Autowired
+    protected FormMapper formMapper;
+
     @Test
     @Test
     public void testInsert() {
     public void testInsert() {
         User user = new User();
         User user = new User();
@@ -43,11 +54,21 @@ public class UserMapperTest extends AbstractTestCase {
         user.setName("test");
         user.setName("test");
         user.setCreateDate(new Date());
         user.setCreateDate(new Date());
         int i = userMapper.insert(InsertParam.build(user));
         int i = userMapper.insert(InsertParam.build(user));
+        userMapper.update(UpdateParam.build(user));
+        userMapper.delete(DeleteParam.build().where("id", "111"));
         Assert.assertEquals(i, 1);
         Assert.assertEquals(i, 1);
     }
     }
 
 
     @Test
     @Test
     public void testQuery() {
     public void testQuery() {
-        userMapper.select(QueryParam.build());
+        User user = new User();
+        user.setId("test");
+        user.setUsername("admin");
+        user.setName("test");
+        Pager.doPaging(0, 20);
+        Query.forList(userMapper::select, new QueryParam())
+                .where("username", sql("username is not null"))
+                .fromBean(user)
+                .$like$("username").list();
     }
     }
 }
 }

+ 1 - 1
hsweb-web-dao/hsweb-web-dao-mybatis/src/test/resources/application.yml

@@ -7,4 +7,4 @@ spring:
         host: 127.0.0.1
         host: 127.0.0.1
         port: 6379
         port: 6379
 mybatis:
 mybatis:
-    config: classpath:mybatis-config.xml
+    configLocation: classpath:mybatis-config.xml

+ 1 - 1
hsweb-web-dao/pom.xml

@@ -21,7 +21,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>
     <packaging>pom</packaging>

+ 1 - 1
hsweb-web-datasource/pom.xml

@@ -21,7 +21,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 

+ 16 - 49
hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicDataSourceSqlExecutorService.java

@@ -16,11 +16,11 @@
 
 
 package org.hsweb.web.datasource.dynamic;
 package org.hsweb.web.datasource.dynamic;
 
 
-import org.hsweb.ezorm.executor.AbstractJdbcSqlExecutor;
-import org.hsweb.ezorm.executor.SQL;
-import org.hsweb.ezorm.meta.expand.ObjectWrapper;
-import org.hsweb.ezorm.meta.expand.SimpleMapWrapper;
-import org.hsweb.ezorm.render.support.simple.SimpleSQL;
+import org.hsweb.ezorm.core.ObjectWrapper;
+import org.hsweb.ezorm.rdb.executor.AbstractJdbcSqlExecutor;
+import org.hsweb.ezorm.rdb.executor.SQL;
+import org.hsweb.ezorm.rdb.meta.expand.SimpleMapWrapper;
+import org.hsweb.ezorm.rdb.render.support.simple.SimpleSQL;
 import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.hsweb.web.core.datasource.DynamicDataSource;
 import org.hsweb.web.core.datasource.DynamicDataSource;
 import org.springframework.jdbc.datasource.DataSourceUtils;
 import org.springframework.jdbc.datasource.DataSourceUtils;
@@ -65,59 +65,34 @@ public class DynamicDataSourceSqlExecutorService extends AbstractJdbcSqlExecutor
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     public List<Map<String, Object>> list(SQL sql) throws SQLException {
     public List<Map<String, Object>> list(SQL sql) throws SQLException {
-        List<Map<String, Object>> data = list(sql, new SimpleMapWrapper());
-        return data;
+        return super.list(sql);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public Map<String, Object> single(SQL sql) throws Exception {
-        Map<String, Object> data = single(sql, new SimpleMapWrapper());
-        return data;
+    public Map<String, Object> single(SQL sql) throws SQLException {
+        return super.single(sql);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public List<Map<String, Object>> list(String sql) throws Exception {
-        List<Map<String, Object>> data = list(create(sql), new SimpleMapWrapper());
-        return data;
+    public List<Map<String, Object>> list(String sql) throws SQLException {
+        return super.list(sql);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public List<Map<String, Object>> list(String sql, Map<String, Object> param) throws Exception {
-        List<Map<String, Object>> data = list(create(sql, param), new SimpleMapWrapper());
-        return data;
+    public List<Map<String, Object>> list(String sql, Object param) throws SQLException {
+        return super.list(sql, param);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public Map<String, Object> single(String sql) throws Exception {
-        Map<String, Object> data = single(create(sql));
-        return data;
+    public Map<String, Object> single(String sql) throws SQLException {
+        return super.single(sql);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public Map<String, Object> single(String sql, Map<String, Object> param) throws Exception {
-        Map<String, Object> data = single(create(sql, param));
-        return data;
+    public Map<String, Object> single(String sql, Object param) throws SQLException {
+        return super.single(sql, param);
     }
     }
 
 
-    @Transactional
-    public int update(String sql, Map<String, Object> param) throws SQLException {
-        return super.update(new SimpleSQL(sql, param));
-    }
-
-    @Transactional
-    public int update(String sql) throws SQLException {
-        return super.update(new SimpleSQL(sql));
-    }
-
-    @Transactional
-    public int delete(String sql, Map<String, Object> param) throws SQLException {
-        return super.delete(new SimpleSQL(sql, param));
-    }
-
-    @Transactional
-    public int delete(String sql) throws SQLException {
-        return super.delete(new SimpleSQL(sql));
-    }
 
 
     @Transactional(propagation = Propagation.NOT_SUPPORTED)
     @Transactional(propagation = Propagation.NOT_SUPPORTED)
     public void exec(String sql) throws SQLException {
     public void exec(String sql) throws SQLException {
@@ -130,12 +105,4 @@ public class DynamicDataSourceSqlExecutorService extends AbstractJdbcSqlExecutor
         super.exec(sql);
         super.exec(sql);
     }
     }
 
 
-    public SQL create(String sql) {
-        return new SimpleSQL(sql);
-    }
-
-    public SQL create(String sql, Map<String, Object> param) {
-        SimpleSQL sql1 = new SimpleSQL(sql, param);
-        return sql1;
-    }
 }
 }

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-controller/pom.xml

@@ -21,7 +21,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-core/pom.xml

@@ -21,7 +21,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-mybatis/pom.xml

@@ -21,7 +21,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 

+ 15 - 1
hsweb-web-oauth2/hsweb-web-oauth2-service-simple/pom.xml

@@ -21,7 +21,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 
@@ -36,5 +36,19 @@
             <groupId>org.hsweb</groupId>
             <groupId>org.hsweb</groupId>
             <artifactId>hsweb-web-service-simple</artifactId>
             <artifactId>hsweb-web-service-simple</artifactId>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context-support</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hsweb</groupId>
+            <artifactId>hsweb-web-core</artifactId>
+        </dependency>
     </dependencies>
     </dependencies>
 </project>
 </project>

+ 0 - 1
hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ClientServiceImpl.java

@@ -22,7 +22,6 @@ import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.UpdateMapParam;
 import org.hsweb.web.bean.common.UpdateMapParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.core.exception.NotFoundException;
 import org.hsweb.web.core.exception.NotFoundException;
-import org.hsweb.web.core.utils.RandomUtil;
 import org.hsweb.web.oauth2.dao.OAuth2AccessMapper;
 import org.hsweb.web.oauth2.dao.OAuth2AccessMapper;
 import org.hsweb.web.oauth2.dao.OAuth2ClientMapper;
 import org.hsweb.web.oauth2.dao.OAuth2ClientMapper;
 import org.hsweb.web.oauth2.po.OAuth2Access;
 import org.hsweb.web.oauth2.po.OAuth2Access;

+ 1 - 2
hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ServiceImpl.java

@@ -23,7 +23,6 @@ import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.po.user.User;
 import org.hsweb.web.bean.po.user.User;
 import org.hsweb.web.core.exception.AuthorizeException;
 import org.hsweb.web.core.exception.AuthorizeException;
-import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.core.exception.NotFoundException;
 import org.hsweb.web.core.exception.NotFoundException;
 import org.hsweb.web.oauth2.dao.OAuth2AccessMapper;
 import org.hsweb.web.oauth2.dao.OAuth2AccessMapper;
 import org.hsweb.web.oauth2.exception.AccessTimeoutException;
 import org.hsweb.web.oauth2.exception.AccessTimeoutException;
@@ -96,7 +95,7 @@ public class OAuth2ServiceImpl implements OAuth2Service {
     }
     }
 
 
     @Override
     @Override
-    @Transactional(noRollbackFor = AccessTimeoutException.class)
+    @Transactional(noRollbackFor = {AccessTimeoutException.class, AuthorizeException.class})
     public User getUserByAccessToken(String accessToken) {
     public User getUserByAccessToken(String accessToken) {
         OAuth2Access auth2Access = null;
         OAuth2Access auth2Access = null;
         Cache cache = null;
         Cache cache = null;

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-simple/pom.xml

@@ -21,7 +21,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 

+ 1 - 1
hsweb-web-oauth2/pom.xml

@@ -21,7 +21,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 

+ 1 - 1
hsweb-web-service/hsweb-web-service-api/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-service</artifactId>
         <artifactId>hsweb-web-service</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-service-api</artifactId>
     <artifactId>hsweb-web-service-api</artifactId>

+ 48 - 3
hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/GenericService.java

@@ -1,8 +1,13 @@
 package org.hsweb.web.service;
 package org.hsweb.web.service;
 
 
-import org.hsweb.web.bean.common.PagerResult;
-import org.hsweb.web.bean.common.QueryParam;
-
+import org.hsweb.ezorm.core.dsl.Delete;
+import org.hsweb.ezorm.core.dsl.Query;
+import org.hsweb.ezorm.core.dsl.Update;
+import org.hsweb.ezorm.core.param.Param;
+import org.hsweb.web.bean.common.*;
+import org.hsweb.web.dao.GenericMapper;
+
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 
 
 
 
@@ -117,4 +122,44 @@ public interface GenericService<Po, Pk> {
         else return list.get(0);
         else return list.get(0);
     }
     }
 
 
+    default <Po, Pk> Update<Po, UpdateParam<Po>> createUpdate(GenericMapper<Po, Pk> mapper) {
+        Update<Po, UpdateParam<Po>> update = new Update(new UpdateParam(new HashMap<>()));
+        update.setExecutor(mapper::update);
+        return update;
+    }
+
+    default Delete createDelete(GenericMapper<Po, Pk> mapper) {
+        Delete update = new Delete();
+        update.setParam(new DeleteParam());
+        update.setExecutor(param -> mapper.delete(((DeleteParam) param)));
+        return update;
+    }
+
+    default Delete createDelete(Delete.Executor<DeleteParam> executor) {
+        Delete update = new Delete();
+        update.setParam(new DeleteParam());
+        update.setExecutor(param -> executor.doExecute(((DeleteParam) param)));
+        return update;
+    }
+
+    default Query<Po, QueryParam> createQuery() {
+        Query<Po, QueryParam> query = new Query<>(new QueryParam());
+        query.setListExecutor(this::select);
+        query.setTotalExecutor(this::total);
+        query.setSingleExecutor(this::selectSingle);
+        return query;
+    }
+
+    default <Po, Pk> Query<Po, QueryParam> createQuery(GenericMapper<Po, Pk> mapper) {
+        Query<Po, QueryParam> query = new Query<>(new QueryParam());
+        query.setListExecutor(mapper::select);
+        query.setTotalExecutor(mapper::total);
+        query.setSingleExecutor((param) -> {
+            param.doPaging(0, 1);
+            List<Po> list = mapper.select(param);
+            if (null == list || list.size() == 0) return null;
+            else return list.get(0);
+        });
+        return query;
+    }
 }
 }

+ 3 - 2
hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormDataValidator.java

@@ -1,10 +1,11 @@
 package org.hsweb.web.service.form;
 package org.hsweb.web.service.form;
 
 
-import org.hsweb.ezorm.run.Table;
+
+import org.hsweb.ezorm.rdb.RDBTable;
 
 
 import java.util.Map;
 import java.util.Map;
 
 
 public interface DynamicFormDataValidator {
 public interface DynamicFormDataValidator {
-    String getRepeatDataId(Table table, Map<String, Object> data);
+    String getRepeatDataId(RDBTable table, Map<String, Object> data);
 
 
 }
 }

+ 4 - 4
hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormService.java

@@ -1,7 +1,7 @@
 package org.hsweb.web.service.form;
 package org.hsweb.web.service.form;
 
 
-import org.hsweb.ezorm.meta.TableMetaData;
-import org.hsweb.ezorm.run.Database;
+import org.hsweb.ezorm.rdb.RDBDatabase;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
 import org.hsweb.web.bean.common.*;
 import org.hsweb.web.bean.common.*;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.form.Form;
 
 
@@ -16,9 +16,9 @@ import java.util.Map;
  */
  */
 public interface DynamicFormService {
 public interface DynamicFormService {
 
 
-    Database getDefaultDatabase();
+    RDBDatabase getDefaultDatabase();
 
 
-    TableMetaData parseMeta(Form form);
+    RDBTableMetaData parseMeta(Form form);
 
 
     void deploy(Form form) throws SQLException;
     void deploy(Form form) throws SQLException;
 
 

+ 3 - 7
hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/FormParser.java

@@ -1,19 +1,15 @@
 package org.hsweb.web.service.form;
 package org.hsweb.web.service.form;
 
 
-import org.hsweb.ezorm.meta.TableMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.form.Form;
 
 
-import javax.xml.bind.Marshaller;
 
 
-/**
- * Created by zhouhao on 16-4-20.
- */
 public interface FormParser {
 public interface FormParser {
-    TableMetaData parse(Form form);
+    RDBTableMetaData parse(Form form);
 
 
     String parseHtml(Form form);
     String parseHtml(Form form);
 
 
     interface Listener {
     interface Listener {
-        void afterParse(TableMetaData tableMetaData);
+        void afterParse(RDBTableMetaData tableMetaData);
     }
     }
 }
 }

+ 5 - 4
hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/system/DataBaseManagerService.java

@@ -1,6 +1,7 @@
 package org.hsweb.web.service.system;
 package org.hsweb.web.service.system;
 
 
-import org.hsweb.ezorm.meta.TableMetaData;
+
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
 
 
 import java.sql.SQLException;
 import java.sql.SQLException;
 import java.util.List;
 import java.util.List;
@@ -19,11 +20,11 @@ public interface DataBaseManagerService {
      *
      *
      * @return 表名集合
      * @return 表名集合
      */
      */
-    List<TableMetaData> getTableList() throws SQLException;
+    List<RDBTableMetaData> getTableList() throws SQLException;
 
 
     List<Map<String, Object>> execSql(List<String> sqlList) throws SQLException;
     List<Map<String, Object>> execSql(List<String> sqlList) throws SQLException;
 
 
-    String createAlterSql(TableMetaData newTable) throws Exception;
+    String createAlterSql(RDBTableMetaData newTable) throws Exception;
 
 
-    String createCreateSql(TableMetaData newTable) throws Exception;
+    String createCreateSql(RDBTableMetaData newTable) throws Exception;
 }
 }

+ 2 - 2
hsweb-web-service/hsweb-web-service-simple/pom.xml

@@ -5,7 +5,7 @@
     <parent>
     <parent>
         <artifactId>hsweb-web-service</artifactId>
         <artifactId>hsweb-web-service</artifactId>
         <groupId>org.hsweb</groupId>
         <groupId>org.hsweb</groupId>
-        <version>2.1-SNAPSHOT</version>
+        <version>2.2-SNAPSHOT</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 
@@ -97,7 +97,7 @@
 
 
         <dependency>
         <dependency>
             <groupId>org.hsweb</groupId>
             <groupId>org.hsweb</groupId>
-            <artifactId>hsweb-easy-orm</artifactId>
+            <artifactId>hsweb-easy-orm-rdb</artifactId>
         </dependency>
         </dependency>
 
 
         <dependency>
         <dependency>

+ 18 - 0
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/AbstractServiceImpl.java

@@ -1,5 +1,8 @@
 package org.hsweb.web.service.impl;
 package org.hsweb.web.service.impl;
 
 
+import org.hsweb.ezorm.core.dsl.Delete;
+import org.hsweb.ezorm.core.dsl.Query;
+import org.hsweb.ezorm.core.dsl.Update;
 import org.hsweb.web.bean.common.*;
 import org.hsweb.web.bean.common.*;
 import org.hsweb.web.bean.po.GenericPo;
 import org.hsweb.web.bean.po.GenericPo;
 import org.hsweb.web.bean.validator.ValidateResults;
 import org.hsweb.web.bean.validator.ValidateResults;
@@ -160,4 +163,19 @@ public abstract class AbstractServiceImpl<Po, PK> implements GenericService<Po,
         if (!results.isSuccess())
         if (!results.isSuccess())
             throw new ValidationException(results);
             throw new ValidationException(results);
     }
     }
+
+    public Update<Po, UpdateParam<Po>> createUpdate() {
+        return createUpdate(getMapper());
+    }
+
+    public Update<Po, UpdateParam<Po>> createUpdate(Po data) {
+        Update<Po, UpdateParam<Po>> update = createUpdate();
+        update.getParam().setData(data);
+        return update;
+    }
+
+    public Delete createDelete() {
+        return createDelete(getMapper());
+    }
+
 }
 }

+ 20 - 29
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DataBaseAutoConfiguration.java

@@ -1,18 +1,18 @@
 package org.hsweb.web.service.impl;
 package org.hsweb.web.service.impl;
 
 
-import org.hsweb.ezorm.executor.SqlExecutor;
-import org.hsweb.ezorm.meta.DatabaseMetaData;
-import org.hsweb.ezorm.meta.expand.ObjectWrapperFactory;
-import org.hsweb.ezorm.meta.expand.ValidatorFactory;
-import org.hsweb.ezorm.meta.parser.H2TableMetaParser;
-import org.hsweb.ezorm.meta.parser.MysqlTableMetaParser;
-import org.hsweb.ezorm.meta.parser.OracleTableMetaParser;
-import org.hsweb.ezorm.meta.parser.TableMetaParser;
-import org.hsweb.ezorm.render.dialect.H2DatabaseMeta;
-import org.hsweb.ezorm.render.dialect.MysqlDatabaseMeta;
-import org.hsweb.ezorm.render.dialect.OracleDatabaseMeta;
-import org.hsweb.ezorm.run.Database;
-import org.hsweb.ezorm.run.simple.SimpleDatabase;
+import org.hsweb.ezorm.core.ObjectWrapperFactory;
+import org.hsweb.ezorm.core.ValidatorFactory;
+import org.hsweb.ezorm.rdb.RDBDatabase;
+import org.hsweb.ezorm.rdb.executor.SqlExecutor;
+import org.hsweb.ezorm.rdb.meta.RDBDatabaseMetaData;
+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.render.dialect.H2RDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.render.dialect.MysqlRDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.render.dialect.OracleRDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.simple.SimpleDatabase;
 import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,35 +44,26 @@ public class DataBaseAutoConfiguration {
     @Bean
     @Bean
     @ConditionalOnMissingBean(TableMetaParser.class)
     @ConditionalOnMissingBean(TableMetaParser.class)
     public TableMetaParser tableMetaParser() {
     public TableMetaParser tableMetaParser() {
-        switch (DataSourceHolder.getDefaultDatabaseType()) {
-            case mysql:
-                return new MysqlTableMetaParser(sqlExecutor);
-            case oracle:
-                return new OracleTableMetaParser(sqlExecutor);
-            case h2:
-                return new H2TableMetaParser(sqlExecutor);
-            default:
-                return null;
-        }
+        return DataSourceHolder.getActiveDatabaseType().getDialect().getDefaultParser(sqlExecutor);
     }
     }
 
 
     @Bean
     @Bean
-    public Database database(javax.sql.DataSource dataSource) throws SQLException {
+    public RDBDatabase database(javax.sql.DataSource dataSource) throws SQLException {
         DataSourceHolder holder = new DataSourceHolder();
         DataSourceHolder holder = new DataSourceHolder();
         holder.init(dataSource);
         holder.init(dataSource);
-        DatabaseMetaData dataBaseMetaData;
+        RDBDatabaseMetaData dataBaseMetaData;
         switch (DataSourceHolder.getDefaultDatabaseType()) {
         switch (DataSourceHolder.getDefaultDatabaseType()) {
             case mysql:
             case mysql:
-                dataBaseMetaData = new MysqlDatabaseMeta();
+                dataBaseMetaData = new MysqlRDBDatabaseMetaData();
                 break;
                 break;
             case oracle:
             case oracle:
-                dataBaseMetaData = new OracleDatabaseMeta();
+                dataBaseMetaData = new OracleRDBDatabaseMetaData();
                 break;
                 break;
             case h2:
             case h2:
-                dataBaseMetaData = new H2DatabaseMeta();
+                dataBaseMetaData = new H2RDBDatabaseMetaData();
                 break;
                 break;
             default:
             default:
-                dataBaseMetaData = new OracleDatabaseMeta();
+                dataBaseMetaData = new H2RDBDatabaseMetaData();
                 break;
                 break;
         }
         }
         if (objectWrapperFactory != null)
         if (objectWrapperFactory != null)

+ 0 - 46
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DatabaseMetaDataFactoryBean.java

@@ -1,46 +0,0 @@
-package org.hsweb.web.service.impl;
-
-import org.hsweb.ezorm.meta.DatabaseMetaData;
-import org.hsweb.ezorm.render.dialect.H2DatabaseMeta;
-import org.hsweb.ezorm.render.dialect.MysqlDatabaseMeta;
-import org.hsweb.ezorm.render.dialect.OracleDatabaseMeta;
-import org.hsweb.web.core.Install;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.stereotype.Component;
-
-/**
- * Created by zhouhao on 16-7-1.
- */
-@Component
-public class DatabaseMetaDataFactoryBean implements FactoryBean<DatabaseMetaData> {
-
-    @Override
-    public DatabaseMetaData getObject() throws Exception {
-        DatabaseMetaData databaseMetaData = null;
-        switch (Install.getDatabaseType()) {
-            case "mysql":
-                databaseMetaData = new MysqlDatabaseMeta();
-                break;
-            case "oracle":
-                databaseMetaData = new OracleDatabaseMeta();
-                break;
-            case "h2":
-                databaseMetaData = new H2DatabaseMeta();
-                break;
-        }
-        if (databaseMetaData == null)
-            throw new UnsupportedOperationException();
-        databaseMetaData.init();
-        return databaseMetaData;
-    }
-
-    @Override
-    public Class<?> getObjectType() {
-        return DatabaseMetaData.class;
-    }
-
-    @Override
-    public boolean isSingleton() {
-        return false;
-    }
-}

+ 3 - 10
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/FormDeployContextLoaderListener.java

@@ -1,17 +1,12 @@
 package org.hsweb.web.service.impl;
 package org.hsweb.web.service.impl;
 
 
-import org.hsweb.ezorm.meta.TableMetaData;
-import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.service.form.DynamicFormService;
 import org.hsweb.web.service.form.DynamicFormService;
 import org.hsweb.web.service.form.FormService;
 import org.hsweb.web.service.form.FormService;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.context.ApplicationContextInitializer;
-import org.springframework.context.ApplicationEvent;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.ApplicationListener;
-import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
@@ -29,14 +24,12 @@ public class FormDeployContextLoaderListener implements ApplicationListener<Cont
     @Override
     @Override
     public void onApplicationEvent(ContextRefreshedEvent event) {
     public void onApplicationEvent(ContextRefreshedEvent event) {
         if (event.getApplicationContext().getParent() != null) return;
         if (event.getApplicationContext().getParent() != null) return;
-        QueryParam param = new QueryParam();
-        param.where("using", 1).noPaging();
         try {
         try {
-            formService.select(param).forEach(form -> {
+            formService.createQuery().where(Form.Property.using, 1).list().forEach(form -> {
                 try {
                 try {
                     Form deployed = formService.selectDeployed(form.getName());
                     Form deployed = formService.selectDeployed(form.getName());
                     if (null != deployed) {
                     if (null != deployed) {
-                        TableMetaData metaData = dynamicFormService.parseMeta(deployed);
+                        RDBTableMetaData metaData = dynamicFormService.parseMeta(deployed);
                         dynamicFormService.getDefaultDatabase().reloadTable(metaData);
                         dynamicFormService.getDefaultDatabase().reloadTable(metaData);
                     } else {
                     } else {
                         dynamicFormService.deploy(form);
                         dynamicFormService.deploy(form);

+ 14 - 68
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/basic/SqlExecutorService.java

@@ -1,14 +1,11 @@
 package org.hsweb.web.service.impl.basic;
 package org.hsweb.web.service.impl.basic;
 
 
-import org.hsweb.ezorm.executor.AbstractJdbcSqlExecutor;
-import org.hsweb.ezorm.executor.SQL;
-import org.hsweb.ezorm.meta.expand.ObjectWrapper;
-import org.hsweb.ezorm.meta.expand.SimpleMapWrapper;
-import org.hsweb.ezorm.render.support.simple.SimpleSQL;
+import org.hsweb.ezorm.core.ObjectWrapper;
+import org.hsweb.ezorm.rdb.executor.AbstractJdbcSqlExecutor;
+import org.hsweb.ezorm.rdb.executor.SQL;
 import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.springframework.jdbc.datasource.DataSourceUtils;
 import org.springframework.jdbc.datasource.DataSourceUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -35,7 +32,6 @@ public class SqlExecutorService extends AbstractJdbcSqlExecutor implements Expre
         DataSourceUtils.releaseConnection(connection, dataSource);
         DataSourceUtils.releaseConnection(connection, dataSource);
     }
     }
 
 
-
     @Override
     @Override
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     public <T> List<T> list(SQL sql, ObjectWrapper<T> wrapper) throws SQLException {
     public <T> List<T> list(SQL sql, ObjectWrapper<T> wrapper) throws SQLException {
@@ -50,82 +46,32 @@ public class SqlExecutorService extends AbstractJdbcSqlExecutor implements Expre
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     public List<Map<String, Object>> list(SQL sql) throws SQLException {
     public List<Map<String, Object>> list(SQL sql) throws SQLException {
-        List<Map<String, Object>> data = list(sql, new SimpleMapWrapper());
-        return data;
+        return super.list(sql);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public Map<String, Object> single(SQL sql) throws Exception {
-        Map<String, Object> data = single(sql, new SimpleMapWrapper());
-        return data;
+    public Map<String, Object> single(SQL sql) throws SQLException {
+        return super.single(sql);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public List<Map<String, Object>> list(String sql) throws Exception {
-        List<Map<String, Object>> data = list(create(sql), new SimpleMapWrapper());
-        return data;
+    public List<Map<String, Object>> list(String sql) throws SQLException {
+        return super.list(sql);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public List<Map<String, Object>> list(String sql, Map<String, Object> param) throws Exception {
-        List<Map<String, Object>> data = list(create(sql, param), new SimpleMapWrapper());
-        return data;
+    public List<Map<String, Object>> list(String sql, Object param) throws SQLException {
+        return super.list(sql, param);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public Map<String, Object> single(String sql) throws Exception {
-        Map<String, Object> data = single(create(sql));
-        return data;
+    public Map<String, Object> single(String sql) throws SQLException {
+        return super.single(sql);
     }
     }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
-    public Map<String, Object> single(String sql, Map<String, Object> param) throws Exception {
-        Map<String, Object> data = single(create(sql, param));
-        return data;
-    }
-
-    @Transactional
-    public int update(String sql, Map<String, Object> param) throws SQLException {
-        return super.update(new SimpleSQL(sql, param));
-    }
-
-    @Transactional
-    public int update(String sql) throws SQLException {
-        return super.update(new SimpleSQL(sql));
+    public Map<String, Object> single(String sql, Object param) throws SQLException {
+        return super.single(sql, param);
     }
     }
 
 
-    @Transactional
-    public int delete(String sql, Map<String, Object> param) throws SQLException {
-        return super.delete(new SimpleSQL(sql, param));
-    }
-
-    @Transactional
-    public int delete(String sql) throws SQLException {
-        return super.delete(new SimpleSQL(sql));
-    }
-
-    @Transactional(propagation = Propagation.NOT_SUPPORTED)
-    public void exec(String sql) throws SQLException {
-        super.exec(new SimpleSQL(sql));
-    }
-
-    @Override
-    @Transactional(propagation = Propagation.NOT_SUPPORTED)
-    public void exec(SQL sql) throws SQLException {
-        super.exec(sql);
-    }
-
-    public SQL create(String sql) {
-        return new SimpleSQL(sql);
-    }
-
-    public SQL create(String sql, Map<String, Object> param) {
-        SimpleSQL sql1 = new SimpleSQL(sql, param);
-        return sql1;
-    }
-
-    public SqlExecutorService setDataSource(DataSource dataSource) {
-        this.dataSource = dataSource;
-        return this;
-    }
 }
 }

+ 4 - 1
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/config/ConfigServiceImpl.java

@@ -3,6 +3,7 @@ package org.hsweb.web.service.impl.config;
 import org.hsweb.commons.StringUtils;
 import org.hsweb.commons.StringUtils;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.po.config.Config;
 import org.hsweb.web.bean.po.config.Config;
+import org.hsweb.web.bean.po.config.Config.Property;
 import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.hsweb.web.core.authorize.ExpressionScopeBean;
 import org.hsweb.web.dao.config.ConfigMapper;
 import org.hsweb.web.dao.config.ConfigMapper;
 import org.hsweb.web.service.config.ConfigService;
 import org.hsweb.web.service.config.ConfigService;
@@ -17,6 +18,8 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
 
 
+import static org.hsweb.web.bean.po.config.Config.Property.*;
+
 /**
 /**
  * 系统配置服务类
  * 系统配置服务类
  * Created by generator
  * Created by generator
@@ -38,7 +41,7 @@ public class ConfigServiceImpl extends AbstractServiceImpl<Config, String> imple
     @Override
     @Override
     @CacheEvict(value = CACHE_KEY, allEntries = true)
     @CacheEvict(value = CACHE_KEY, allEntries = true)
     public int update(Config data) {
     public int update(Config data) {
-        return configMapper.update(new UpdateParam<>(data).excludes("createDate").where("id", data.getId()));
+        return createUpdate(data).excludes(createDate).where(id, data.getId()).exec();
     }
     }
 
 
     @Override
     @Override

+ 9 - 7
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/datasource/DataSourceServiceImpl.java

@@ -39,6 +39,10 @@ import javax.annotation.Resource;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
+import static org.hsweb.web.bean.po.GenericPo.Property.id;
+import static org.hsweb.web.bean.po.datasource.DataSource.*;
+import static org.hsweb.web.bean.po.datasource.DataSource.Property.*;
+
 /**
 /**
  * 数据源服务类
  * 数据源服务类
  * Created by generator
  * Created by generator
@@ -96,7 +100,7 @@ public class DataSourceServiceImpl extends AbstractServiceImpl<DataSource, Strin
         data.setCreateDate(new Date());
         data.setCreateDate(new Date());
         data.setEnabled(1);
         data.setEnabled(1);
         tryValidPo(data);
         tryValidPo(data);
-        DataSource old = selectSingle(QueryParam.build().where("name", data.getName()).or("id", data.getId()));
+        DataSource old = createQuery().fromBean(data).where(name).or(id).single();
         if (old != null) throw new BusinessException("名称:" + data.getName() + "或id:" + data.getId() + "已存在");
         if (old != null) throw new BusinessException("名称:" + data.getName() + "或id:" + data.getId() + "已存在");
         return super.insert(data);
         return super.insert(data);
     }
     }
@@ -111,25 +115,23 @@ public class DataSourceServiceImpl extends AbstractServiceImpl<DataSource, Strin
     @CacheEvict(value = CACHE_NAME, key = "'id:'+#data.id")
     @CacheEvict(value = CACHE_NAME, key = "'id:'+#data.id")
     public int update(DataSource data) {
     public int update(DataSource data) {
         checkDynamicDataSourceSupport();
         checkDynamicDataSourceSupport();
-        DataSource old = selectSingle(QueryParam.build()
-                .where("name", data.getName())
-                .and("id$not", data.getId()));
+        DataSource old = createQuery().fromBean(data).where(name).and().not(id).single();
         if (old != null) throw new BusinessException("名称" + data.getName() + "已存在");
         if (old != null) throw new BusinessException("名称" + data.getName() + "已存在");
-        return getMapper().update(UpdateParam.build(data).excludes("createDate", "enabled").where("id", data.getId()));
+        return createUpdate(data).excludes(createDate, enabled).where(id, data.getId()).exec();
     }
     }
 
 
     @Override
     @Override
     @CacheEvict(value = CACHE_NAME, key = "'id:'+#id")
     @CacheEvict(value = CACHE_NAME, key = "'id:'+#id")
     public void enable(String id) {
     public void enable(String id) {
         checkDynamicDataSourceSupport();
         checkDynamicDataSourceSupport();
-        getMapper().update((UpdateParam) UpdateMapParam.build().set("enabled", 1).where("id", id));
+        createUpdate().set(enabled, 1).includes(enabled).where(DataSource.Property.id, id).exec();
     }
     }
 
 
     @Override
     @Override
     @CacheEvict(value = CACHE_NAME, key = "'id:'+#id")
     @CacheEvict(value = CACHE_NAME, key = "'id:'+#id")
     public void disable(String id) {
     public void disable(String id) {
         checkDynamicDataSourceSupport();
         checkDynamicDataSourceSupport();
-        getMapper().update((UpdateParam) UpdateMapParam.build().set("enabled", 0).where("id", id));
+        createUpdate().set(enabled, 0).includes(enabled).where(DataSource.Property.id, id).exec();
     }
     }
 
 
 
 

+ 53 - 89
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DefaultFormParser.java

@@ -4,14 +4,19 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.BeanUtils;
-import org.hsweb.ezorm.meta.FieldMetaData;
-import org.hsweb.ezorm.meta.TableMetaData;
-import org.hsweb.ezorm.meta.converter.ClobValueConverter;
-import org.hsweb.ezorm.meta.converter.DateTimeConverter;
-import org.hsweb.ezorm.meta.converter.JSONValueConverter;
-import org.hsweb.ezorm.run.simple.trigger.ScriptTraggerSupport;
+import org.hsweb.commons.StringUtils;
+import org.hsweb.expands.script.engine.DynamicScriptEngine;
+import org.hsweb.expands.script.engine.DynamicScriptEngineFactory;
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
+import org.hsweb.ezorm.rdb.meta.converter.ClobValueConverter;
+import org.hsweb.ezorm.rdb.meta.converter.DateTimeConverter;
+import org.hsweb.ezorm.rdb.meta.converter.JSONValueConverter;
+import org.hsweb.ezorm.rdb.render.dialect.Dialect;
+import org.hsweb.ezorm.rdb.simple.trigger.ScriptTraggerSupport;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.core.Install;
 import org.hsweb.web.core.Install;
+import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.hsweb.web.service.form.FormParser;
 import org.hsweb.web.service.form.FormParser;
 import org.jsoup.Jsoup;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Document;
@@ -20,98 +25,57 @@ import org.jsoup.select.Elements;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ReflectionUtils;
 import org.springframework.util.ReflectionUtils;
-import org.hsweb.commons.StringUtils;
-import org.hsweb.expands.script.engine.DynamicScriptEngine;
-import org.hsweb.expands.script.engine.DynamicScriptEngineFactory;
 
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 import java.sql.JDBCType;
 import java.sql.JDBCType;
 import java.util.*;
 import java.util.*;
 
 
-/**
- * Created by zhouhao on 16-4-20.
- */
 @Service
 @Service
 public class DefaultFormParser implements FormParser {
 public class DefaultFormParser implements FormParser {
 
 
     @Autowired(required = false)
     @Autowired(required = false)
     private List<FormParser.Listener> listeners;
     private List<FormParser.Listener> listeners;
 
 
-    public void initField(FieldMetaData fieldMetaData) {
-        if (fieldMetaData.getComment() == null)
-            fieldMetaData.setComment("");
-        String db = Install.getDatabaseType();
-        if (fieldMetaData.getDataType() == null) {
-            JDBCType jdbcType = fieldMetaData.getJdbcType();
-            if (jdbcType == null) throw new UnsupportedOperationException("请指定jdbcType或者dataType");
-            switch (jdbcType) {
-                case VARCHAR:
-                    String len = fieldMetaData.getProperty("data-type-len", "256").toString();
-                    if (db.equals("mysql")) {
-                        fieldMetaData.setDataType("varchar(" + len + ")");
-                    } else if (db.equals("oracle") || db.equals("h2")) {
-                        fieldMetaData.setDataType("varchar2(" + len + ")");
-                    }
-                    break;
-                case TINYINT:
-                    if (db.equals("mysql")) {
-                        fieldMetaData.setDataType("tinyint");
-                    } else if (db.equals("oracle") || db.equals("h2")) {
-                        fieldMetaData.setDataType("number(10)");
-                    }
-                case NUMERIC:
-                    len = fieldMetaData.getProperty("data-type-len", "32").toString();
-                    if (db.equals("mysql")) {
-                        fieldMetaData.setDataType((len.contains(",") ? "double" : "int") + "(" + len + ")");
-                    } else if (db.equals("oracle") || db.equals("h2")) {
-                        fieldMetaData.setDataType("number(" + len + ")");
-                    }
-                case DATE:
-                    if (db.equals("mysql")) {
-                        fieldMetaData.setDataType("datetime");
-                    } else if (db.equals("oracle") || db.equals("h2")) {
-                        fieldMetaData.setDataType("date");
-                    }
-                case CLOB:
-                    if (db.equals("mysql")) {
-                        fieldMetaData.setDataType("text");
-                    } else if (db.equals("oracle") || db.equals("h2")) {
-                        fieldMetaData.setDataType("clob");
-                    }
+    public void initField(RDBColumnMetaData column) {
+        Dialect dialect = DataSourceHolder.getActiveDatabaseType().getDialect();
+        if (column.getDataType() == null) {
+            if (column.getJdbcType() == null) {
+                throw new UnsupportedOperationException("请指定jdbcType或者dataType");
             }
             }
+            dialect.buildDataType(column);
         }
         }
-        if (fieldMetaData.getJdbcType() == null) {
-            String dataType = fieldMetaData.getDataType();
+        if (column.getJdbcType() == null) {
+            String dataType = column.getDataType();
             if (dataType != null) {
             if (dataType != null) {
                 if (dataType.contains("varchar")) {
                 if (dataType.contains("varchar")) {
-                    fieldMetaData.setJdbcType(JDBCType.VARCHAR);
-                    String className = fieldMetaData.getJavaType().getSimpleName();
+                    column.setJdbcType(JDBCType.VARCHAR);
+                    String className = column.getJavaType().getSimpleName();
                     if (!typeMapper.containsKey(className)) {
                     if (!typeMapper.containsKey(className)) {
-                        fieldMetaData.setValueConverter(new JSONValueConverter(fieldMetaData.getJavaType(), fieldMetaData.getValueConverter()));
+                        column.setValueConverter(new JSONValueConverter(column.getJavaType(), column.getValueConverter()));
                     }
                     }
                 } else if (dataType.contains("date")
                 } else if (dataType.contains("date")
                         || dataType.contains("timestamp")
                         || dataType.contains("timestamp")
                         || dataType.contains("datetime")) {
                         || dataType.contains("datetime")) {
-                    fieldMetaData.setJdbcType(JDBCType.DATE);
-                    String format = fieldMetaData.getProperty("date-format", "yyyy-MM-dd HH:mm:ss").toString();
-                    fieldMetaData.setValueConverter(new DateTimeConverter(format, fieldMetaData.getJavaType()));
+                    column.setJdbcType(JDBCType.DATE);
+                    String format = column.getProperty("date-format", "yyyy-MM-dd HH:mm:ss").toString();
+                    column.setValueConverter(new DateTimeConverter(format, column.getJavaType()));
                 } else if (dataType.contains("clob")) {
                 } else if (dataType.contains("clob")) {
-                    fieldMetaData.setJdbcType(JDBCType.CLOB);
-                    fieldMetaData.setValueConverter(new ClobValueConverter());
-                    String className = fieldMetaData.getJavaType().getSimpleName();
+                    column.setJdbcType(JDBCType.CLOB);
+                    column.setValueConverter(new ClobValueConverter());
+                    String className = column.getJavaType().getSimpleName();
                     if (!typeMapper.containsKey(className)) {
                     if (!typeMapper.containsKey(className)) {
-                        fieldMetaData.setValueConverter(new JSONValueConverter(fieldMetaData.getJavaType(), fieldMetaData.getValueConverter()));
+                        column.setValueConverter(new JSONValueConverter(column.getJavaType(), column.getValueConverter()));
                     }
                     }
                 } else if (dataType.contains("number") ||
                 } else if (dataType.contains("number") ||
                         dataType.contains("int") ||
                         dataType.contains("int") ||
                         dataType.contains("double") ||
                         dataType.contains("double") ||
                         dataType.contains("tinyint")) {
                         dataType.contains("tinyint")) {
-                    fieldMetaData.setJdbcType(JDBCType.NUMERIC);
+                    column.setJdbcType(JDBCType.NUMERIC);
                 } else {
                 } else {
-                    fieldMetaData.setJdbcType(JDBCType.VARCHAR);
-                    String className = fieldMetaData.getJavaType().getSimpleName();
+                    column.setJdbcType(JDBCType.VARCHAR);
+                    String className = column.getJavaType().getSimpleName();
                     if (!typeMapper.containsKey(className)) {
                     if (!typeMapper.containsKey(className)) {
-                        fieldMetaData.setValueConverter(new JSONValueConverter(fieldMetaData.getJavaType(), fieldMetaData.getValueConverter()));
+                        column.setValueConverter(new JSONValueConverter(column.getJavaType(), column.getValueConverter()));
                     }
                     }
                 }
                 }
             }
             }
@@ -119,21 +83,21 @@ public class DefaultFormParser implements FormParser {
     }
     }
 
 
     @Override
     @Override
-    public TableMetaData parse(Form form) {
+    public RDBTableMetaData parse(Form form) {
         DynamicScriptEngine scriptEngine = DynamicScriptEngineFactory.getEngine("groovy");
         DynamicScriptEngine scriptEngine = DynamicScriptEngineFactory.getEngine("groovy");
         String meta = form.getMeta();
         String meta = form.getMeta();
-        TableMetaData metaData = new TableMetaData();
+        RDBTableMetaData metaData = new RDBTableMetaData();
         metaData.setProperty("version", form.getRelease());
         metaData.setProperty("version", form.getRelease());
         metaData.setName(form.getName());
         metaData.setName(form.getName());
         metaData.setComment(form.getRemark());
         metaData.setComment(form.getRemark());
         JSONObject object = JSON.parseObject(meta);
         JSONObject object = JSON.parseObject(meta);
         int[] sortIndex = new int[1];
         int[] sortIndex = new int[1];
-        Map<String, FieldMetaData> tmp = new HashMap<>();
+        Map<String, RDBColumnMetaData> tmp = new HashMap<>();
         object.forEach((id, field) -> {
         object.forEach((id, field) -> {
-            FieldMetaData fieldMeta = new FieldMetaData();
-            fieldMeta.setProperty("field-id", id);
-            tmp.put(id, fieldMeta);
-            fieldMeta.setSortIndex(sortIndex[0]++);
+            RDBColumnMetaData columnMetaData = new RDBColumnMetaData();
+            columnMetaData.setProperty("field-id", id);
+            tmp.put(id, columnMetaData);
+            columnMetaData.setSortIndex(sortIndex[0]++);
             JSONArray obj = ((JSONArray) field);
             JSONArray obj = ((JSONArray) field);
             obj.forEach((defT) -> {
             obj.forEach((defT) -> {
                 JSONObject def = ((JSONObject) defT);
                 JSONObject def = ((JSONObject) defT);
@@ -174,14 +138,14 @@ public class DefaultFormParser implements FormParser {
                                 validatorList.add(validator);
                                 validatorList.add(validator);
                         });
                         });
                     }
                     }
-                    fieldMeta.setValidator(validatorList);
+                    columnMetaData.setValidator(validatorList);
                     return;
                     return;
                 }
                 }
-                Field ftmp = ReflectionUtils.findField(FieldMetaData.class, key);
+                Field ftmp = ReflectionUtils.findField(RDBColumnMetaData.class, key);
                 if (ftmp != null) {
                 if (ftmp != null) {
                     try {
                     try {
                         if ("javaType".equals(key)) value = mapperJavaType(value.toString());
                         if ("javaType".equals(key)) value = mapperJavaType(value.toString());
-                        BeanUtils.setProperty(fieldMeta, key, value);
+                        BeanUtils.setProperty(columnMetaData, key, value);
                     } catch (RuntimeException e) {
                     } catch (RuntimeException e) {
                         throw e;
                         throw e;
                     } catch (Exception e) {
                     } catch (Exception e) {
@@ -196,16 +160,16 @@ public class DefaultFormParser implements FormParser {
                         } catch (Throwable e) {
                         } catch (Throwable e) {
                         }
                         }
                     }
                     }
-                    fieldMeta.setProperty(key, value);
+                    columnMetaData.setProperty(key, value);
                 }
                 }
             });
             });
             //name为空的时候 不保存此字段
             //name为空的时候 不保存此字段
             if (!"main".equals(id)
             if (!"main".equals(id)
-                    && !StringUtils.isNullOrEmpty(fieldMeta.getName())) {
-                initField(fieldMeta);
-                if (StringUtils.isNullOrEmpty(fieldMeta.getAlias()))
-                    fieldMeta.setAlias(fieldMeta.getName());
-                metaData.addField(fieldMeta);
+                    && !StringUtils.isNullOrEmpty(columnMetaData.getName())) {
+                initField(columnMetaData);
+                if (StringUtils.isNullOrEmpty(columnMetaData.getAlias()))
+                    columnMetaData.setAlias(columnMetaData.getName());
+                metaData.addColumn(columnMetaData);
             }
             }
         });
         });
         if (listeners != null) {
         if (listeners != null) {
@@ -214,8 +178,8 @@ public class DefaultFormParser implements FormParser {
         Document document = Jsoup.parse(form.getHtml());
         Document document = Jsoup.parse(form.getHtml());
         Elements elements = document.select("[field-id]");
         Elements elements = document.select("[field-id]");
         for (int i = 0; i < elements.size(); i++) {
         for (int i = 0; i < elements.size(); i++) {
-            FieldMetaData metaData1 = tmp.get(elements.get(i).attr("field-id"));
-            if (metaData1 != null) metaData1.setSortIndex(i);
+            RDBColumnMetaData column = tmp.get(elements.get(i).attr("field-id"));
+            if (column != null) column.setSortIndex(i);
         }
         }
         return metaData;
         return metaData;
     }
     }
@@ -255,9 +219,9 @@ public class DefaultFormParser implements FormParser {
 
 
     @Override
     @Override
     public String parseHtml(Form form) {
     public String parseHtml(Form form) {
-        TableMetaData metaData = parse(form);
+        RDBTableMetaData metaData = parse(form);
         Element html = Jsoup.parse(form.getHtml());
         Element html = Jsoup.parse(form.getHtml());
-        metaData.getFields().forEach((field) -> {
+        metaData.getColumns().forEach((field) -> {
             String field_id = field.getProperty("field-id", "").toString();
             String field_id = field.getProperty("field-id", "").toString();
             if (!"".equals(field_id)) {
             if (!"".equals(field_id)) {
                 Elements elements = html.select("[field-id=\"" + field_id + "\"]");
                 Elements elements = html.select("[field-id=\"" + field_id + "\"]");

+ 45 - 54
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java

@@ -7,12 +7,15 @@ import org.hsweb.concurrent.lock.annotation.ReadLock;
 import org.hsweb.concurrent.lock.annotation.WriteLock;
 import org.hsweb.concurrent.lock.annotation.WriteLock;
 import org.hsweb.expands.office.excel.ExcelIO;
 import org.hsweb.expands.office.excel.ExcelIO;
 import org.hsweb.expands.office.excel.config.Header;
 import org.hsweb.expands.office.excel.config.Header;
-import org.hsweb.ezorm.meta.FieldMetaData;
-import org.hsweb.ezorm.meta.TableMetaData;
-import org.hsweb.ezorm.meta.expand.OptionConverter;
-import org.hsweb.ezorm.meta.expand.PropertyWrapper;
-import org.hsweb.ezorm.meta.parser.TableMetaParser;
-import org.hsweb.ezorm.run.*;
+import org.hsweb.ezorm.core.*;
+import org.hsweb.ezorm.rdb.RDBDatabase;
+import org.hsweb.ezorm.rdb.RDBQuery;
+import org.hsweb.ezorm.rdb.RDBTable;
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
+import org.hsweb.ezorm.rdb.meta.builder.TableBuilder;
+import org.hsweb.ezorm.rdb.meta.builder.simple.SimpleTableBuilder;
+import org.hsweb.ezorm.rdb.meta.parser.TableMetaParser;
 import org.hsweb.web.bean.common.DeleteParam;
 import org.hsweb.web.bean.common.DeleteParam;
 import org.hsweb.web.bean.common.PagerResult;
 import org.hsweb.web.bean.common.PagerResult;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.QueryParam;
@@ -38,7 +41,6 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStream;
-import java.sql.JDBCType;
 import java.sql.SQLException;
 import java.sql.SQLException;
 import java.util.*;
 import java.util.*;
 
 
@@ -55,7 +57,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     protected FormParser formParser;
     protected FormParser formParser;
 
 
     @Autowired
     @Autowired
-    protected Database database;
+    protected RDBDatabase database;
 
 
     @Resource
     @Resource
     protected FormService formService;
     protected FormService formService;
@@ -72,33 +74,22 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @Autowired(required = false)
     @Autowired(required = false)
     protected TableMetaParser tableMetaParser;
     protected TableMetaParser tableMetaParser;
 
 
-    protected void initDefaultField(TableMetaData metaData) {
-        String dataType;
-        switch (Install.getDatabaseType()) {
-            case "oracle":
-                dataType = "varchar2(32)";
-                break;
-            default:
-                dataType = "varchar(32)";
-        }
-        FieldMetaData id = new FieldMetaData("u_id", String.class, dataType, JDBCType.VARCHAR);
-        id.setComment("主键");
-        id.setProperty("read-only", true);
-        id.setProperty("not-null", true);
+    protected void initDefaultField(RDBTableMetaData metaData) {
+        metaData.setDatabaseMetaData(database.getMeta());
+        TableBuilder builder = new SimpleTableBuilder(metaData, database, null);
+        builder.addColumn().name("u_id").varchar(32).primaryKey().comment("主键").commit();
         metaData.setPrimaryKeys(new HashSet<>(Arrays.asList("u_id")));
         metaData.setPrimaryKeys(new HashSet<>(Arrays.asList("u_id")));
         metaData.setProperty("primaryKey", "u_id");
         metaData.setProperty("primaryKey", "u_id");
-        metaData.addField(id);
-
     }
     }
 
 
     @Override
     @Override
-    public Database getDefaultDatabase() {
+    public RDBDatabase getDefaultDatabase() {
         return database;
         return database;
     }
     }
 
 
     @Override
     @Override
-    public TableMetaData parseMeta(Form form) {
-        TableMetaData metaData = formParser.parse(form);
+    public RDBTableMetaData parseMeta(Form form) {
+        RDBTableMetaData metaData = formParser.parse(form);
         initDefaultField(metaData);
         initDefaultField(metaData);
         return metaData;
         return metaData;
     }
     }
@@ -107,10 +98,10 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @WriteLock
     @WriteLock
     @LockName(value = "'form.lock.'+#form.name", isExpression = true)
     @LockName(value = "'form.lock.'+#form.name", isExpression = true)
     public void deploy(Form form) throws SQLException {
     public void deploy(Form form) throws SQLException {
-        TableMetaData metaData = formParser.parse(form);
+        RDBTableMetaData metaData = formParser.parse(form);
         metaData.setProperty("version", form.getRevision());
         metaData.setProperty("version", form.getRevision());
         initDefaultField(metaData);
         initDefaultField(metaData);
-        TableMetaData lastDeployMetaData;
+        RDBTableMetaData lastDeployMetaData;
         if (tableMetaParser == null) {
         if (tableMetaParser == null) {
             History history = historyService.selectLastHistoryByType("form.deploy." + form.getName());
             History history = historyService.selectLastHistoryByType("form.deploy." + form.getName());
             Form lastDeploy = JSON.parseObject(history.getChangeAfter(), Form.class);
             Form lastDeploy = JSON.parseObject(history.getChangeAfter(), Form.class);
@@ -120,7 +111,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
             lastDeployMetaData = tableMetaParser.parse(form.getName());
             lastDeployMetaData = tableMetaParser.parse(form.getName());
         }
         }
         //首次部署
         //首次部署
-        if (lastDeployMetaData == null || lastDeployMetaData.getFields().isEmpty()) {
+        if (lastDeployMetaData == null || lastDeployMetaData.getColumns().isEmpty()) {
             try {
             try {
                 database.createTable(metaData);
                 database.createTable(metaData);
             } catch (Exception e) {
             } catch (Exception e) {
@@ -142,9 +133,9 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
         database.removeTable(form.getName());
         database.removeTable(form.getName());
     }
     }
 
 
-    public Table getTableByName(String name) {
+    public <T> RDBTable<T> getTableByName(String name) {
         try {
         try {
-            Table table = database.getTable(name);
+            RDBTable<T> table = database.getTable(name);
             if (table == null) {
             if (table == null) {
                 throw new NotFoundException("表单[" + name + "]不存在");
                 throw new NotFoundException("表单[" + name + "]不存在");
             }
             }
@@ -160,8 +151,8 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     public <T> PagerResult<T> selectPager(String name, QueryParam param) throws SQLException {
     public <T> PagerResult<T> selectPager(String name, QueryParam param) throws SQLException {
         PagerResult<T> result = new PagerResult<>();
         PagerResult<T> result = new PagerResult<>();
-        Table table = getTableByName(name);
-        Query query = table.createQuery();
+        RDBTable<T> table = getTableByName(name);
+        RDBQuery<T> query = table.createQuery();
         query.setParam(param);
         query.setParam(param);
         int total = query.total();
         int total = query.total();
         result.setTotal(total);
         result.setTotal(total);
@@ -180,8 +171,8 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     public <T> List<T> select(String name, QueryParam param) throws SQLException {
     public <T> List<T> select(String name, QueryParam param) throws SQLException {
-        Table table = getTableByName(name);
-        Query query = table.createQuery().setParam(param);
+        RDBTable<T> table = getTableByName(name);
+        RDBQuery<T> query = table.createQuery().setParam(param);
         return query.list();
         return query.list();
     }
     }
 
 
@@ -190,8 +181,8 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     public int total(String name, QueryParam param) throws SQLException {
     public int total(String name, QueryParam param) throws SQLException {
-        Table table = getTableByName(name);
-        Query query = table.createQuery().setParam(param);
+        RDBTable table = getTableByName(name);
+        RDBQuery query = table.createQuery().setParam(param);
         return query.total();
         return query.total();
     }
     }
 
 
@@ -199,7 +190,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @ReadLock
     @ReadLock
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     public String insert(String name, Map<String, Object> data) throws SQLException {
     public String insert(String name, Map<String, Object> data) throws SQLException {
-        Table table = getTableByName(name);
+        RDBTable table = getTableByName(name);
         String primaryKeyName = getPrimaryKeyName(name);
         String primaryKeyName = getPrimaryKeyName(name);
         String pk = GenericPo.createUID();
         String pk = GenericPo.createUID();
         data.put(primaryKeyName, pk);
         data.put(primaryKeyName, pk);
@@ -212,7 +203,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @ReadLock
     @ReadLock
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     public List<String> insert(String name, List<Map<String, Object>> dataList) throws SQLException {
     public List<String> insert(String name, List<Map<String, Object>> dataList) throws SQLException {
-        Table table = getTableByName(name);
+        RDBTable table = getTableByName(name);
         String primaryKeyName = getPrimaryKeyName(name);
         String primaryKeyName = getPrimaryKeyName(name);
         List<String> idList = new ArrayList<>();
         List<String> idList = new ArrayList<>();
         dataList.forEach(data -> {
         dataList.forEach(data -> {
@@ -248,7 +239,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     }
     }
 
 
     protected String getRepeatDataId(String name, Map<String, Object> data) {
     protected String getRepeatDataId(String name, Map<String, Object> data) {
-        Table table = getTableByName(name);
+        RDBTable table = getTableByName(name);
         if (dynamicFormDataValidator != null) {
         if (dynamicFormDataValidator != null) {
             for (DynamicFormDataValidator validator : dynamicFormDataValidator) {
             for (DynamicFormDataValidator validator : dynamicFormDataValidator) {
                 String id = validator.getRepeatDataId(table, data);
                 String id = validator.getRepeatDataId(table, data);
@@ -265,7 +256,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     public boolean deleteByPk(String name, String pk) throws SQLException {
     public boolean deleteByPk(String name, String pk) throws SQLException {
         String primaryKeyName = getPrimaryKeyName(name);
         String primaryKeyName = getPrimaryKeyName(name);
-        Table table = getTableByName(name);
+        RDBTable table = getTableByName(name);
         Delete delete = table.createDelete().where(primaryKeyName, pk);
         Delete delete = table.createDelete().where(primaryKeyName, pk);
         return delete.exec() == 1;
         return delete.exec() == 1;
     }
     }
@@ -274,7 +265,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @ReadLock
     @ReadLock
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     public int delete(String name, DeleteParam where) throws SQLException {
     public int delete(String name, DeleteParam where) throws SQLException {
-        Table table = getTableByName(name);
+        RDBTable table = getTableByName(name);
         Delete delete = table.createDelete();
         Delete delete = table.createDelete();
         delete.setParam(where);
         delete.setParam(where);
         return delete.exec();
         return delete.exec();
@@ -284,10 +275,10 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @ReadLock
     @ReadLock
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     public int updateByPk(String name, String pk, UpdateParam<Map<String, Object>> param) throws SQLException {
     public int updateByPk(String name, String pk, UpdateParam<Map<String, Object>> param) throws SQLException {
-        Table table = getTableByName(name);
+        RDBTable table = getTableByName(name);
         String pkName = getPrimaryKeyName(name);
         String pkName = getPrimaryKeyName(name);
         Update update = table.createUpdate().setParam(param);
         Update update = table.createUpdate().setParam(param);
-        param.getData().put(pkName, pk);
+        ((Map) param.getData()).put(pkName, pk);
         update.where(pkName, pk);
         update.where(pkName, pk);
         return update.exec();
         return update.exec();
     }
     }
@@ -296,7 +287,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @ReadLock
     @ReadLock
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     public int update(String name, UpdateParam<Map<String, Object>> param) throws SQLException {
     public int update(String name, UpdateParam<Map<String, Object>> param) throws SQLException {
-        Table table = getTableByName(name);
+        RDBTable table = getTableByName(name);
         Update update = table.createUpdate().setParam(param);
         Update update = table.createUpdate().setParam(param);
         return update.exec();
         return update.exec();
     }
     }
@@ -304,7 +295,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @ReadLock
     @ReadLock
     @LockName(value = "'form.lock.'+#tableName", isExpression = true)
     @LockName(value = "'form.lock.'+#tableName", isExpression = true)
     public String getPrimaryKeyName(String tableName) {
     public String getPrimaryKeyName(String tableName) {
-        Table table = getTableByName(tableName);
+        RDBTable table = getTableByName(tableName);
         return table.getMeta().getProperty("primaryKey", "u_id").toString();
         return table.getMeta().getProperty("primaryKey", "u_id").toString();
     }
     }
 
 
@@ -317,7 +308,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
         return query.single();
         return query.single();
     }
     }
 
 
-    protected void putExcelHeader(String fieldPrefix, FieldMetaData fieldMetaData, List<Header> headers) {
+    protected void putExcelHeader(String fieldPrefix, RDBColumnMetaData fieldMetaData, List<Header> headers) {
         if (fieldMetaData == null) return;
         if (fieldMetaData == null) return;
         PropertyWrapper valueWrapper = fieldMetaData.getProperty("export-excel", false);
         PropertyWrapper valueWrapper = fieldMetaData.getProperty("export-excel", false);
         if (fieldPrefix.length() > 0) fieldPrefix += ".";
         if (fieldPrefix.length() > 0) fieldPrefix += ".";
@@ -344,19 +335,19 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     public void exportExcel(String name, QueryParam param, OutputStream outputStream) throws Exception {
     public void exportExcel(String name, QueryParam param, OutputStream outputStream) throws Exception {
         List<Object> dataList = select(name, param);
         List<Object> dataList = select(name, param);
-        Table table = getTableByName(name);
-        TableMetaData metaData = table.getMeta();
+        RDBTable table = getTableByName(name);
+        RDBTableMetaData metaData = table.getMeta();
         List<Header> headers = new LinkedList<>();
         List<Header> headers = new LinkedList<>();
         Map<String, Object> sample = dataList.isEmpty() ? new HashMap<>() : (Map) dataList.get(0);
         Map<String, Object> sample = dataList.isEmpty() ? new HashMap<>() : (Map) dataList.get(0);
         sample.forEach((key, value) -> {
         sample.forEach((key, value) -> {
             if (value instanceof Map) {
             if (value instanceof Map) {
                 ((Map) value).forEach((k, v) -> {
                 ((Map) value).forEach((k, v) -> {
                     String fieldName = key + "." + k;
                     String fieldName = key + "." + k;
-                    FieldMetaData field = metaData.findFieldByName(fieldName);
+                    RDBColumnMetaData field = metaData.findColumn(fieldName);
                     putExcelHeader(fieldName, field, headers);
                     putExcelHeader(fieldName, field, headers);
                 });
                 });
             } else {
             } else {
-                FieldMetaData field = metaData.findFieldByName(key);
+                RDBColumnMetaData field = metaData.findColumn(key);
                 putExcelHeader("", field, headers);
                 putExcelHeader("", field, headers);
             }
             }
         });
         });
@@ -377,7 +368,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
     @ReadLock
     @ReadLock
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     @LockName(value = "'form.lock.'+#name", isExpression = true)
     public Map<String, Object> importExcel(String name, InputStream inputStream) {
     public Map<String, Object> importExcel(String name, InputStream inputStream) {
-        Table table = getTableByName(name);
+        RDBTable<Map<String, Object>> table = getTableByName(name);
         Map<String, Object> result = new HashMap<>();
         Map<String, Object> result = new HashMap<>();
         long startTime = System.currentTimeMillis();
         long startTime = System.currentTimeMillis();
         List<Map<String, Object>> excelData;
         List<Map<String, Object>> excelData;
@@ -388,8 +379,8 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
         }
         }
         List<Map<String, Object>> dataList = new LinkedList<>();
         List<Map<String, Object>> dataList = new LinkedList<>();
         Map<String, String> headerMapper = new HashMap<>();
         Map<String, String> headerMapper = new HashMap<>();
-        TableMetaData metaData = table.getMeta();
-        metaData.getFields().forEach(fieldMetaData -> {
+        RDBTableMetaData metaData = table.getMeta();
+        metaData.getColumns().forEach(fieldMetaData -> {
             PropertyWrapper valueWrapper = fieldMetaData.getProperty("importExcel", true);
             PropertyWrapper valueWrapper = fieldMetaData.getProperty("importExcel", true);
             if (valueWrapper.isTrue()) {
             if (valueWrapper.isTrue()) {
                 String title = fieldMetaData.getProperty("excel-header").getValue();
                 String title = fieldMetaData.getProperty("excel-header").getValue();

+ 10 - 10
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java

@@ -5,6 +5,7 @@ import org.hsweb.web.bean.common.InsertParam;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.form.Form;
+import org.hsweb.web.bean.po.form.Form.Property;
 import org.hsweb.web.bean.po.history.History;
 import org.hsweb.web.bean.po.history.History;
 import org.hsweb.web.dao.form.FormMapper;
 import org.hsweb.web.dao.form.FormMapper;
 import org.hsweb.web.service.form.DynamicFormService;
 import org.hsweb.web.service.form.DynamicFormService;
@@ -127,17 +128,18 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
     @Override
     @Override
     @Cacheable(value = CACHE_KEY, key = "#name+':'+#version")
     @Cacheable(value = CACHE_KEY, key = "#name+':'+#version")
     public Form selectByVersion(String name, int version) {
     public Form selectByVersion(String name, int version) {
-        QueryParam param = QueryParam.build()
-                .where("name", name).where("version", version);
-        List<Form> formList = formMapper.selectLatestList(param);
+        List<Form> formList = this.createQuery()
+                .where(Property.name, name).and(Property.version, version)
+                .list(formMapper::selectLatestList);
         return formList.size() > 0 ? formList.get(0) : null;
         return formList.size() > 0 ? formList.get(0) : null;
     }
     }
 
 
     @Override
     @Override
     public Form selectLatest(String name) {
     public Form selectLatest(String name) {
-        QueryParam param = QueryParam.build()
-                .where("name", name).orderBy("version").asc();
-        List<Form> formList = formMapper.selectLatestList(param);
+        List<Form> formList = this.createQuery()
+                .where(Property.name, name)
+                .orderByAsc(Property.version)
+                .list(formMapper::selectLatestList);
         return formList.size() > 0 ? formList.get(0) : null;
         return formList.size() > 0 ? formList.get(0) : null;
     }
     }
 
 
@@ -161,7 +163,7 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
         old.setUsing(true);
         old.setUsing(true);
         dynamicFormService.deploy(old);
         dynamicFormService.deploy(old);
         old.setRelease(old.getRevision());//发布修订版本
         old.setRelease(old.getRevision());//发布修订版本
-        getMapper().update(UpdateParam.build(old).includes("using", "release").where("id", old.getId()));
+        createUpdate(old).includes(Property.using, Property.release).where(Property.id, old.getId()).exec();
         //加入发布历史记录
         //加入发布历史记录
         History history = History.newInstance("form.deploy." + old.getName());
         History history = History.newInstance("form.deploy." + old.getName());
         history.setPrimaryKeyName("id");
         history.setPrimaryKeyName("id");
@@ -184,9 +186,7 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
         assertNotNull(old, "表单不存在");
         assertNotNull(old, "表单不存在");
         dynamicFormService.unDeploy(old);
         dynamicFormService.unDeploy(old);
         old.setUsing(false);
         old.setUsing(false);
-        UpdateParam param = new UpdateParam<>(old);
-        param.includes("using").where("id", old.getId());
-        getMapper().update(param);
+        createUpdate(old).includes(Property.using).where(Property.id, old.getId()).exec();
     }
     }
 
 
     @Override
     @Override

+ 4 - 4
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidator.java

@@ -2,8 +2,8 @@ package org.hsweb.web.service.impl.form.validator;
 
 
 import org.apache.commons.beanutils.BeanMap;
 import org.apache.commons.beanutils.BeanMap;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.BeanUtils;
-import org.hsweb.ezorm.exception.ValidationException;
-import org.hsweb.ezorm.meta.expand.Validator;
+import org.hsweb.ezorm.core.Validator;
+import org.hsweb.ezorm.rdb.exception.ValidationException;
 import org.hsweb.web.bean.validator.ValidateResults;
 import org.hsweb.web.bean.validator.ValidateResults;
 import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.core.exception.BusinessException;
 import org.springframework.util.ReflectionUtils;
 import org.springframework.util.ReflectionUtils;
@@ -23,7 +23,7 @@ public class GroovyDycBeanValidator implements Validator {
 
 
     protected static DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine("groovy");
     protected static DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine("groovy");
 
 
-    private String className;
+    private String                     className;
     private javax.validation.Validator hibernateValidator;
     private javax.validation.Validator hibernateValidator;
 
 
 
 
@@ -41,7 +41,7 @@ public class GroovyDycBeanValidator implements Validator {
             if (operation == Operation.INSERT) {
             if (operation == Operation.INSERT) {
                 data.forEach((key, value) -> {
                 data.forEach((key, value) -> {
                     try {
                     try {
-                        BeanUtils.setProperty(validatorTarget , (String) key,value );
+                        BeanUtils.setProperty(validatorTarget, (String) key, value);
                     } catch (Exception e) {
                     } catch (Exception e) {
                     }
                     }
                 });
                 });

+ 11 - 6
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidatorFactory.java

@@ -1,9 +1,13 @@
 package org.hsweb.web.service.impl.form.validator;
 package org.hsweb.web.service.impl.form.validator;
 
 
-import org.hsweb.ezorm.meta.FieldMetaData;
-import org.hsweb.ezorm.meta.TableMetaData;
-import org.hsweb.ezorm.meta.expand.Validator;
-import org.hsweb.ezorm.meta.expand.ValidatorFactory;
+import org.hsweb.ezorm.core.Validator;
+import org.hsweb.ezorm.core.ValidatorFactory;
+import org.hsweb.ezorm.core.meta.ColumnMetaData;
+import org.hsweb.ezorm.core.meta.TableMetaData;
+import org.hsweb.ezorm.core.param.Column;
+import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
 import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.core.exception.BusinessException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
@@ -13,6 +17,7 @@ import org.hsweb.expands.script.engine.DynamicScriptEngineFactory;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
+
 @Component
 @Component
 public class GroovyDycBeanValidatorFactory implements ValidatorFactory {
 public class GroovyDycBeanValidatorFactory implements ValidatorFactory {
 
 
@@ -65,7 +70,7 @@ public class GroovyDycBeanValidatorFactory implements ValidatorFactory {
         }
         }
         script.append("public class ").append(metaData.getName()).append("{\n");
         script.append("public class ").append(metaData.getName()).append("{\n");
         boolean hasValidator = false;
         boolean hasValidator = false;
-        for (FieldMetaData fieldMetaData : metaData.getFields()) {
+        for (ColumnMetaData fieldMetaData : metaData.getColumns()) {
             String typeName = simpleType.get(fieldMetaData.getJavaType());
             String typeName = simpleType.get(fieldMetaData.getJavaType());
             if (typeName == null) typeName = fieldMetaData.getJavaType().getName();
             if (typeName == null) typeName = fieldMetaData.getJavaType().getName();
             if (fieldMetaData.getValidator() == null || fieldMetaData.getValidator().isEmpty()) continue;
             if (fieldMetaData.getValidator() == null || fieldMetaData.getValidator().isEmpty()) continue;
@@ -79,7 +84,7 @@ public class GroovyDycBeanValidatorFactory implements ValidatorFactory {
         }
         }
         //没有配置验证器
         //没有配置验证器
         if (!hasValidator) return null;
         if (!hasValidator) return null;
-        for (FieldMetaData fieldMetaData : metaData.getFields()) {
+        for (ColumnMetaData fieldMetaData : metaData.getColumns()) {
             String typeName = simpleType.get(fieldMetaData.getJavaType());
             String typeName = simpleType.get(fieldMetaData.getJavaType());
             if (typeName == null) typeName = fieldMetaData.getJavaType().getName();
             if (typeName == null) typeName = fieldMetaData.getJavaType().getName();
             if (fieldMetaData.getValidator() == null || fieldMetaData.getValidator().isEmpty()) continue;
             if (fieldMetaData.getValidator() == null || fieldMetaData.getValidator().isEmpty()) continue;

+ 6 - 9
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/history/HistoryServiceImpl.java

@@ -1,6 +1,5 @@
 package org.hsweb.web.service.impl.history;
 package org.hsweb.web.service.impl.history;
 
 
-import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.po.history.History;
 import org.hsweb.web.bean.po.history.History;
 import org.hsweb.web.dao.history.HistoryMapper;
 import org.hsweb.web.dao.history.HistoryMapper;
 import org.hsweb.web.service.history.HistoryService;
 import org.hsweb.web.service.history.HistoryService;
@@ -8,7 +7,8 @@ import org.hsweb.web.service.impl.AbstractServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.util.List;
+
+import static org.hsweb.web.bean.po.history.History.Property;
 
 
 /**
 /**
  * Created by zhouhao on 16-4-22.
  * Created by zhouhao on 16-4-22.
@@ -25,12 +25,9 @@ public class HistoryServiceImpl extends AbstractServiceImpl<History, String> imp
 
 
     @Override
     @Override
     public History selectLastHistoryByType(String type) {
     public History selectLastHistoryByType(String type) {
-        QueryParam queryParam = new QueryParam()
-                .where("type", type)
-                .doPaging(0, 1)
-                .orderBy("createDate").desc();
-        List<History> history = historyMapper.select(queryParam);
-        if (history.size() == 1) return history.get(0);
-        return null;
+        return createQuery()
+                .where(Property.type, type)
+                .orderByDesc(Property.createDate)
+                .single();
     }
     }
 }
 }

+ 0 - 0
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleMetaServiceImpl.java


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott