From 4e24d1ba34f9e8182db448892148f658c7b406c1 Mon Sep 17 00:00:00 2001 From: zhouhao Date: Fri, 25 Nov 2016 17:12:17 +0800 Subject: [PATCH 01/24] =?UTF-8?q?=E4=BC=98=E5=8C=96orm=E3=80=82=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=B0=E7=89=88easyorm=E3=80=82=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9B=B4=E6=96=B9=E4=BE=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +- doc/2.API.md | 53 ++++ hsweb-web-bean/pom.xml | 4 +- .../hsweb/web/bean/common/DeleteParam.java | 2 +- .../hsweb/web/bean/common/InsertParam.java | 2 +- .../org/hsweb/web/bean/common/QueryParam.java | 13 +- .../java/org/hsweb/web/bean/common/Sort.java | 7 - .../org/hsweb/web/bean/common/SqlParam.java | 4 +- .../hsweb/web/bean/common/UpdateMapParam.java | 2 +- .../hsweb/web/bean/common/UpdateParam.java | 2 +- .../java/org/hsweb/web/bean/po/GenericPo.java | 19 +- .../web/bean/po/classified/Classified.java | 42 ++- .../org/hsweb/web/bean/po/config/Config.java | 25 +- .../web/bean/po/datasource/DataSource.java | 45 +++ .../org/hsweb/web/bean/po/draft/Draft.java | 32 ++- .../java/org/hsweb/web/bean/po/form/Form.java | 67 ++++- .../hsweb/web/bean/po/history/History.java | 47 +++- .../hsweb/web/bean/po/logger/LoggerInfo.java | 97 ++++++- .../org/hsweb/web/bean/po/module/Module.java | 38 ++- .../hsweb/web/bean/po/module/ModuleMeta.java | 37 ++- .../org/hsweb/web/bean/po/plan/QueryPlan.java | 35 +++ .../web/bean/po/profile/UserProfile.java | 22 +- .../hsweb/web/bean/po/quartz/QuartzJob.java | 36 +++ .../web/bean/po/quartz/QuartzJobHistory.java | 30 ++ .../hsweb/web/bean/po/resource/Resources.java | 52 +++- .../java/org/hsweb/web/bean/po/role/Role.java | 27 +- .../hsweb/web/bean/po/role/RoleModule.java | 27 +- .../org/hsweb/web/bean/po/role/UserRole.java | 18 +- .../web/bean/po/script/DynamicScript.java | 28 +- .../web/bean/po/system/SystemVersion.java | 42 ++- .../hsweb/web/bean/po/template/Template.java | 72 ++++- .../java/org/hsweb/web/bean/po/user/User.java | 51 +++- .../hsweb-web-concurrent-cache/pom.xml | 2 +- .../hsweb-web-concurrent-lock/pom.xml | 2 +- hsweb-web-concurrent/pom.xml | 2 +- hsweb-web-controller/pom.xml | 2 +- .../ExceptionHandlerConfiguration.java | 12 +- .../RestControllerExceptionTranslator.java | 6 +- .../form/DynamicFormController.java | 23 +- .../login/UserModuleController.java | 28 +- .../system/DatabaseManagerController.java | 22 +- .../web/controller/user/UserController.java | 16 +- hsweb-web-core/pom.xml | 4 +- .../main/java/org/hsweb/web/core/Install.java | 6 +- .../web/core/datasource/DatabaseType.java | 18 +- hsweb-web-dao/hsweb-web-dao-api/pom.xml | 2 +- .../org/hsweb/web/dao/form/FormMapper.java | 2 +- .../web/dao/template/TemplateMapper.java | 2 +- hsweb-web-dao/hsweb-web-dao-mybatis/README.md | 2 +- hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml | 22 +- .../web/mybatis/MyBatisAutoConfiguration.java | 6 +- .../builder/DefaultSqlParamBuilder.java | 44 +-- .../mybatis/builder/EasyOrmSqlBuilder.java | 266 ++++++++++++++++++ .../web/mybatis/builder/InsertSqlBuilder.java | 17 ++ .../mybatis/builder/MysqlParamBuilder.java | 7 +- .../hsweb/web/mybatis/builder/SqlBuilder.java | 22 +- .../web/mybatis/builder/UpdateSqlBuilder.java | 22 ++ .../hsweb/web/mybatis/plgins/pager/Pager.java | 65 +++++ .../web/mybatis/plgins/pager/PagerHelper.java | 13 - .../plgins/pager/PagerInterceptor.java | 40 ++- .../plgins/pager/dialect/H2PagerHelper.java | 15 - .../pager/dialect/MysqlPagerHelper.java | 29 -- .../pager/dialect/OraclePagerHelper.java | 34 --- .../hsweb/web/mybatis/utils/SqlAppender.java | 3 +- .../impl/mybatis/mapper/basic/BasicMapper.xml | 64 +++-- .../hsweb/web/mybatis/SpringApplication.java | 5 +- .../web/mybatis/user/UserMapperTest.java | 23 +- .../src/test/resources/application.yml | 2 +- hsweb-web-dao/pom.xml | 2 +- hsweb-web-datasource/pom.xml | 2 +- .../DynamicDataSourceSqlExecutorService.java | 65 ++--- .../hsweb-web-oauth2-controller/pom.xml | 2 +- .../hsweb-web-oauth2-core/pom.xml | 2 +- .../hsweb-web-oauth2-mybatis/pom.xml | 2 +- .../hsweb-web-oauth2-service-simple/pom.xml | 16 +- .../service/OAuth2ClientServiceImpl.java | 1 - .../web/oauth2/service/OAuth2ServiceImpl.java | 3 +- .../hsweb-web-oauth2-simple/pom.xml | 2 +- hsweb-web-oauth2/pom.xml | 2 +- .../hsweb-web-service-api/pom.xml | 2 +- .../org/hsweb/web/service/GenericService.java | 49 +++- .../form/DynamicFormDataValidator.java | 5 +- .../web/service/form/DynamicFormService.java | 8 +- .../hsweb/web/service/form/FormParser.java | 10 +- .../system/DataBaseManagerService.java | 9 +- .../hsweb-web-service-simple/pom.xml | 4 +- .../web/service/impl/AbstractServiceImpl.java | 18 ++ .../impl/DataBaseAutoConfiguration.java | 49 ++-- .../impl/DatabaseMetaDataFactoryBean.java | 46 --- .../impl/FormDeployContextLoaderListener.java | 13 +- .../impl/basic/SqlExecutorService.java | 82 +----- .../impl/config/ConfigServiceImpl.java | 5 +- .../datasource/DataSourceServiceImpl.java | 16 +- .../service/impl/form/DefaultFormParser.java | 142 ++++------ .../impl/form/DynamicFormServiceImpl.java | 99 +++---- .../service/impl/form/FormServiceImpl.java | 20 +- .../validator/GroovyDycBeanValidator.java | 8 +- .../GroovyDycBeanValidatorFactory.java | 17 +- .../impl/history/HistoryServiceImpl.java | 15 +- .../impl/module/ModuleMetaServiceImpl.java | 28 +- .../impl/plan/QueryPlanServiceImpl.java | 5 +- .../impl/profile/UserProfileServiceImpl.java | 17 +- .../quartz/QuartzJobHistoryServiceImpl.java | 18 +- .../impl/quartz/QuartzJobServiceImpl.java | 13 +- .../impl/script/DynamicScriptServiceImpl.java | 16 +- .../system/DataBaseManagerServiceImpl.java | 61 ++-- .../impl/template/TemplateServiceImpl.java | 38 +-- .../service/impl/user/UserServiceImpl.java | 23 +- hsweb-web-service/pom.xml | 2 +- hsweb-web-websocket/pom.xml | 2 +- hsweb-web-workflow/pom.xml | 2 +- .../model/ActivityModelController.java | 8 +- pom.xml | 7 +- 113 files changed, 1940 insertions(+), 847 deletions(-) create mode 100644 doc/2.API.md delete mode 100644 hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/Sort.java create mode 100644 hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/EasyOrmSqlBuilder.java create mode 100644 hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/InsertSqlBuilder.java create mode 100644 hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/UpdateSqlBuilder.java create mode 100644 hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/Pager.java delete mode 100644 hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerHelper.java delete mode 100644 hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/H2PagerHelper.java delete mode 100644 hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/MysqlPagerHelper.java delete mode 100644 hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/OraclePagerHelper.java delete mode 100644 hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DatabaseMetaDataFactoryBean.java diff --git a/README.md b/README.md index e1c57c078..ccc9b3873 100644 --- a/README.md +++ b/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) [![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. 8. websocket支持. 9. 定时调度支持,可在页面配置定时任务,编写任务脚本执行。 +10. **强大的dsl查询方式,复杂条件一句生成** ### 演示 1. 示例:[demo.hsweb.me](http://demo.hsweb.me) diff --git a/doc/2.API.md b/doc/2.API.md new file mode 100644 index 000000000..5f972cdbb --- /dev/null +++ b/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(); +``` \ No newline at end of file diff --git a/hsweb-web-bean/pom.xml b/hsweb-web-bean/pom.xml index 70b106014..66db6973f 100644 --- a/hsweb-web-bean/pom.xml +++ b/hsweb-web-bean/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 hsweb-web-bean @@ -18,7 +18,7 @@ org.hsweb - hsweb-easy-orm + hsweb-easy-orm-rdb org.hsweb diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/DeleteParam.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/DeleteParam.java index 9d47e8744..8f6a615c2 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/DeleteParam.java +++ b/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. */ -public class DeleteParam extends SqlParam { +public class DeleteParam extends SqlParam { public static DeleteParam build() { return new DeleteParam(); } diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/InsertParam.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/InsertParam.java index df0c27fdf..22cc61812 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/InsertParam.java +++ b/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. */ -public class InsertParam extends org.hsweb.ezorm.param.InsertParam { +public class InsertParam extends org.hsweb.ezorm.core.param.InsertParam { public InsertParam() { } diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/QueryParam.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/QueryParam.java index fb45c0ed3..5d27847cf 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/QueryParam.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/QueryParam.java @@ -1,20 +1,17 @@ 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.util.HashMap; import java.util.List; import java.util.Map; -/** - * Created by 浩 on 2016-01-16 0016. - */ -public class QueryParam extends org.hsweb.ezorm.param.QueryParam implements Serializable { - private static final long serialVersionUID = 7941767360194797891L; - private Map param = new HashMap<>(); +public class QueryParam extends org.hsweb.ezorm.core.param.QueryParam implements Serializable { + private static final long serialVersionUID = 7941767360194797891L; + private Map param = new HashMap<>(); public QueryParam noPaging() { setPaging(false); diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/Sort.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/Sort.java deleted file mode 100644 index 8cd4d6afd..000000000 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/Sort.java +++ /dev/null @@ -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 { -} diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/SqlParam.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/SqlParam.java index 6d88aaeae..0a40686a3 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/SqlParam.java +++ b/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. */ -public class SqlParam extends org.hsweb.ezorm.param.SqlParam { +public class SqlParam extends org.hsweb.ezorm.core.param.Param { protected Map params = new HashMap<>(); @@ -26,6 +26,6 @@ public class SqlParam extends org.hsweb.ezorm.param.SqlParam } public static SqlParam build() { - return new SqlParam<>(); + return new SqlParam(); } } diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateMapParam.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateMapParam.java index 258ef5b90..92e3ee6b2 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateMapParam.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateMapParam.java @@ -16,7 +16,7 @@ public class UpdateMapParam extends UpdateParam> { } public UpdateMapParam set(String key, Object value) { - this.getData().put(key, value); + ((Map) this.getData()).put(key, value); return this; } diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateParam.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateParam.java index 3a4e553e6..f78de41e5 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/common/UpdateParam.java +++ b/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. */ -public class UpdateParam extends org.hsweb.ezorm.param.UpdateParam> { +public class UpdateParam extends org.hsweb.ezorm.core.param.UpdateParam { public UpdateParam() { } diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/GenericPo.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/GenericPo.java index 9eaa7047e..5ae94f328 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/GenericPo.java +++ b/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.web.bean.po.module.Module; import java.io.Serializable; import java.lang.reflect.Field; @@ -78,8 +79,24 @@ public class GenericPo implements Serializable, Cloneable { public Object clone() throws CloneNotSupportedException { Field[] fields = this.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { - + } return super.clone(); } + + public interface Property { + /** + * 主键 + * + * @see GenericPo#id + */ + String id = "id"; + + /** + * 其他属性 + * + * @see GenericPo#properties + */ + String properties = "properties"; + } } diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/classified/Classified.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/classified/Classified.java index 98d144305..c017fbf5b 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/classified/Classified.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/classified/Classified.java @@ -151,4 +151,44 @@ public class Classified extends GenericPo { public void setSortIndex(int 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/config/Config.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/config/Config.java index 4afe8bc53..2dbf2f614 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/config/Config.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/config/Config.java @@ -165,4 +165,27 @@ public class Config extends GenericPo { List> array = (List) JSON.parseArray(getContent(), Map.class); 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/datasource/DataSource.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/datasource/DataSource.java index dccacc7b3..f3e25a2d0 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/datasource/DataSource.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/datasource/DataSource.java @@ -154,4 +154,49 @@ public class DataSource extends GenericPo { builder.append(driver).append(url).append(username).append(password).append(enabled); 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"; + } } \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/draft/Draft.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/draft/Draft.java index 9a6ba0cb6..5ebfdf9e0 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/draft/Draft.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/draft/Draft.java @@ -54,4 +54,34 @@ public class Draft extends GenericPo { public void setKey(String 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/form/Form.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/form/Form.java index f80e432a7..4cd3aafef 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/form/Form.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/form/Form.java @@ -189,4 +189,69 @@ public class Form extends GenericPo { public void setClassifiedId(String 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/history/History.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/history/History.java index a5398ff07..2d3a9974f 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/history/History.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/history/History.java @@ -131,4 +131,49 @@ public class History extends GenericPo { history.setCreatorId("Sys"); 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/logger/LoggerInfo.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/logger/LoggerInfo.java index 3e65cb9e4..4c2ad27a5 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/logger/LoggerInfo.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/logger/LoggerInfo.java @@ -246,4 +246,99 @@ public class LoggerInfo extends GenericPo { public void setCacheKey(String 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/Module.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/Module.java index cc6209cb8..bf5200518 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/Module.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/Module.java @@ -196,4 +196,40 @@ public class Module extends GenericPo implements Comparable { 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"; + } + +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/ModuleMeta.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/ModuleMeta.java index 52751f217..309329cc9 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/ModuleMeta.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/ModuleMeta.java @@ -81,4 +81,39 @@ public class ModuleMeta extends GenericPo { builder.append(status); 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/plan/QueryPlan.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/plan/QueryPlan.java index 223e69841..960e863cd 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/plan/QueryPlan.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/plan/QueryPlan.java @@ -134,4 +134,39 @@ public class QueryPlan extends GenericPo { public void setCreateDate(java.util.Date 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"; + } } \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/profile/UserProfile.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/profile/UserProfile.java index a86c81c07..15b8869d0 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/profile/UserProfile.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/profile/UserProfile.java @@ -39,4 +39,24 @@ public class UserProfile extends GenericPo { public void setContent(String 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJob.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJob.java index d5d80fcc7..1e627bd3a 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJob.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJob.java @@ -183,4 +183,40 @@ public class QuartzJob extends GenericPo { public void setType(byte 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"; + } } \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJobHistory.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJobHistory.java index 34345da3f..5b2243552 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJobHistory.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/quartz/QuartzJobHistory.java @@ -163,4 +163,34 @@ public class QuartzJobHistory extends GenericPo { } } } + + + +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"; + } } \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/resource/Resources.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/resource/Resources.java index 56c5fa31d..79bea5156 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/resource/Resources.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/resource/Resources.java @@ -180,4 +180,54 @@ public class Resources extends GenericPo { 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/Role.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/Role.java index 11d8dfac0..abd19dbee 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/Role.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/Role.java @@ -91,4 +91,29 @@ public class Role extends GenericPo { public void setType(String 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/RoleModule.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/RoleModule.java index ddb6c525d..c056541ed 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/RoleModule.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/RoleModule.java @@ -80,4 +80,29 @@ public class RoleModule extends GenericPo { public void setActions(List 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/UserRole.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/UserRole.java index cd14c72d4..d37801d8f 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/UserRole.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/role/UserRole.java @@ -66,4 +66,20 @@ public class UserRole extends GenericPo { public void setRole(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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/script/DynamicScript.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/script/DynamicScript.java index 9eaca703e..656b8fe8a 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/script/DynamicScript.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/script/DynamicScript.java @@ -131,4 +131,30 @@ public class DynamicScript extends GenericPo { 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/system/SystemVersion.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/system/SystemVersion.java index 6414767ab..966836b9f 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/system/SystemVersion.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/system/SystemVersion.java @@ -99,17 +99,35 @@ public class SystemVersion implements Comparable { } } - 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"; } -} +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/template/Template.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/template/Template.java index ce34a27c4..7456ddc77 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/template/Template.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/template/Template.java @@ -135,4 +135,74 @@ public class Template extends GenericPo { public void setUsing(boolean 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java index b00418aa8..a9a2a70a0 100644 --- a/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java +++ b/hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java @@ -299,4 +299,53 @@ public class User extends GenericPo { public void setRoleInfo(Map> 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"; + } +} \ No newline at end of file diff --git a/hsweb-web-concurrent/hsweb-web-concurrent-cache/pom.xml b/hsweb-web-concurrent/hsweb-web-concurrent-cache/pom.xml index 9d3f24090..e91dda441 100644 --- a/hsweb-web-concurrent/hsweb-web-concurrent-cache/pom.xml +++ b/hsweb-web-concurrent/hsweb-web-concurrent-cache/pom.xml @@ -5,7 +5,7 @@ hsweb-web-concurrent org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 hsweb-web-concurrent-cache diff --git a/hsweb-web-concurrent/hsweb-web-concurrent-lock/pom.xml b/hsweb-web-concurrent/hsweb-web-concurrent-lock/pom.xml index e05658f71..e6350df30 100644 --- a/hsweb-web-concurrent/hsweb-web-concurrent-lock/pom.xml +++ b/hsweb-web-concurrent/hsweb-web-concurrent-lock/pom.xml @@ -5,7 +5,7 @@ hsweb-web-concurrent org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 hsweb-web-concurrent-lock diff --git a/hsweb-web-concurrent/pom.xml b/hsweb-web-concurrent/pom.xml index 0feaa50b6..607adb13a 100644 --- a/hsweb-web-concurrent/pom.xml +++ b/hsweb-web-concurrent/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 pom diff --git a/hsweb-web-controller/pom.xml b/hsweb-web-controller/pom.xml index 6240ffc33..7a3038947 100644 --- a/hsweb-web-controller/pom.xml +++ b/hsweb-web-controller/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 hsweb-web-controller diff --git a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/ExceptionHandlerConfiguration.java b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/ExceptionHandlerConfiguration.java index b0c4b6c97..daa44ee2c 100644 --- a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/ExceptionHandlerConfiguration.java +++ b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/ExceptionHandlerConfiguration.java @@ -1,6 +1,7 @@ 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.ExceptionHandler; import org.hsweb.web.core.message.ResponseMessage; @@ -8,23 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; 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.Configuration; 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.ServletRequestAttributes; import org.springframework.web.servlet.ModelAndView; -import org.hsweb.commons.ClassUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.util.List; import java.util.Map; diff --git a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/RestControllerExceptionTranslator.java b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/RestControllerExceptionTranslator.java index 0ff56adba..5041cb3f5 100644 --- a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/RestControllerExceptionTranslator.java +++ b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/RestControllerExceptionTranslator.java @@ -1,7 +1,9 @@ package org.hsweb.web.controller; import com.alibaba.fastjson.JSON; +import org.hsweb.ezorm.rdb.exception.*; import org.hsweb.web.core.exception.*; +import org.hsweb.web.core.exception.ValidationException; import org.hsweb.web.core.message.ResponseMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,10 +27,10 @@ public class RestControllerExceptionTranslator { 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) @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); } diff --git a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java index d3f4b284b..dec6cbae0 100644 --- a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java +++ b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/DynamicFormController.java @@ -16,9 +16,9 @@ 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.UpdateMapParam; 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.FormService; import org.hsweb.web.service.resource.FileService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -171,9 +170,9 @@ public class DynamicFormController { * @param name 表单名称 * @param data 数据 * @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) @AccessLogger("新增数据") @@ -191,9 +190,9 @@ public class DynamicFormController { * @param primaryKey 数据主键值 * @param data 数据 * @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) @AccessLogger("更新数据") @@ -293,8 +292,8 @@ public class DynamicFormController { @PathVariable("data") String data, @PathVariable("type") String type) { 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(); OptionConverter converter = fieldMetaData.getOptionConverter(); if (converter == null) return ResponseMessage.ok(data); diff --git a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/login/UserModuleController.java b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/login/UserModuleController.java index b746ee260..145d60ac9 100644 --- a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/login/UserModuleController.java +++ b/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.utils.WebUtil; 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.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -43,6 +43,24 @@ public class UserModuleController { @Resource public ModuleService moduleService; + @RequestMapping(value = "/loginUser", produces = {MediaType.APPLICATION_JSON_VALUE}) + @ResponseBody + @Authorize + public ResponseMessage loginUserInfo() { + User user = WebUtil.getLoginUser(); + Map> modules = user.getRoleInfo() + .entrySet() + .stream() + .collect(Collectors.toMap(entry -> entry.getKey().getId(), entry -> entry.getValue())); + Map 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 @Authorize @AccessLogger("用户模块信息") @@ -53,9 +71,7 @@ public class UserModuleController { User user = WebUtil.getLoginUser(); List modules; 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() .filter(module -> { Object obj = module.getOptionalMap().get("M"); diff --git a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/system/DatabaseManagerController.java b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/system/DatabaseManagerController.java index bc0b64bca..d2d4a0afc 100644 --- a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/system/DatabaseManagerController.java +++ b/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.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.core.authorize.annotation.Authorize; import org.hsweb.web.core.datasource.DynamicDataSource; @@ -54,8 +54,8 @@ public class DatabaseManagerController { @AccessLogger("获取所有表结构") public ResponseMessage showTables() throws SQLException { 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(); } @@ -85,8 +85,8 @@ public class DatabaseManagerController { checkDynamicDataSourceSupport(); DynamicDataSource.use(dataSourceId); 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(); } finally { 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.setComment(jsonObject.getString("comment")); JSONArray jsonArray = jsonObject.getJSONArray("fields"); 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; } diff --git a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/user/UserController.java b/hsweb-web-controller/src/main/java/org/hsweb/web/controller/user/UserController.java index 22c4ae46f..0608ba66a 100644 --- a/hsweb-web-controller/src/main/java/org/hsweb/web/controller/user/UserController.java +++ b/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 static org.hsweb.web.bean.po.user.User.Property.*; + /** * 后台管理用户控制器,继承自GenericController,使用rest+json * Created by generator 2015-8-26 10:35:57 @@ -34,22 +36,22 @@ public class UserController extends GenericController { } @Override - public ResponseMessage list(QueryParam param) { - param.excludes("password"); + public ResponseMessage list(QueryParam param) { + param.excludes(password); return super.list(param) - .exclude(User.class, "password", "modules", "userRoles") + .exclude(User.class, password, modules, userRoles) .onlyData(); } @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("禁用") @RequestMapping(value = "/{id}/disable", method = RequestMethod.PUT) @Authorize(action = "disable") - public ResponseMessage disable(@PathVariable("id") String id) { + public ResponseMessage disable(@PathVariable("id") String id) { getService().disableUser(id); return ResponseMessage.ok(); } @@ -57,7 +59,7 @@ public class UserController extends GenericController { @AccessLogger("启用") @RequestMapping(value = "/{id}/enable", method = RequestMethod.PUT) @Authorize(action = "enable") - public ResponseMessage enable(@PathVariable("id") String id) { + public ResponseMessage enable(@PathVariable("id") String id) { getService().enableUser(id); return ResponseMessage.ok(); } diff --git a/hsweb-web-core/pom.xml b/hsweb-web-core/pom.xml index b0332cf6a..88f2c2419 100644 --- a/hsweb-web-core/pom.xml +++ b/hsweb-web-core/pom.xml @@ -5,7 +5,7 @@ hsweb-framework org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 hsweb-web-core @@ -37,7 +37,7 @@ org.hsweb - hsweb-easy-orm + hsweb-easy-orm-rdb org.hsweb diff --git a/hsweb-web-core/src/main/java/org/hsweb/web/core/Install.java b/hsweb-web-core/src/main/java/org/hsweb/web/core/Install.java index 75f86d4f2..e4727b7c8 100644 --- a/hsweb-web-core/src/main/java/org/hsweb/web/core/Install.java +++ b/hsweb-web-core/src/main/java/org/hsweb/web/core/Install.java @@ -1,9 +1,9 @@ package org.hsweb.web.core; 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.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; diff --git a/hsweb-web-core/src/main/java/org/hsweb/web/core/datasource/DatabaseType.java b/hsweb-web-core/src/main/java/org/hsweb/web/core/datasource/DatabaseType.java index 391b49e83..ff0f2e13f 100644 --- a/hsweb-web-core/src/main/java/org/hsweb/web/core/datasource/DatabaseType.java +++ b/hsweb-web-core/src/main/java/org/hsweb/web/core/datasource/DatabaseType.java @@ -16,19 +16,21 @@ package org.hsweb.web.core.datasource; +import org.hsweb.ezorm.rdb.render.dialect.Dialect; import org.springframework.util.Assert; import org.springframework.util.StringUtils; 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.testQuery = testQuery; this.xaDataSourceClassName = xaDataSourceClassName; + this.dialect=dialect; } private final String testQuery; @@ -36,7 +38,7 @@ public enum DatabaseType { private final String driverClassName; private final String xaDataSourceClassName; - + private final Dialect dialect; public String getDriverClassName() { return driverClassName; } @@ -49,6 +51,10 @@ public enum DatabaseType { return testQuery; } + public Dialect getDialect() { + return dialect; + } + public static DatabaseType fromJdbcUrl(String url) { if (StringUtils.hasLength(url)) { Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'"); diff --git a/hsweb-web-dao/hsweb-web-dao-api/pom.xml b/hsweb-web-dao/hsweb-web-dao-api/pom.xml index 4e6f4bc21..29dccc4ae 100644 --- a/hsweb-web-dao/hsweb-web-dao-api/pom.xml +++ b/hsweb-web-dao/hsweb-web-dao-api/pom.xml @@ -5,7 +5,7 @@ hsweb-web-dao org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 hsweb-web-dao-api diff --git a/hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/form/FormMapper.java b/hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/form/FormMapper.java index 5f4d32773..3fb59fa27 100644 --- a/hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/form/FormMapper.java +++ b/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; -import org.hsweb.web.bean.common.QueryParam; +import org.hsweb.ezorm.core.param.QueryParam; import org.hsweb.web.dao.GenericMapper; import org.hsweb.web.bean.po.form.Form; diff --git a/hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/template/TemplateMapper.java b/hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/template/TemplateMapper.java index 9834a37d3..3e0a7f80d 100644 --- a/hsweb-web-dao/hsweb-web-dao-api/src/main/java/org/hsweb/web/dao/template/TemplateMapper.java +++ b/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; -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.dao.GenericMapper; diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/README.md b/hsweb-web-dao/hsweb-web-dao-mybatis/README.md index 23830a9e3..41ceed998 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/README.md +++ b/hsweb-web-dao/hsweb-web-dao-mybatis/README.md @@ -10,7 +10,7 @@ org.hsweb hsweb-web-dao-mybatis - 2.1-SNAPSHOT + 2.2-SNAPSHOT ``` diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml b/hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml index 28e22b23a..563d01258 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml +++ b/hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml @@ -5,19 +5,12 @@ hsweb-web-dao org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 hsweb-web-dao-mybatis - - 3.3.2 - 1.2.3 - 1.0.5 - - - org.springframework.boot @@ -30,7 +23,16 @@ 1.0.26 test - + + ch.qos.logback + logback-classic + test + + + com.h2database + h2 + test + org.hsweb hsweb-web-dao-api @@ -56,7 +58,7 @@ org.mybatis.spring.boot mybatis-spring-boot-starter - 1.0.2 + 1.1.1 diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/MyBatisAutoConfiguration.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/MyBatisAutoConfiguration.java index 7e456f950..f40270836 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/MyBatisAutoConfiguration.java +++ b/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") public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); + if (properties.isDynamicDatasource()) factory.setSqlSessionFactoryBuilder(new DynamicDataSourceSqlSessionFactoryBuilder()); + factory.setDataSource(dataSource); factory.setVfs(SpringBootVFS.class); - if (StringUtils.hasText(this.properties.getConfig())) { + if (StringUtils.hasText(this.properties.getConfigLocation())) { factory.setConfigLocation(this.resourceLoader.getResource(this.properties - .getConfig())); + .getConfigLocation())); } if (this.interceptors != null && this.interceptors.length > 0) { factory.setPlugins(this.interceptors); diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java index bdbd526a5..670837d9f 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java +++ b/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.hsweb.commons.DateTimeUtils; 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.QueryParam; import org.hsweb.web.bean.common.UpdateParam; @@ -19,9 +21,7 @@ import java.sql.JDBCType; import java.sql.SQLException; import java.util.*; -/** - * Created by zhouhao on 16-5-9. - */ +@Deprecated public class DefaultSqlParamBuilder { public Dialect getDialect() { @@ -73,23 +73,23 @@ public class DefaultSqlParamBuilder { public KeyWordMapper getKeyWordMapper(String type) { return (paramKey, tableName, term, jdbcType) -> { - String termField = term.getField(); + String termField = term.getColumn(); if (termField.contains(".")) { String[] tmp = termField.split("[.]"); tableName = tmp[0]; termField = tmp[1]; } - FieldMetaData field = new FieldMetaData(); + RDBColumnMetaData field = new RDBColumnMetaData(); field.setName(termField); field.setJdbcType(jdbcType); - return getDialect().wrapperWhere(paramKey, term, field, tableName); + return getDialect().buildCondition(paramKey, term, field, tableName).toString(); }; } protected Map createConfig(String resultMapId) { ResultMap resultMaps = ResultMapsUtils.getResultMap(resultMapId); Map fieldConfig = new HashMap<>(); - List resultMappings=new ArrayList<>(resultMaps.getResultMappings()); + List resultMappings = new ArrayList<>(resultMaps.getResultMappings()); resultMappings.addAll(resultMaps.getIdResultMappings()); resultMappings.forEach(resultMapping -> { if (resultMapping.getNestedQueryId() == null) { @@ -161,7 +161,7 @@ public class DefaultSqlParamBuilder { 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 fieldConfig = createConfig(resultMapId); if (param == null) return "*"; Map propertyMapper = getPropertyMapper(fieldConfig, param); @@ -219,9 +219,9 @@ public class DefaultSqlParamBuilder { tmp.setSorts(param.getSorts()); Map propertyMapper = getPropertyMapper(fieldConfig, tmp); if (tmp.getSorts().isEmpty()) return ""; - Set sorts = new LinkedHashSet<>(); + Set sorts = new LinkedHashSet<>(); param.getSorts().forEach(sort -> { - String fieldName = sort.getField(); + String fieldName = sort.getName(); if (StringUtils.isNullOrEmpty(fieldName)) return; if (fieldName.contains(".")) fieldName = fieldName.split("[.]")[1]; @@ -229,7 +229,7 @@ public class DefaultSqlParamBuilder { if (propertyMapper.get(fieldName) == null) { for (Map.Entry entry : propertyMapper.entrySet()) { if (entry.getValue().equals(fieldName)) { - sort.setField(entry.getKey()); + sort.setName(entry.getKey()); } } } @@ -239,17 +239,17 @@ public class DefaultSqlParamBuilder { if (sorts.isEmpty()) return ""; String sql = sorts.stream() .map(sort -> { - String fieldName = sort.getField(); + String fieldName = sort.getName(); if (fieldName.contains(".")) fieldName = fieldName.split("[.]")[1]; 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(); return " order by ".concat(sql); } - public Map getPropertyMapper(Map fieldConfig, org.hsweb.ezorm.param.SqlParam param) { + public Map getPropertyMapper(Map fieldConfig, Param param) { Set includes = param.getIncludes(), excludes = param.getExcludes(); boolean includesIsEmpty = includes.isEmpty(), @@ -306,11 +306,11 @@ public class DefaultSqlParamBuilder { int index = 0; String prefixTmp = StringUtils.concat(prefix, StringUtils.isNullOrEmpty(prefix) ? "" : "."); 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; //是空条件,但是无嵌套 @@ -318,7 +318,7 @@ public class DefaultSqlParamBuilder { //用于sql预编译的参数名 prefix = StringUtils.concat(prefixTmp, "terms[", index++, "]"); //JDBC类型 - JDBCType jdbcType = getFieldJDBCType(term.getField(), fieldConfig); + JDBCType jdbcType = getFieldJDBCType(term.getColumn(), fieldConfig); //转换参数的值 term.setValue(transformationValue(jdbcType, term.getValue())); //添加类型,and 或者 or diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/EasyOrmSqlBuilder.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/EasyOrmSqlBuilder.java new file mode 100644 index 000000000..29812650c --- /dev/null +++ b/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 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> metaCache = new ConcurrentHashMap>() { + @Override + public Map get(Object key) { + Map 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 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 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 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 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 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 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 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)); + } + } +} diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/InsertSqlBuilder.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/InsertSqlBuilder.java new file mode 100644 index 000000000..499aad056 --- /dev/null +++ b/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(), "}"); + } +} diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/MysqlParamBuilder.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/MysqlParamBuilder.java index fd4f8dbef..3705381a1 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/MysqlParamBuilder.java +++ b/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; -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 { private static MysqlParamBuilder instance = new MysqlParamBuilder(); diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/SqlBuilder.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/SqlBuilder.java index f23f820d4..cab2cadc1 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/SqlBuilder.java +++ b/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; -import org.hsweb.web.core.datasource.DataSourceHolder; -import org.hsweb.web.core.datasource.DatabaseType; - /** * @author zhouhao */ @@ -26,15 +23,16 @@ public class SqlBuilder { private static boolean dynamic; 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) { diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/UpdateSqlBuilder.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/UpdateSqlBuilder.java new file mode 100644 index 000000000..79b29f87a --- /dev/null +++ b/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(), "}"); + } +} diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/Pager.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/Pager.java new file mode 100644 index 000000000..bb027cd6f --- /dev/null +++ b/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()); + } + } +} diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerHelper.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerHelper.java deleted file mode 100644 index 550a4386b..000000000 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerHelper.java +++ /dev/null @@ -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); -} diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerInterceptor.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerInterceptor.java index 070ede8f4..cf4fcc23b 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/PagerInterceptor.java +++ b/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.statement.StatementHandler; import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; import org.apache.ibatis.plugin.*; import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.SystemMetaObject; @@ -10,12 +11,14 @@ import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import org.hsweb.web.bean.common.QueryParam; import org.hsweb.web.core.datasource.DataSourceHolder; +import org.hsweb.web.mybatis.builder.EasyOrmSqlBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Properties; @@ -23,10 +26,6 @@ import java.util.Properties; RowBounds.class, ResultHandler.class})}) @Component public class PagerInterceptor implements Interceptor { - protected Map pagerHelperBase = new HashMap<>(); - - @Autowired - private ApplicationContext context; @Override public Object intercept(Invocation target) throws Throwable { @@ -39,15 +38,22 @@ public class PagerInterceptor implements Interceptor { StatementHandler statementHandler = (StatementHandler) target; MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler); 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); } @@ -55,14 +61,4 @@ public class PagerInterceptor implements Interceptor { @Override public void setProperties(Properties properties) { } - - @PostConstruct - public void init() { - Map helperMap = context.getBeansOfType(PagerHelper.class); - helperMap.forEach((name, helper) -> pagerHelperBase.put(helper.getDialect(), helper)); - } - - public String getDialect() { - return DataSourceHolder.getDefaultDatabaseType().name(); - } } \ No newline at end of file diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/H2PagerHelper.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/H2PagerHelper.java deleted file mode 100644 index 166e25211..000000000 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/H2PagerHelper.java +++ /dev/null @@ -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"; - } -} diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/MysqlPagerHelper.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/MysqlPagerHelper.java deleted file mode 100644 index 42d25ec8e..000000000 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/MysqlPagerHelper.java +++ /dev/null @@ -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"; - } -} diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/OraclePagerHelper.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/OraclePagerHelper.java deleted file mode 100644 index ea5b2447d..000000000 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/plgins/pager/dialect/OraclePagerHelper.java +++ /dev/null @@ -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"; - } -} diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/utils/SqlAppender.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/utils/SqlAppender.java index 6178917b4..f3348d72b 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/utils/SqlAppender.java +++ b/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; /** - * Created by zhouhao on 16-5-9. + * @see org.hsweb.ezorm.rdb.render.SqlAppender + * @deprecated */ public class SqlAppender extends LinkedList { diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/basic/BasicMapper.xml b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/basic/BasicMapper.xml index 386f563ab..75beb7e85 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/basic/BasicMapper.xml +++ b/hsweb-web-dao/hsweb-web-dao-mybatis/src/main/resources/org/hsweb/web/dao/impl/mybatis/mapper/basic/BasicMapper.xml @@ -16,7 +16,7 @@ - ${@org.hsweb.web.mybatis.builder.SqlBuilder@current().buildUpdateFields(resultMapId,#this['_parameter'])} + ${@org.hsweb.web.mybatis.builder.SqlBuilder@current().buildUpdateFields(resultMapId,tableName,#this['_parameter'])} @@ -27,48 +27,56 @@ - select - - from ${tableName} - - - - + + select + + from ${tableName} + + + + + - delete from ${tableName} - - - - 1=2 - - + + delete from ${tableName} + + + + 1=2 + + + - 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'])} - update ${tableName} - - - - - u_id=#{data.id} - - + + update ${tableName} + + + + + u_id=#{data.id} + + + - select count(0) as "total" from ${tableName} - - - + + select count(0) as total from ${tableName} + + + + diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/SpringApplication.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/SpringApplication.java index 6a749bfe3..ab99535e1 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/SpringApplication.java +++ b/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; -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.DatabaseType; 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.Configuration; import org.springframework.jdbc.datasource.DataSourceUtils; -import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; import java.sql.Connection; diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/user/UserMapperTest.java b/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/user/UserMapperTest.java index 40e6db98a..a9a595660 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/java/org/hsweb/web/mybatis/user/UserMapperTest.java +++ b/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; +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.QueryParam; +import org.hsweb.web.bean.common.UpdateParam; 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.mybatis.AbstractTestCase; +import org.hsweb.web.mybatis.plgins.pager.Pager; import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import java.util.Date; +import static org.hsweb.ezorm.rdb.render.dialect.Dialect.TermTypeMapper.sql; + /** * @author zhouhao */ @@ -35,6 +43,9 @@ public class UserMapperTest extends AbstractTestCase { @Autowired private UserMapper userMapper; + @Autowired + protected FormMapper formMapper; + @Test public void testInsert() { User user = new User(); @@ -43,11 +54,21 @@ public class UserMapperTest extends AbstractTestCase { user.setName("test"); user.setCreateDate(new Date()); int i = userMapper.insert(InsertParam.build(user)); + userMapper.update(UpdateParam.build(user)); + userMapper.delete(DeleteParam.build().where("id", "111")); Assert.assertEquals(i, 1); } @Test 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(); } } diff --git a/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/resources/application.yml b/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/resources/application.yml index 9b05aa203..a3e80d2f3 100644 --- a/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/resources/application.yml +++ b/hsweb-web-dao/hsweb-web-dao-mybatis/src/test/resources/application.yml @@ -7,4 +7,4 @@ spring: host: 127.0.0.1 port: 6379 mybatis: - config: classpath:mybatis-config.xml \ No newline at end of file + configLocation: classpath:mybatis-config.xml \ No newline at end of file diff --git a/hsweb-web-dao/pom.xml b/hsweb-web-dao/pom.xml index 337b2c775..fecf71696 100644 --- a/hsweb-web-dao/pom.xml +++ b/hsweb-web-dao/pom.xml @@ -21,7 +21,7 @@ hsweb-framework org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 pom diff --git a/hsweb-web-datasource/pom.xml b/hsweb-web-datasource/pom.xml index 0dc487ea2..1dd8374f1 100644 --- a/hsweb-web-datasource/pom.xml +++ b/hsweb-web-datasource/pom.xml @@ -21,7 +21,7 @@ hsweb-framework org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 diff --git a/hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicDataSourceSqlExecutorService.java b/hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicDataSourceSqlExecutorService.java index 6366459b7..7e5434e25 100644 --- a/hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicDataSourceSqlExecutorService.java +++ b/hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicDataSourceSqlExecutorService.java @@ -16,11 +16,11 @@ 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.datasource.DynamicDataSource; import org.springframework.jdbc.datasource.DataSourceUtils; @@ -65,59 +65,34 @@ public class DynamicDataSourceSqlExecutorService extends AbstractJdbcSqlExecutor @Transactional(readOnly = true) public List> list(SQL sql) throws SQLException { - List> data = list(sql, new SimpleMapWrapper()); - return data; + return super.list(sql); } @Transactional(readOnly = true) - public Map single(SQL sql) throws Exception { - Map data = single(sql, new SimpleMapWrapper()); - return data; + public Map single(SQL sql) throws SQLException { + return super.single(sql); } @Transactional(readOnly = true) - public List> list(String sql) throws Exception { - List> data = list(create(sql), new SimpleMapWrapper()); - return data; + public List> list(String sql) throws SQLException { + return super.list(sql); } @Transactional(readOnly = true) - public List> list(String sql, Map param) throws Exception { - List> data = list(create(sql, param), new SimpleMapWrapper()); - return data; + public List> list(String sql, Object param) throws SQLException { + return super.list(sql, param); } @Transactional(readOnly = true) - public Map single(String sql) throws Exception { - Map data = single(create(sql)); - return data; + public Map single(String sql) throws SQLException { + return super.single(sql); } @Transactional(readOnly = true) - public Map single(String sql, Map param) throws Exception { - Map data = single(create(sql, param)); - return data; + public Map single(String sql, Object param) throws SQLException { + return super.single(sql, param); } - @Transactional - public int update(String sql, Map 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 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 { @@ -130,12 +105,4 @@ public class DynamicDataSourceSqlExecutorService extends AbstractJdbcSqlExecutor super.exec(sql); } - public SQL create(String sql) { - return new SimpleSQL(sql); - } - - public SQL create(String sql, Map param) { - SimpleSQL sql1 = new SimpleSQL(sql, param); - return sql1; - } } diff --git a/hsweb-web-oauth2/hsweb-web-oauth2-controller/pom.xml b/hsweb-web-oauth2/hsweb-web-oauth2-controller/pom.xml index 56e1a9430..a1820dbe1 100644 --- a/hsweb-web-oauth2/hsweb-web-oauth2-controller/pom.xml +++ b/hsweb-web-oauth2/hsweb-web-oauth2-controller/pom.xml @@ -21,7 +21,7 @@ hsweb-web-oauth2 org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 diff --git a/hsweb-web-oauth2/hsweb-web-oauth2-core/pom.xml b/hsweb-web-oauth2/hsweb-web-oauth2-core/pom.xml index fdfd1157a..d1e8049a0 100644 --- a/hsweb-web-oauth2/hsweb-web-oauth2-core/pom.xml +++ b/hsweb-web-oauth2/hsweb-web-oauth2-core/pom.xml @@ -21,7 +21,7 @@ hsweb-web-oauth2 org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 diff --git a/hsweb-web-oauth2/hsweb-web-oauth2-mybatis/pom.xml b/hsweb-web-oauth2/hsweb-web-oauth2-mybatis/pom.xml index 6f79a070a..bd6fd0f6e 100644 --- a/hsweb-web-oauth2/hsweb-web-oauth2-mybatis/pom.xml +++ b/hsweb-web-oauth2/hsweb-web-oauth2-mybatis/pom.xml @@ -21,7 +21,7 @@ hsweb-web-oauth2 org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 diff --git a/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/pom.xml b/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/pom.xml index 9f5e9c1ad..6bba1ddb0 100644 --- a/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/pom.xml +++ b/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/pom.xml @@ -21,7 +21,7 @@ hsweb-web-oauth2 org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 @@ -36,5 +36,19 @@ org.hsweb hsweb-web-service-simple + + org.springframework + spring-context-support + compile + + + org.springframework.boot + spring-boot-starter-jdbc + compile + + + org.hsweb + hsweb-web-core + \ No newline at end of file diff --git a/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ClientServiceImpl.java b/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ClientServiceImpl.java index 044b24293..0f42fb598 100644 --- a/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ClientServiceImpl.java +++ b/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.UpdateParam; 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.OAuth2ClientMapper; import org.hsweb.web.oauth2.po.OAuth2Access; diff --git a/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ServiceImpl.java b/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ServiceImpl.java index fcdc1dc47..17968dfee 100644 --- a/hsweb-web-oauth2/hsweb-web-oauth2-service-simple/src/main/java/org/hsweb/web/oauth2/service/OAuth2ServiceImpl.java +++ b/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.po.user.User; 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.oauth2.dao.OAuth2AccessMapper; import org.hsweb.web.oauth2.exception.AccessTimeoutException; @@ -96,7 +95,7 @@ public class OAuth2ServiceImpl implements OAuth2Service { } @Override - @Transactional(noRollbackFor = AccessTimeoutException.class) + @Transactional(noRollbackFor = {AccessTimeoutException.class, AuthorizeException.class}) public User getUserByAccessToken(String accessToken) { OAuth2Access auth2Access = null; Cache cache = null; diff --git a/hsweb-web-oauth2/hsweb-web-oauth2-simple/pom.xml b/hsweb-web-oauth2/hsweb-web-oauth2-simple/pom.xml index 4efdd5da9..d93cdfa09 100644 --- a/hsweb-web-oauth2/hsweb-web-oauth2-simple/pom.xml +++ b/hsweb-web-oauth2/hsweb-web-oauth2-simple/pom.xml @@ -21,7 +21,7 @@ hsweb-web-oauth2 org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 diff --git a/hsweb-web-oauth2/pom.xml b/hsweb-web-oauth2/pom.xml index e0f536aa8..baf041c97 100644 --- a/hsweb-web-oauth2/pom.xml +++ b/hsweb-web-oauth2/pom.xml @@ -21,7 +21,7 @@ hsweb-framework org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 diff --git a/hsweb-web-service/hsweb-web-service-api/pom.xml b/hsweb-web-service/hsweb-web-service-api/pom.xml index db38a8ed0..69c38cc10 100644 --- a/hsweb-web-service/hsweb-web-service-api/pom.xml +++ b/hsweb-web-service/hsweb-web-service-api/pom.xml @@ -5,7 +5,7 @@ hsweb-web-service org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 hsweb-web-service-api diff --git a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/GenericService.java b/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/GenericService.java index 1b2fe3efd..cae3aa6d0 100644 --- a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/GenericService.java +++ b/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; -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; @@ -117,4 +122,44 @@ public interface GenericService { else return list.get(0); } + default Update> createUpdate(GenericMapper mapper) { + Update> update = new Update(new UpdateParam(new HashMap<>())); + update.setExecutor(mapper::update); + return update; + } + + default Delete createDelete(GenericMapper mapper) { + Delete update = new Delete(); + update.setParam(new DeleteParam()); + update.setExecutor(param -> mapper.delete(((DeleteParam) param))); + return update; + } + + default Delete createDelete(Delete.Executor executor) { + Delete update = new Delete(); + update.setParam(new DeleteParam()); + update.setExecutor(param -> executor.doExecute(((DeleteParam) param))); + return update; + } + + default Query createQuery() { + Query query = new Query<>(new QueryParam()); + query.setListExecutor(this::select); + query.setTotalExecutor(this::total); + query.setSingleExecutor(this::selectSingle); + return query; + } + + default Query createQuery(GenericMapper mapper) { + Query query = new Query<>(new QueryParam()); + query.setListExecutor(mapper::select); + query.setTotalExecutor(mapper::total); + query.setSingleExecutor((param) -> { + param.doPaging(0, 1); + List list = mapper.select(param); + if (null == list || list.size() == 0) return null; + else return list.get(0); + }); + return query; + } } diff --git a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormDataValidator.java b/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormDataValidator.java index 6ee74257b..ba7abf8dd 100644 --- a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormDataValidator.java +++ b/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; -import org.hsweb.ezorm.run.Table; + +import org.hsweb.ezorm.rdb.RDBTable; import java.util.Map; public interface DynamicFormDataValidator { - String getRepeatDataId(Table table, Map data); + String getRepeatDataId(RDBTable table, Map data); } diff --git a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormService.java b/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormService.java index 2af6429bc..ebafb04ef 100644 --- a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/DynamicFormService.java +++ b/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; -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.po.form.Form; @@ -16,9 +16,9 @@ import java.util.Map; */ public interface DynamicFormService { - Database getDefaultDatabase(); + RDBDatabase getDefaultDatabase(); - TableMetaData parseMeta(Form form); + RDBTableMetaData parseMeta(Form form); void deploy(Form form) throws SQLException; diff --git a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/FormParser.java b/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/FormParser.java index a5653c71b..844d31cfc 100644 --- a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/FormParser.java +++ b/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; -import org.hsweb.ezorm.meta.TableMetaData; +import org.hsweb.ezorm.rdb.meta.RDBTableMetaData; import org.hsweb.web.bean.po.form.Form; -import javax.xml.bind.Marshaller; -/** - * Created by zhouhao on 16-4-20. - */ public interface FormParser { - TableMetaData parse(Form form); + RDBTableMetaData parse(Form form); String parseHtml(Form form); interface Listener { - void afterParse(TableMetaData tableMetaData); + void afterParse(RDBTableMetaData tableMetaData); } } diff --git a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/system/DataBaseManagerService.java b/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/system/DataBaseManagerService.java index a391cea3c..7bfbd93ca 100644 --- a/hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/system/DataBaseManagerService.java +++ b/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; -import org.hsweb.ezorm.meta.TableMetaData; + +import org.hsweb.ezorm.rdb.meta.RDBTableMetaData; import java.sql.SQLException; import java.util.List; @@ -19,11 +20,11 @@ public interface DataBaseManagerService { * * @return 表名集合 */ - List getTableList() throws SQLException; + List getTableList() throws SQLException; List> execSql(List 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; } diff --git a/hsweb-web-service/hsweb-web-service-simple/pom.xml b/hsweb-web-service/hsweb-web-service-simple/pom.xml index 3892ee6d7..f02181394 100644 --- a/hsweb-web-service/hsweb-web-service-simple/pom.xml +++ b/hsweb-web-service/hsweb-web-service-simple/pom.xml @@ -5,7 +5,7 @@ hsweb-web-service org.hsweb - 2.1-SNAPSHOT + 2.2-SNAPSHOT 4.0.0 @@ -97,7 +97,7 @@ org.hsweb - hsweb-easy-orm + hsweb-easy-orm-rdb diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/AbstractServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/AbstractServiceImpl.java index 233f96099..b3d51627a 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/AbstractServiceImpl.java +++ b/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; +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.po.GenericPo; import org.hsweb.web.bean.validator.ValidateResults; @@ -160,4 +163,19 @@ public abstract class AbstractServiceImpl implements GenericService> createUpdate() { + return createUpdate(getMapper()); + } + + public Update> createUpdate(Po data) { + Update> update = createUpdate(); + update.getParam().setData(data); + return update; + } + + public Delete createDelete() { + return createDelete(getMapper()); + } + } diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DataBaseAutoConfiguration.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DataBaseAutoConfiguration.java index 13b845533..65f2a077c 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DataBaseAutoConfiguration.java +++ b/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; -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.datasource.DataSourceHolder; import org.springframework.beans.factory.annotation.Autowired; @@ -44,35 +44,26 @@ public class DataBaseAutoConfiguration { @Bean @ConditionalOnMissingBean(TableMetaParser.class) 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 - public Database database(javax.sql.DataSource dataSource) throws SQLException { + public RDBDatabase database(javax.sql.DataSource dataSource) throws SQLException { DataSourceHolder holder = new DataSourceHolder(); holder.init(dataSource); - DatabaseMetaData dataBaseMetaData; + RDBDatabaseMetaData dataBaseMetaData; switch (DataSourceHolder.getDefaultDatabaseType()) { case mysql: - dataBaseMetaData = new MysqlDatabaseMeta(); + dataBaseMetaData = new MysqlRDBDatabaseMetaData(); break; case oracle: - dataBaseMetaData = new OracleDatabaseMeta(); + dataBaseMetaData = new OracleRDBDatabaseMetaData(); break; case h2: - dataBaseMetaData = new H2DatabaseMeta(); + dataBaseMetaData = new H2RDBDatabaseMetaData(); break; default: - dataBaseMetaData = new OracleDatabaseMeta(); + dataBaseMetaData = new H2RDBDatabaseMetaData(); break; } if (objectWrapperFactory != null) diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DatabaseMetaDataFactoryBean.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DatabaseMetaDataFactoryBean.java deleted file mode 100644 index ac856f4ae..000000000 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DatabaseMetaDataFactoryBean.java +++ /dev/null @@ -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 { - - @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; - } -} diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/FormDeployContextLoaderListener.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/FormDeployContextLoaderListener.java index c450a8fb6..d01f20e4f 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/FormDeployContextLoaderListener.java +++ b/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; -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.service.form.DynamicFormService; import org.hsweb.web.service.form.FormService; import org.slf4j.Logger; 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.ConfigurableApplicationContext; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; @@ -29,14 +24,12 @@ public class FormDeployContextLoaderListener implements ApplicationListener { + formService.createQuery().where(Form.Property.using, 1).list().forEach(form -> { try { Form deployed = formService.selectDeployed(form.getName()); if (null != deployed) { - TableMetaData metaData = dynamicFormService.parseMeta(deployed); + RDBTableMetaData metaData = dynamicFormService.parseMeta(deployed); dynamicFormService.getDefaultDatabase().reloadTable(metaData); } else { dynamicFormService.deploy(form); diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/basic/SqlExecutorService.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/basic/SqlExecutorService.java index 43f17de8c..89545f6d6 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/basic/SqlExecutorService.java +++ b/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; -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.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -35,7 +32,6 @@ public class SqlExecutorService extends AbstractJdbcSqlExecutor implements Expre DataSourceUtils.releaseConnection(connection, dataSource); } - @Override @Transactional(readOnly = true) public List list(SQL sql, ObjectWrapper wrapper) throws SQLException { @@ -50,82 +46,32 @@ public class SqlExecutorService extends AbstractJdbcSqlExecutor implements Expre @Transactional(readOnly = true) public List> list(SQL sql) throws SQLException { - List> data = list(sql, new SimpleMapWrapper()); - return data; + return super.list(sql); } @Transactional(readOnly = true) - public Map single(SQL sql) throws Exception { - Map data = single(sql, new SimpleMapWrapper()); - return data; + public Map single(SQL sql) throws SQLException { + return super.single(sql); } @Transactional(readOnly = true) - public List> list(String sql) throws Exception { - List> data = list(create(sql), new SimpleMapWrapper()); - return data; + public List> list(String sql) throws SQLException { + return super.list(sql); } @Transactional(readOnly = true) - public List> list(String sql, Map param) throws Exception { - List> data = list(create(sql, param), new SimpleMapWrapper()); - return data; + public List> list(String sql, Object param) throws SQLException { + return super.list(sql, param); } @Transactional(readOnly = true) - public Map single(String sql) throws Exception { - Map data = single(create(sql)); - return data; + public Map single(String sql) throws SQLException { + return super.single(sql); } @Transactional(readOnly = true) - public Map single(String sql, Map param) throws Exception { - Map data = single(create(sql, param)); - return data; + public Map single(String sql, Object param) throws SQLException { + return super.single(sql, param); } - @Transactional - public int update(String sql, Map 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 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 param) { - SimpleSQL sql1 = new SimpleSQL(sql, param); - return sql1; - } - - public SqlExecutorService setDataSource(DataSource dataSource) { - this.dataSource = dataSource; - return this; - } } diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/config/ConfigServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/config/ConfigServiceImpl.java index 1790b508b..115d7ec0e 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/config/ConfigServiceImpl.java +++ b/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.web.bean.common.UpdateParam; 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.dao.config.ConfigMapper; import org.hsweb.web.service.config.ConfigService; @@ -17,6 +18,8 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import static org.hsweb.web.bean.po.config.Config.Property.*; + /** * 系统配置服务类 * Created by generator @@ -38,7 +41,7 @@ public class ConfigServiceImpl extends AbstractServiceImpl imple @Override @CacheEvict(value = CACHE_KEY, allEntries = true) 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 diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/datasource/DataSourceServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/datasource/DataSourceServiceImpl.java index f567d1db0..9036df101 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/datasource/DataSourceServiceImpl.java +++ b/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.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 @@ -96,7 +100,7 @@ public class DataSourceServiceImpl extends AbstractServiceImpl 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.contains("varchar")) { - fieldMetaData.setJdbcType(JDBCType.VARCHAR); - String className = fieldMetaData.getJavaType().getSimpleName(); + column.setJdbcType(JDBCType.VARCHAR); + String className = column.getJavaType().getSimpleName(); 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") || dataType.contains("timestamp") || 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")) { - 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)) { - fieldMetaData.setValueConverter(new JSONValueConverter(fieldMetaData.getJavaType(), fieldMetaData.getValueConverter())); + column.setValueConverter(new JSONValueConverter(column.getJavaType(), column.getValueConverter())); } } else if (dataType.contains("number") || dataType.contains("int") || dataType.contains("double") || dataType.contains("tinyint")) { - fieldMetaData.setJdbcType(JDBCType.NUMERIC); + column.setJdbcType(JDBCType.NUMERIC); } else { - fieldMetaData.setJdbcType(JDBCType.VARCHAR); - String className = fieldMetaData.getJavaType().getSimpleName(); + column.setJdbcType(JDBCType.VARCHAR); + String className = column.getJavaType().getSimpleName(); 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 - public TableMetaData parse(Form form) { + public RDBTableMetaData parse(Form form) { DynamicScriptEngine scriptEngine = DynamicScriptEngineFactory.getEngine("groovy"); String meta = form.getMeta(); - TableMetaData metaData = new TableMetaData(); + RDBTableMetaData metaData = new RDBTableMetaData(); metaData.setProperty("version", form.getRelease()); metaData.setName(form.getName()); metaData.setComment(form.getRemark()); JSONObject object = JSON.parseObject(meta); int[] sortIndex = new int[1]; - Map tmp = new HashMap<>(); + Map tmp = new HashMap<>(); 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); obj.forEach((defT) -> { JSONObject def = ((JSONObject) defT); @@ -174,14 +138,14 @@ public class DefaultFormParser implements FormParser { validatorList.add(validator); }); } - fieldMeta.setValidator(validatorList); + columnMetaData.setValidator(validatorList); return; } - Field ftmp = ReflectionUtils.findField(FieldMetaData.class, key); + Field ftmp = ReflectionUtils.findField(RDBColumnMetaData.class, key); if (ftmp != null) { try { if ("javaType".equals(key)) value = mapperJavaType(value.toString()); - BeanUtils.setProperty(fieldMeta, key, value); + BeanUtils.setProperty(columnMetaData, key, value); } catch (RuntimeException e) { throw e; } catch (Exception e) { @@ -196,16 +160,16 @@ public class DefaultFormParser implements FormParser { } catch (Throwable e) { } } - fieldMeta.setProperty(key, value); + columnMetaData.setProperty(key, value); } }); //name为空的时候 不保存此字段 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) { @@ -214,8 +178,8 @@ public class DefaultFormParser implements FormParser { Document document = Jsoup.parse(form.getHtml()); Elements elements = document.select("[field-id]"); 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; } @@ -255,9 +219,9 @@ public class DefaultFormParser implements FormParser { @Override public String parseHtml(Form form) { - TableMetaData metaData = parse(form); + RDBTableMetaData metaData = parse(form); Element html = Jsoup.parse(form.getHtml()); - metaData.getFields().forEach((field) -> { + metaData.getColumns().forEach((field) -> { String field_id = field.getProperty("field-id", "").toString(); if (!"".equals(field_id)) { Elements elements = html.select("[field-id=\"" + field_id + "\"]"); diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java index 4d81b5034..715f181a4 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java +++ b/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.expands.office.excel.ExcelIO; 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.PagerResult; import org.hsweb.web.bean.common.QueryParam; @@ -38,7 +41,6 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.io.InputStream; import java.io.OutputStream; -import java.sql.JDBCType; import java.sql.SQLException; import java.util.*; @@ -55,7 +57,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco protected FormParser formParser; @Autowired - protected Database database; + protected RDBDatabase database; @Resource protected FormService formService; @@ -72,33 +74,22 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @Autowired(required = false) 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.setProperty("primaryKey", "u_id"); - metaData.addField(id); - } @Override - public Database getDefaultDatabase() { + public RDBDatabase getDefaultDatabase() { return database; } @Override - public TableMetaData parseMeta(Form form) { - TableMetaData metaData = formParser.parse(form); + public RDBTableMetaData parseMeta(Form form) { + RDBTableMetaData metaData = formParser.parse(form); initDefaultField(metaData); return metaData; } @@ -107,10 +98,10 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @WriteLock @LockName(value = "'form.lock.'+#form.name", isExpression = true) public void deploy(Form form) throws SQLException { - TableMetaData metaData = formParser.parse(form); + RDBTableMetaData metaData = formParser.parse(form); metaData.setProperty("version", form.getRevision()); initDefaultField(metaData); - TableMetaData lastDeployMetaData; + RDBTableMetaData lastDeployMetaData; if (tableMetaParser == null) { History history = historyService.selectLastHistoryByType("form.deploy." + form.getName()); Form lastDeploy = JSON.parseObject(history.getChangeAfter(), Form.class); @@ -120,7 +111,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco lastDeployMetaData = tableMetaParser.parse(form.getName()); } //首次部署 - if (lastDeployMetaData == null || lastDeployMetaData.getFields().isEmpty()) { + if (lastDeployMetaData == null || lastDeployMetaData.getColumns().isEmpty()) { try { database.createTable(metaData); } catch (Exception e) { @@ -142,9 +133,9 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco database.removeTable(form.getName()); } - public Table getTableByName(String name) { + public RDBTable getTableByName(String name) { try { - Table table = database.getTable(name); + RDBTable table = database.getTable(name); if (table == null) { throw new NotFoundException("表单[" + name + "]不存在"); } @@ -160,8 +151,8 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @Transactional(readOnly = true) public PagerResult selectPager(String name, QueryParam param) throws SQLException { PagerResult result = new PagerResult<>(); - Table table = getTableByName(name); - Query query = table.createQuery(); + RDBTable table = getTableByName(name); + RDBQuery query = table.createQuery(); query.setParam(param); int total = query.total(); result.setTotal(total); @@ -180,8 +171,8 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @LockName(value = "'form.lock.'+#name", isExpression = true) @Transactional(readOnly = true) public List select(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.list(); } @@ -190,8 +181,8 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @LockName(value = "'form.lock.'+#name", isExpression = true) @Transactional(readOnly = true) 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(); } @@ -199,7 +190,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @ReadLock @LockName(value = "'form.lock.'+#name", isExpression = true) public String insert(String name, Map data) throws SQLException { - Table table = getTableByName(name); + RDBTable table = getTableByName(name); String primaryKeyName = getPrimaryKeyName(name); String pk = GenericPo.createUID(); data.put(primaryKeyName, pk); @@ -212,7 +203,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @ReadLock @LockName(value = "'form.lock.'+#name", isExpression = true) public List insert(String name, List> dataList) throws SQLException { - Table table = getTableByName(name); + RDBTable table = getTableByName(name); String primaryKeyName = getPrimaryKeyName(name); List idList = new ArrayList<>(); dataList.forEach(data -> { @@ -248,7 +239,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco } protected String getRepeatDataId(String name, Map data) { - Table table = getTableByName(name); + RDBTable table = getTableByName(name); if (dynamicFormDataValidator != null) { for (DynamicFormDataValidator validator : dynamicFormDataValidator) { String id = validator.getRepeatDataId(table, data); @@ -265,7 +256,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @LockName(value = "'form.lock.'+#name", isExpression = true) public boolean deleteByPk(String name, String pk) throws SQLException { String primaryKeyName = getPrimaryKeyName(name); - Table table = getTableByName(name); + RDBTable table = getTableByName(name); Delete delete = table.createDelete().where(primaryKeyName, pk); return delete.exec() == 1; } @@ -274,7 +265,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @ReadLock @LockName(value = "'form.lock.'+#name", isExpression = true) public int delete(String name, DeleteParam where) throws SQLException { - Table table = getTableByName(name); + RDBTable table = getTableByName(name); Delete delete = table.createDelete(); delete.setParam(where); return delete.exec(); @@ -284,10 +275,10 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @ReadLock @LockName(value = "'form.lock.'+#name", isExpression = true) public int updateByPk(String name, String pk, UpdateParam> param) throws SQLException { - Table table = getTableByName(name); + RDBTable table = getTableByName(name); String pkName = getPrimaryKeyName(name); Update update = table.createUpdate().setParam(param); - param.getData().put(pkName, pk); + ((Map) param.getData()).put(pkName, pk); update.where(pkName, pk); return update.exec(); } @@ -296,7 +287,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @ReadLock @LockName(value = "'form.lock.'+#name", isExpression = true) public int update(String name, UpdateParam> param) throws SQLException { - Table table = getTableByName(name); + RDBTable table = getTableByName(name); Update update = table.createUpdate().setParam(param); return update.exec(); } @@ -304,7 +295,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @ReadLock @LockName(value = "'form.lock.'+#tableName", isExpression = true) public String getPrimaryKeyName(String tableName) { - Table table = getTableByName(tableName); + RDBTable table = getTableByName(tableName); return table.getMeta().getProperty("primaryKey", "u_id").toString(); } @@ -317,7 +308,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco return query.single(); } - protected void putExcelHeader(String fieldPrefix, FieldMetaData fieldMetaData, List
headers) { + protected void putExcelHeader(String fieldPrefix, RDBColumnMetaData fieldMetaData, List
headers) { if (fieldMetaData == null) return; PropertyWrapper valueWrapper = fieldMetaData.getProperty("export-excel", false); if (fieldPrefix.length() > 0) fieldPrefix += "."; @@ -344,19 +335,19 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @Transactional(readOnly = true) public void exportExcel(String name, QueryParam param, OutputStream outputStream) throws Exception { List dataList = select(name, param); - Table table = getTableByName(name); - TableMetaData metaData = table.getMeta(); + RDBTable table = getTableByName(name); + RDBTableMetaData metaData = table.getMeta(); List
headers = new LinkedList<>(); Map sample = dataList.isEmpty() ? new HashMap<>() : (Map) dataList.get(0); sample.forEach((key, value) -> { if (value instanceof Map) { ((Map) value).forEach((k, v) -> { String fieldName = key + "." + k; - FieldMetaData field = metaData.findFieldByName(fieldName); + RDBColumnMetaData field = metaData.findColumn(fieldName); putExcelHeader(fieldName, field, headers); }); } else { - FieldMetaData field = metaData.findFieldByName(key); + RDBColumnMetaData field = metaData.findColumn(key); putExcelHeader("", field, headers); } }); @@ -377,7 +368,7 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco @ReadLock @LockName(value = "'form.lock.'+#name", isExpression = true) public Map importExcel(String name, InputStream inputStream) { - Table table = getTableByName(name); + RDBTable> table = getTableByName(name); Map result = new HashMap<>(); long startTime = System.currentTimeMillis(); List> excelData; @@ -388,8 +379,8 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco } List> dataList = new LinkedList<>(); Map 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); if (valueWrapper.isTrue()) { String title = fieldMetaData.getProperty("excel-header").getValue(); diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java index f6f1298b3..fb0355b4a 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java +++ b/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.UpdateParam; 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.dao.form.FormMapper; import org.hsweb.web.service.form.DynamicFormService; @@ -127,17 +128,18 @@ public class FormServiceImpl extends AbstractServiceImpl implement @Override @Cacheable(value = CACHE_KEY, key = "#name+':'+#version") public Form selectByVersion(String name, int version) { - QueryParam param = QueryParam.build() - .where("name", name).where("version", version); - List
formList = formMapper.selectLatestList(param); + List formList = this.createQuery() + .where(Property.name, name).and(Property.version, version) + .list(formMapper::selectLatestList); return formList.size() > 0 ? formList.get(0) : null; } @Override public Form selectLatest(String name) { - QueryParam param = QueryParam.build() - .where("name", name).orderBy("version").asc(); - List formList = formMapper.selectLatestList(param); + List formList = this.createQuery() + .where(Property.name, name) + .orderByAsc(Property.version) + .list(formMapper::selectLatestList); return formList.size() > 0 ? formList.get(0) : null; } @@ -161,7 +163,7 @@ public class FormServiceImpl extends AbstractServiceImpl implement old.setUsing(true); dynamicFormService.deploy(old); 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.setPrimaryKeyName("id"); @@ -184,9 +186,7 @@ public class FormServiceImpl extends AbstractServiceImpl implement assertNotNull(old, "表单不存在"); dynamicFormService.unDeploy(old); 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 diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidator.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidator.java index 6d3ed962a..1555fd643 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidator.java +++ b/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.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.core.exception.BusinessException; import org.springframework.util.ReflectionUtils; @@ -23,7 +23,7 @@ public class GroovyDycBeanValidator implements Validator { protected static DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine("groovy"); - private String className; + private String className; private javax.validation.Validator hibernateValidator; @@ -41,7 +41,7 @@ public class GroovyDycBeanValidator implements Validator { if (operation == Operation.INSERT) { data.forEach((key, value) -> { try { - BeanUtils.setProperty(validatorTarget , (String) key,value ); + BeanUtils.setProperty(validatorTarget, (String) key, value); } catch (Exception e) { } }); diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidatorFactory.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidatorFactory.java index eac5d86bd..d96b0277e 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidatorFactory.java +++ b/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; -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.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -13,6 +17,7 @@ import org.hsweb.expands.script.engine.DynamicScriptEngineFactory; import java.util.HashMap; import java.util.Map; + @Component public class GroovyDycBeanValidatorFactory implements ValidatorFactory { @@ -65,7 +70,7 @@ public class GroovyDycBeanValidatorFactory implements ValidatorFactory { } script.append("public class ").append(metaData.getName()).append("{\n"); boolean hasValidator = false; - for (FieldMetaData fieldMetaData : metaData.getFields()) { + for (ColumnMetaData fieldMetaData : metaData.getColumns()) { String typeName = simpleType.get(fieldMetaData.getJavaType()); if (typeName == null) typeName = fieldMetaData.getJavaType().getName(); if (fieldMetaData.getValidator() == null || fieldMetaData.getValidator().isEmpty()) continue; @@ -79,7 +84,7 @@ public class GroovyDycBeanValidatorFactory implements ValidatorFactory { } //没有配置验证器 if (!hasValidator) return null; - for (FieldMetaData fieldMetaData : metaData.getFields()) { + for (ColumnMetaData fieldMetaData : metaData.getColumns()) { String typeName = simpleType.get(fieldMetaData.getJavaType()); if (typeName == null) typeName = fieldMetaData.getJavaType().getName(); if (fieldMetaData.getValidator() == null || fieldMetaData.getValidator().isEmpty()) continue; diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/history/HistoryServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/history/HistoryServiceImpl.java index 317c404f8..70fd2e9bb 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/history/HistoryServiceImpl.java +++ b/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; -import org.hsweb.web.bean.common.QueryParam; import org.hsweb.web.bean.po.history.History; import org.hsweb.web.dao.history.HistoryMapper; import org.hsweb.web.service.history.HistoryService; @@ -8,7 +7,8 @@ import org.hsweb.web.service.impl.AbstractServiceImpl; import org.springframework.stereotype.Service; 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. @@ -25,12 +25,9 @@ public class HistoryServiceImpl extends AbstractServiceImpl imp @Override public History selectLastHistoryByType(String type) { - QueryParam queryParam = new QueryParam() - .where("type", type) - .doPaging(0, 1) - .orderBy("createDate").desc(); - List history = historyMapper.select(queryParam); - if (history.size() == 1) return history.get(0); - return null; + return createQuery() + .where(Property.type, type) + .orderByDesc(Property.createDate) + .single(); } } diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleMetaServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleMetaServiceImpl.java index 3a9aa68d0..8b31e19f2 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleMetaServiceImpl.java +++ b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleMetaServiceImpl.java @@ -1,9 +1,8 @@ package org.hsweb.web.service.impl.module; -import org.hsweb.ezorm.param.Term; import org.hsweb.web.bean.common.QueryParam; import org.hsweb.web.bean.po.module.ModuleMeta; -import org.hsweb.web.core.utils.RandomUtil; +import org.hsweb.web.bean.po.module.ModuleMeta.Property; import org.hsweb.web.dao.module.ModuleMetaMapper; import org.hsweb.web.service.impl.AbstractServiceImpl; import org.hsweb.web.service.module.ModuleMetaService; @@ -12,8 +11,10 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; -import java.util.Arrays; import java.util.List; +import java.util.function.Function; + +import static org.hsweb.web.bean.po.module.ModuleMeta.Property.*; /** * Created by zhouhao on 16-5-10. @@ -49,13 +50,20 @@ public class ModuleMetaServiceImpl extends AbstractServiceImpl roleId) { - QueryParam param = QueryParam.build(); - param.nest().and("key", key).or("moduleId", key).or("id",key); - Term term = param.nest(); - roleId.forEach(id -> term.or("roleId$LIKE", "%," + id + ",%")); - term.or("roleId$ISNULL", true).or("roleId$EMPTY", true); - return param; + static final Function roleIdValueMapper = (value) -> "," + value + ","; + + protected QueryParam createSelectByKeyAndRoleIdParam(String key, List roleIds) { + // (id = ? or key = ? or module_id = ? ) and (role_id like ? or .....) and (role_id is null or role_id ='') + return createQuery() + //(id = ? or key = ? or module_id = ? ) + .nest(id, key).or(Property.key, key).or(moduleId, key).end() + //and (role_id like ? or .....) + //遍历roleId,使用 like %% 并将值转为 ,value, 格式进行查询 + //如果有条件,应该写sql函数,将数据库中的值转为结果集和参数进行对比 + .nest().each(roleId, roleIds, query -> query::$like$, roleIdValueMapper).end() + //and (role_id is null or role_id ='') + .nest().isNull(roleId).or().isEmpty(roleId).end() + .getParam(); } @Override diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/plan/QueryPlanServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/plan/QueryPlanServiceImpl.java index d81374b0d..d188e9136 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/plan/QueryPlanServiceImpl.java +++ b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/plan/QueryPlanServiceImpl.java @@ -16,7 +16,6 @@ package org.hsweb.web.service.impl.plan; -import org.hsweb.web.bean.common.UpdateParam; import org.hsweb.web.bean.po.plan.QueryPlan; import org.hsweb.web.dao.plan.QueryPlanMapper; import org.hsweb.web.service.impl.AbstractServiceImpl; @@ -25,6 +24,8 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import static org.hsweb.web.bean.po.plan.QueryPlan.Property.*; + /** * 查询方案服务类 * Created by generator @@ -42,6 +43,6 @@ public class QueryPlanServiceImpl extends AbstractServiceImpl @Override public int update(QueryPlan data) { - return queryPlanMapper.update(UpdateParam.build(data).includes("name", "config", "sharing")); + return createUpdate(data).includes(name, config, sharing).exec(); } } diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/profile/UserProfileServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/profile/UserProfileServiceImpl.java index c61567fce..137e71b44 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/profile/UserProfileServiceImpl.java +++ b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/profile/UserProfileServiceImpl.java @@ -1,7 +1,5 @@ package org.hsweb.web.service.impl.profile; -import org.hsweb.commons.MD5; -import org.hsweb.web.bean.common.UpdateParam; import org.hsweb.web.bean.po.profile.UserProfile; import org.hsweb.web.dao.profile.UserProfileMapper; import org.hsweb.web.service.impl.AbstractServiceImpl; @@ -10,9 +8,8 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; -/** - * Created by zhouhao on 16-7-4. - */ +import static org.hsweb.web.bean.po.profile.UserProfile.Property.*; + @Service("userProfileService") public class UserProfileServiceImpl extends AbstractServiceImpl implements UserProfileService { @@ -28,10 +25,12 @@ public class UserProfileServiceImpl extends AbstractServiceImpl()) + .set(Property.result, result) + .set(Property.status, status.getValue()) + .set(Property.endTime, new Date()) + .where(Property.id, historyId).exec() == 1; } } diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/QuartzJobServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/QuartzJobServiceImpl.java index 038f01e6e..73c563923 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/QuartzJobServiceImpl.java +++ b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/QuartzJobServiceImpl.java @@ -25,6 +25,7 @@ import org.hsweb.web.bean.common.DeleteParam; import org.hsweb.web.bean.common.UpdateMapParam; import org.hsweb.web.bean.common.UpdateParam; import org.hsweb.web.bean.po.quartz.QuartzJob; +import org.hsweb.web.bean.po.quartz.QuartzJobHistory; import org.hsweb.web.core.exception.BusinessException; import org.hsweb.web.dao.quartz.QuartzJobHistoryMapper; import org.hsweb.web.dao.quartz.QuartzJobMapper; @@ -48,6 +49,8 @@ import java.text.ParseException; import java.util.*; import java.util.stream.Collectors; +import static org.hsweb.web.bean.po.quartz.QuartzJob.Property.*; + /** * 定时调度任务服务类 * Created by generator @@ -93,9 +96,7 @@ public class QuartzJobServiceImpl extends AbstractServiceImpl public int update(QuartzJob data) { QuartzJob old = selectByPk(data.getId()); assertNotNull(old, "任务不存在"); - int i = getMapper().update(UpdateParam.build(data) - .excludes("status", "enabled") - .where("id", data.getId())); + int i = createUpdate(data).fromBean().excludes(enabled).where(id).exec(); if (old.isEnabled()) { deleteJob(data.getId()); startJob(data); @@ -111,14 +112,14 @@ public class QuartzJobServiceImpl extends AbstractServiceImpl @Override @CacheEvict(value = CACHE_KEY, key = "'id:'+#id") public void enable(String id) { - getMapper().update((UpdateParam) UpdateMapParam.build().set("enabled", true).where("id", id)); + createUpdate().set(enabled, true).where(QuartzJob.Property.id, id).exec(); startJob(getMapper().selectByPk(id)); } @Override @CacheEvict(value = CACHE_KEY, key = "'id:'+#id") public void disable(String id) { - getMapper().update((UpdateParam) UpdateMapParam.build().set("enabled", false).where("id", id)); + createUpdate().set(enabled, false).where(QuartzJob.Property.id, id).exec(); deleteJob(id); } @@ -126,7 +127,7 @@ public class QuartzJobServiceImpl extends AbstractServiceImpl @CacheEvict(value = CACHE_KEY, key = "'id:'+#id") public int delete(String id) { deleteJob(id); - quartzJobHistoryMapper.delete(DeleteParam.build().where("jobId", id)); + createDelete(quartzJobHistoryMapper::delete).where(QuartzJobHistory.Property.jobId, id).exec(); return super.delete(id); } diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/script/DynamicScriptServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/script/DynamicScriptServiceImpl.java index 80010b993..30cb5a185 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/script/DynamicScriptServiceImpl.java +++ b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/script/DynamicScriptServiceImpl.java @@ -5,6 +5,7 @@ import org.hsweb.expands.script.engine.*; import org.hsweb.web.bean.common.QueryParam; import org.hsweb.web.bean.common.UpdateParam; import org.hsweb.web.bean.po.script.DynamicScript; +import org.hsweb.web.bean.po.script.DynamicScript.Property; import org.hsweb.web.core.authorize.ExpressionScopeBean; import org.hsweb.web.dao.script.DynamicScriptMapper; import org.hsweb.web.core.exception.BusinessException; @@ -65,19 +66,18 @@ public class DynamicScriptServiceImpl extends AbstractServiceImpl list = this.select(QueryParam.build().where("status", 1).noPaging()); + List list = createQuery().where(Property.status, 1).listNoPaging(); for (DynamicScript script : list) { DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine(script.getType()); assertNotNull(engine, "不支持的引擎"); diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/system/DataBaseManagerServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/system/DataBaseManagerServiceImpl.java index 362e08f12..5051439fd 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/system/DataBaseManagerServiceImpl.java +++ b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/system/DataBaseManagerServiceImpl.java @@ -1,20 +1,20 @@ package org.hsweb.web.service.impl.system; -import org.hsweb.ezorm.executor.EmptySQL; -import org.hsweb.ezorm.executor.SQL; -import org.hsweb.ezorm.executor.SqlExecutor; -import org.hsweb.ezorm.meta.DatabaseMetaData; -import org.hsweb.ezorm.meta.TableMetaData; -import org.hsweb.ezorm.meta.expand.SimpleMapWrapper; -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.SqlRender; -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.render.support.simple.SimpleSQL; +import org.hsweb.ezorm.rdb.executor.EmptySQL; +import org.hsweb.ezorm.rdb.executor.SQL; +import org.hsweb.ezorm.rdb.executor.SqlExecutor; +import org.hsweb.ezorm.rdb.meta.RDBDatabaseMetaData; +import org.hsweb.ezorm.rdb.meta.RDBTableMetaData; +import org.hsweb.ezorm.rdb.meta.expand.SimpleMapWrapper; +import org.hsweb.ezorm.rdb.meta.parser.H2TableMetaParser; +import org.hsweb.ezorm.rdb.meta.parser.MysqlTableMetaParser; +import org.hsweb.ezorm.rdb.meta.parser.OracleTableMetaParser; +import org.hsweb.ezorm.rdb.meta.parser.TableMetaParser; +import org.hsweb.ezorm.rdb.render.SqlRender; +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.SimpleSQL; import org.hsweb.web.core.datasource.DataSourceHolder; import org.hsweb.web.service.system.DataBaseManagerService; import org.slf4j.Logger; @@ -31,7 +31,6 @@ import java.util.Map; /** * 数据库管理服务实现类 - * Created by zhouhao on 16-4-21. * * @author zhouhao, * @version 1.0 @@ -45,7 +44,7 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService { @Override @Transactional(readOnly = true) - public List getTableList() throws SQLException { + public List getTableList() throws SQLException { return getDBType().getTableMetaParser(sqlExecutor).parseAll(); } @@ -93,11 +92,11 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService { } @Override - public String createAlterSql(TableMetaData newTable) throws Exception { + public String createAlterSql(RDBTableMetaData newTable) throws Exception { return createAlterSql(getDBType().getDatabaseMetaData(), getDBType().getTableMetaParser(sqlExecutor), newTable); } - public String createAlterSql(DatabaseMetaData databaseMetaData, TableMetaParser tableMetaParser, TableMetaData newTable) throws Exception { + public String createAlterSql(RDBDatabaseMetaData databaseMetaData, TableMetaParser tableMetaParser, RDBTableMetaData newTable) throws Exception { databaseMetaData.putTable(tableMetaParser.parse(newTable.getName())); SQL sql = databaseMetaData.getRenderer(SqlRender.TYPE.META_ALTER).render(newTable, true); if (sql instanceof EmptySQL) return ""; @@ -109,11 +108,11 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService { } @Override - public String createCreateSql(TableMetaData newTable) throws Exception { + public String createCreateSql(RDBTableMetaData newTable) throws Exception { return createCreateSql(getDBType().getDatabaseMetaData(), newTable); } - public String createCreateSql(DatabaseMetaData databaseMetaData, TableMetaData newTable) throws Exception { + public String createCreateSql(RDBDatabaseMetaData databaseMetaData, RDBTableMetaData newTable) throws Exception { SQL sql = databaseMetaData.getRenderer(SqlRender.TYPE.META_CREATE).render(newTable, true); if (sql instanceof EmptySQL) return ""; StringBuilder builder = new StringBuilder(sql.getSql()); @@ -135,10 +134,8 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService { } @Override - public DatabaseMetaData getDatabaseMetaData() { - DatabaseMetaData databaseMetaData = new MysqlDatabaseMeta(); - databaseMetaData.init(); - return databaseMetaData; + public RDBDatabaseMetaData getDatabaseMetaData() { + return new MysqlRDBDatabaseMetaData(); } }, oracle { @@ -148,10 +145,8 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService { } @Override - public DatabaseMetaData getDatabaseMetaData() { - DatabaseMetaData databaseMetaData = new OracleDatabaseMeta(); - databaseMetaData.init(); - return databaseMetaData; + public RDBDatabaseMetaData getDatabaseMetaData() { + return new OracleRDBDatabaseMetaData(); } }, h2 { @@ -161,14 +156,12 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService { } @Override - public DatabaseMetaData getDatabaseMetaData() { - DatabaseMetaData databaseMetaData = new H2DatabaseMeta(); - databaseMetaData.init(); - return databaseMetaData; + public RDBDatabaseMetaData getDatabaseMetaData() { + return new H2RDBDatabaseMetaData(); } }; - public abstract DatabaseMetaData getDatabaseMetaData(); + public abstract RDBDatabaseMetaData getDatabaseMetaData(); public abstract TableMetaParser getTableMetaParser(SqlExecutor sqlExecutor); } diff --git a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/template/TemplateServiceImpl.java b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/template/TemplateServiceImpl.java index 1a0442502..04a654b0d 100644 --- a/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/template/TemplateServiceImpl.java +++ b/hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/template/TemplateServiceImpl.java @@ -5,7 +5,7 @@ import org.hsweb.web.bean.common.QueryParam; import org.hsweb.web.bean.common.UpdateParam; import org.hsweb.web.bean.po.history.History; import org.hsweb.web.bean.po.template.Template; -import org.hsweb.web.dao.GenericMapper; +import org.hsweb.web.bean.po.template.Template.Property; import org.hsweb.web.dao.template.TemplateMapper; import org.hsweb.web.service.history.HistoryService; import org.hsweb.web.service.impl.AbstractServiceImpl; @@ -20,6 +20,11 @@ import javax.annotation.Resource; import java.util.Date; import java.util.List; +import static org.hsweb.web.bean.po.GenericPo.Property.id; +import static org.hsweb.web.bean.po.template.Template.Property.release; +import static org.hsweb.web.bean.po.template.Template.Property.using; +import static org.hsweb.web.bean.po.template.Template.Property.version; + /** * Created by zhouhao on 16-5-20. */ @@ -40,7 +45,7 @@ public class TemplateServiceImpl extends AbstractServiceImpl i } @Override - public String insert(Template data) { + public String insert(Template data) { data.setVersion(1); data.setUsing(false); data.setRelease(0); @@ -81,10 +86,10 @@ public class TemplateServiceImpl extends AbstractServiceImpl i Template old = selectByPk(data.getId()); assertNotNull(old, "模板不存在"); data.setRevision(old.getRevision() + 1); - UpdateParam