From 664cc2fd39177fd3daa6d3988396c704d130882c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 12 十月 2021 19:06:55 +0800 Subject: [PATCH] 自动化代码生成优化 --- src/main/java/org/yeshi/utils/bean/BeanUtil.java | 36 + src/main/resources/generater/service/method/impl/mybatis/delete.ftl | 4 src/main/resources/generater/service/method/impl/mybatis/save.ftl | 12 src/main/resources/generater/service/service.template | 2 src/main/resources/generater/service/method/impl/mybatis/add.ftl | 7 src/main/resources/generater/service/method/impl/mongo/save.ftl | 6 src/main/java/org/yeshi/utils/generater/entity/MybatisColumnData.java | 14 src/main/java/org/yeshi/utils/generater/vo/admin/page/FormHttpRequestInfoVO.java | 2 src/test/java/com/generater/TestEntity2.java | 136 +++++ src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java | 1 src/main/java/org/yeshi/utils/generater/vo/service/ServiceMetodInfoVO.java | 2 src/main/resources/generater/exception.template | 11 src/main/java/org/yeshi/utils/generater/vo/service/ServiceImplInfoVO.java | 214 +++++++ src/main/resources/generater/service/method/impl/mybatis/updateSlective.ftl | 7 src/main/java/org/yeshi/utils/generater/vo/admin/page/FormInputRegexVerifyVO.java | 2 src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java | 4 src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java | 2 src/main/java/org/yeshi/utils/generater/vo/dao/MongoDBDaoVO.java | 95 +- src/main/java/org/yeshi/utils/generater/vo/service/ServiceInfoVO.java | 78 ++ src/main/resources/generater/admin/adminController.template | 61 +- src/main/resources/generater/service/method/impl/mongo/updateSlective.ftl | 7 src/main/resources/generater/dao/mybatisDBDao.template | 34 + src/main/resources/generater/dao/mybatisDBXML.ftl | 143 +++++ src/main/resources/generater/service/method/impl/mongo/selectByPrimaryKey.ftl | 4 src/main/resources/generater/service/serviceImpl.template | 7 src/main/resources/generater/dao/mongoDBDao.template | 92 +++ src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java | 50 - src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java | 2 src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminControllerInfoVO.java | 39 + src/main/resources/generater/service/method/impl/mongo/list.ftl | 7 src/main/resources/generater/service/method/impl/mybatis/list.ftl | 7 src/main/java/org/yeshi/utils/generater/util/EntityUtil.java | 31 + src/main/resources/generater/service/method/impl/mongo/delete.ftl | 4 src/test/java/com/generater/GeneratorTest.java | 110 +++ src/main/java/org/yeshi/utils/generater/entity/DaoQueryColumnData.java | 22 src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java | 10 src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java | 208 +++++++ src/test/java/com/generater/TestEntity.java | 2 src/main/resources/generater/service/method/impl/mongo/count.ftl | 5 /dev/null | 2 src/test/java/com/generater/Test.java | 0 src/main/resources/generater/service/method/impl/mybatis/selectByPrimaryKey.ftl | 2 src/main/resources/generater/service/method/impl/mongo/add.ftl | 13 src/main/resources/generater/service/method/impl/mybatis/count.ftl | 5 src/main/java/org/yeshi/utils/generater/annotation/admin/AdminController.java | 2 src/main/java/org/yeshi/utils/generater/vo/ExceptionVO.java | 69 ++ src/main/java/org/yeshi/utils/generater/entity/MapperQueryColumnData.java | 36 + src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java | 2 48 files changed, 1,422 insertions(+), 189 deletions(-) diff --git a/src/main/java/org/yeshi/utils/bean/BeanUtil.java b/src/main/java/org/yeshi/utils/bean/BeanUtil.java new file mode 100644 index 0000000..ff80cfa --- /dev/null +++ b/src/main/java/org/yeshi/utils/bean/BeanUtil.java @@ -0,0 +1,36 @@ +package org.yeshi.utils.bean; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Administrator + * @title: BeanUtil + * @description: TODO + * @date 2021/10/11 14:01 + */ +public class BeanUtil { + + //澶嶅埗灞炴�� + public static Object copyProperties(Object source, Object target) throws IllegalAccessException { + Map<String, Field> targetFieldMap = new HashMap<>(); + Field[] fs = target.getClass().getDeclaredFields(); + for (Field field : fs) { + targetFieldMap.put(field.getName(), field); + } + fs = source.getClass().getDeclaredFields(); + for (Field field : fs) { + if (targetFieldMap.get(field.getName()) == null) + continue; + //鑾峰彇瀵硅薄鐨勫睘鎬у�� + field.setAccessible(true); + Object resultValue = field.get(source); + targetFieldMap.get(field.getName()).setAccessible(true); + targetFieldMap.get(field.getName()).set(target, resultValue); + } + return target; + } + + +} diff --git a/src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java b/src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java index 7b17272..f8d9302 100644 --- a/src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java +++ b/src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java @@ -1,56 +1,6 @@ package org.yeshi.utils.generater; -import org.yeshi.utils.FreemarkerUtils; -import org.yeshi.utils.generater.entity.ExceptionData; -import org.yeshi.utils.generater.entity.MongoDBDaoData; -import org.yeshi.utils.generater.vo.ServiceInfoVO; - -import java.io.File; - public class SpringComponentGenerater { - - /** - * 鍒涘缓mongodb鐨刣ao - * - * @param data - * @param targetDir - * @throws Exception - */ - public static void createMongoDao(MongoDBDaoData data, String targetDir) throws Exception { - FreemarkerUtils.renderingTemplateAndGenerateFile(SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/mongoDBDao.template"), new File(targetDir, data.getDaoName() + ".java").getAbsolutePath(), data); - } - - /** - * 鍒涘缓鏈嶅姟 - * - * @param data - * @param targetDir - * @throws Exception - */ - public static void createService(ServiceInfoVO data, String targetDir) throws Exception { - - FreemarkerUtils.renderingTemplateAndGenerateFile(SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/service/service.template"), new File(targetDir, data.getServiceClassName() + ".java").getAbsolutePath(), data); - } - - /** - * 鍒涘缓鏈嶅姟瀹炵幇 - * - * @param data - * @param targetDir - * @throws Exception - */ - public static void createServiceImpl(ServiceInfoVO data, String targetDir) throws Exception { - - FreemarkerUtils.renderingTemplateAndGenerateFile(SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/service/serviceImpl.template"), new File(targetDir, data.getServiceClassName() + "Impl.java").getAbsolutePath(), data); - } - - - - public static void createException(ExceptionData data, String targetDir) throws Exception { - - FreemarkerUtils.renderingTemplateAndGenerateFile(SpringComponentGenerater.class.getClassLoader().getResourceAsStream("exception.template"), new File(targetDir, data.getEntityClassName() + "Exception.java").getAbsolutePath(), data); - } - } diff --git a/src/main/java/org/yeshi/utils/generater/annotation/admin/AdminController.java b/src/main/java/org/yeshi/utils/generater/annotation/admin/AdminController.java index 0e40e8a..19d1453 100644 --- a/src/main/java/org/yeshi/utils/generater/annotation/admin/AdminController.java +++ b/src/main/java/org/yeshi/utils/generater/annotation/admin/AdminController.java @@ -35,6 +35,8 @@ //榛樿寮�鍚垎椤� boolean page() default true; + boolean jsonp() default false; + Class searchForm() default Void.class; } diff --git a/src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java b/src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java index d241acc..14af015 100644 --- a/src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java +++ b/src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java @@ -13,7 +13,7 @@ public ClassInfo(String name, String clazz) { this.name = name; - this.clazz = clazz; + this.clazz = clazz.replace("$","."); } public String getName() { @@ -29,6 +29,6 @@ } public void setClazz(String clazz) { - this.clazz = clazz; + this.clazz = clazz.replace("$","."); } } diff --git a/src/main/java/org/yeshi/utils/generater/entity/DaoQueryColumnData.java b/src/main/java/org/yeshi/utils/generater/entity/DaoQueryColumnData.java index 35a3e97..d025f33 100644 --- a/src/main/java/org/yeshi/utils/generater/entity/DaoQueryColumnData.java +++ b/src/main/java/org/yeshi/utils/generater/entity/DaoQueryColumnData.java @@ -7,9 +7,19 @@ //鏌ヨ鏂瑰紡 private DaoQueryCondition.QueryType queryType; - public DaoQueryColumnData(String columnName, String type, DaoQueryCondition.QueryType queryType) { - super(columnName, type); + //閽堝鐨勫垪 + private MybatisColumnData columnData; + + + public DaoQueryColumnData(String property, String type, DaoQueryCondition.QueryType queryType) { + super(property, type); this.queryType = queryType; + } + + public DaoQueryColumnData(String property, MybatisColumnData columnData, String type, DaoQueryCondition.QueryType queryType) { + super(property, type); + this.queryType = queryType; + this.columnData = columnData; } @@ -20,4 +30,12 @@ public void setQueryType(DaoQueryCondition.QueryType queryType) { this.queryType = queryType; } + + public MybatisColumnData getColumnData() { + return columnData; + } + + public void setColumnData(MybatisColumnData columnData) { + this.columnData = columnData; + } } diff --git a/src/main/java/org/yeshi/utils/generater/entity/ExceptionData.java b/src/main/java/org/yeshi/utils/generater/entity/ExceptionData.java deleted file mode 100644 index 4b99e47..0000000 --- a/src/main/java/org/yeshi/utils/generater/entity/ExceptionData.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.yeshi.utils.generater.entity; - -public class ExceptionData extends BaseData { - private String baseClass; - private String baseClassName; - private String entityClassName; - - public static class Builder { - private Class baseClass; - private String packageName; - private Class entityClass; - - public Builder setBaseClass(Class baseClass) { - this.baseClass = baseClass; - return this; - } - - public Builder setPackageName(String packageName) { - this.packageName = packageName; - return this; - } - - public Builder setEntityClass(Class entityClass) { - this.entityClass = entityClass; - return this; - } - - public ExceptionData build() { - ExceptionData data = new ExceptionData(); - data.setBaseClass(baseClass.getName()); - data.setBaseClassName(baseClass.getSimpleName()); - data.setEntityClass(entityClass.getName()); - data.setEntityClassName(entityClass.getSimpleName()); - data.setPackageName(packageName); - return data; - } - } - - public String getBaseClass() { - return baseClass; - } - - public void setBaseClass(String baseClass) { - this.baseClass = baseClass; - } - - public String getBaseClassName() { - return baseClassName; - } - - public void setBaseClassName(String baseClassName) { - this.baseClassName = baseClassName; - } - - public String getEntityClassName() { - return entityClassName; - } - - public void setEntityClassName(String entityClassName) { - this.entityClassName = entityClassName; - } -} diff --git a/src/main/java/org/yeshi/utils/generater/entity/MapperQueryColumnData.java b/src/main/java/org/yeshi/utils/generater/entity/MapperQueryColumnData.java new file mode 100644 index 0000000..4bfa72b --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/entity/MapperQueryColumnData.java @@ -0,0 +1,36 @@ +package org.yeshi.utils.generater.entity; + +import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; + +public class MapperQueryColumnData { + + //鏌ヨ鏂瑰紡 + private DaoQueryCondition.QueryType queryType; + private String property; + private MybatisColumnData column; + + + public DaoQueryCondition.QueryType getQueryType() { + return queryType; + } + + public void setQueryType(DaoQueryCondition.QueryType queryType) { + this.queryType = queryType; + } + + public String getProperty() { + return property; + } + + public void setProperty(String property) { + this.property = property; + } + + public MybatisColumnData getColumn() { + return column; + } + + public void setColumn(MybatisColumnData column) { + this.column = column; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/entity/MybatisColumnData.java b/src/main/java/org/yeshi/utils/generater/entity/MybatisColumnData.java index 935cff1..26f0e49 100644 --- a/src/main/java/org/yeshi/utils/generater/entity/MybatisColumnData.java +++ b/src/main/java/org/yeshi/utils/generater/entity/MybatisColumnData.java @@ -4,12 +4,16 @@ private String column; private String property; + //jdbcType private String type; - public MybatisColumnData(String column, String property, String type) { + private String jdbcType; + + public MybatisColumnData(String column, String property, String type, String jdbcType) { this.column = column; this.property = property; this.type = type; + this.jdbcType = jdbcType; } public String getColumn() { @@ -35,4 +39,12 @@ public void setType(String type) { this.type = type; } + + public String getJdbcType() { + return jdbcType; + } + + public void setJdbcType(String jdbcType) { + this.jdbcType = jdbcType; + } } diff --git a/src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java b/src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java index 96eed04..480ad85 100644 --- a/src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java +++ b/src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java @@ -97,6 +97,7 @@ if (an instanceof AdminController) { Class searchFormClass = ((AdminController) an).searchForm(); AdminGeneraterInfo info = new AdminGeneraterInfo(); + info.setEntity(entity); info.setControllerData((AdminController) an); info.setSearchFormRows(AnotationUtil.getFormRowData(searchFormClass)); info.setAddFormRows(AnotationUtil.getFormRowData(entity)); diff --git a/src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java b/src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java index e649018..e8427d3 100644 --- a/src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java +++ b/src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java @@ -86,15 +86,15 @@ if (type.equalsIgnoreCase("Date")) { String tempProperty = "min" + property.substring(0, 1).toUpperCase() + property.substring(1); buffer.append(String.format("\tpublic %s %s;", type, tempProperty)); - queryColumnData.add(new MybatisColumnData(columnName, tempProperty, type)); + queryColumnData.add(new MybatisColumnData(columnName, tempProperty, type,ColumnParseUtil.getJDBCType(genericType))); buffer.append("\n\t"); tempProperty = "max" + property.substring(0, 1).toUpperCase() + property.substring(1); buffer.append(String.format("\tpublic %s %s;", type, tempProperty)); - queryColumnData.add(new MybatisColumnData(columnName, tempProperty, type)); + queryColumnData.add(new MybatisColumnData(columnName, tempProperty, type,ColumnParseUtil.getJDBCType(genericType))); buffer.append("\n\t"); } else { buffer.append(String.format("\tpublic %s %s;", type, property)); - queryColumnData.add(new MybatisColumnData(columnName, property, type)); + queryColumnData.add(new MybatisColumnData(columnName, property, type,ColumnParseUtil.getJDBCType(genericType))); buffer.append("\n\t"); } } @@ -115,6 +115,8 @@ return queryColumnData; } + + public static void createMapper(Class<?> clz) { // 鐢熸垚mapper java鏂囦欢 String pks = getDaoPackageName(clz); @@ -127,7 +129,7 @@ buffer.append("\n\n\t"); //TODO 纭畾ID绫诲瀷 - buffer.append(String.format("%s selectByPrimaryKeyForUpdate(@Param(\"id\") Long id);",clz.getSimpleName())); + buffer.append(String.format("%s selectByPrimaryKeyForUpdate(@Param(\"id\") Long id);", clz.getSimpleName())); buffer.append("\n\n\t"); buffer.append(String.format("List<%s> list(@Param(\"query\") DaoQuery query);", clz.getSimpleName())); diff --git a/src/main/java/org/yeshi/utils/generater/util/EntityUtil.java b/src/main/java/org/yeshi/utils/generater/util/EntityUtil.java new file mode 100644 index 0000000..8d15295 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/util/EntityUtil.java @@ -0,0 +1,31 @@ +package org.yeshi.utils.generater.util; + +import org.springframework.data.annotation.Id; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; + +/** + * @author Administrator + * @title: EntityUtil + * @description: 瀹炰綋甯姪绫� + * @date 2021/10/11 12:13 + */ +public class EntityUtil { + + //鑾峰彇涓婚敭ID + public static Field getIdentifyId(Class clazz) { + Field[] fs = clazz.getDeclaredFields(); + for (Field fd : fs) { + Annotation[] as = fd.getAnnotations(); + if (as != null) + for (Annotation a : as) { + if (a instanceof Id) { + return fd; + } + } + } + return null; + } + +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/ExceptionVO.java b/src/main/java/org/yeshi/utils/generater/vo/ExceptionVO.java new file mode 100644 index 0000000..85eac0a --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/ExceptionVO.java @@ -0,0 +1,69 @@ +package org.yeshi.utils.generater.vo; + +import org.yeshi.utils.StringUtil; +import org.yeshi.utils.generater.entity.BaseData; +import org.yeshi.utils.generater.entity.ClassInfo; + +import javax.annotation.Nullable; + +/** + * @author Administrator + * @title: ExceptionVO + * @description: 鑷畾涔夊紓甯歌緭鍑� + * @date 2021/10/12 10:30 + */ +public class ExceptionVO extends BaseData { + + private ClassInfo base; + + public static class Builder { + private ClassInfo base; + private Class entity; + private String packageName; + + + public Builder setBase(@Nullable ClassInfo base) { + this.base = base; + return this; + } + + public Builder setEntity(Class entity) { + this.entity = entity; + return this; + } + + public Builder setPackageName(String packageName) { + this.packageName = packageName; + return this; + } + + public ExceptionVO build() throws Exception { + if (entity == null) { + throw new Exception("entity涓嶈兘涓虹┖"); + } + + if (this.base == null) { + this.base = new ClassInfo(Exception.class.getSimpleName(), Exception.class.getName()); + } + + if (StringUtil.isNullOrEmpty(packageName)) { + throw new Exception("packageName涓嶈兘涓虹┖"); + } + + ExceptionVO vo = new ExceptionVO(); + vo.setBase(base); + vo.setEntity(new ClassInfo(entity.getSimpleName(), entity.getName())); + vo.setPackageName(packageName); + return vo; + } + } + + + public ClassInfo getBase() { + return base; + } + + public void setBase(ClassInfo base) { + this.base = base; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/ServiceImplInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/ServiceImplInfoVO.java deleted file mode 100644 index a731968..0000000 --- a/src/main/java/org/yeshi/utils/generater/vo/ServiceImplInfoVO.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.yeshi.utils.generater.vo; - -import org.yeshi.utils.generater.entity.BaseData; -import org.yeshi.utils.generater.entity.ClassInfo; - -import java.util.List; - -public class ServiceImplInfoVO extends BaseData { - private ClassInfo service; - private ClassInfo dao; - - //鏂规硶鍒楄〃 - private List<ServiceMetodInfoVO> metodInfoList; - - - public static class Builder { - private Class entityClass; - private String packageName; - private Class daoClass; - private Class serviceClass; - - public Builder setServiceClass(Class serviceClass) { - this.serviceClass = serviceClass; - return this; - } - - public Builder setEntityClass(Class entityClass) { - this.entityClass = entityClass; - return this; - } - - public Builder setPackageName(String packageName) { - this.packageName = packageName; - return this; - } - - public Builder setDaoClass(Class daoClass) { - this.daoClass = daoClass; - return this; - } - - public ServiceImplInfoVO build() { - ServiceImplInfoVO serviceData = new ServiceImplInfoVO(); - serviceData.setEntity(entityClass); - serviceData.setEntity(new ClassInfo(entityClass.getSimpleName(), entityClass.getName())); - serviceData.setPackageName(packageName); - return serviceData; - } - - } - - public ClassInfo getService() { - return service; - } - - public void setService(ClassInfo service) { - this.service = service; - } - - public ClassInfo getDao() { - return dao; - } - - public void setDao(ClassInfo dao) { - this.dao = dao; - } - - @Override - public ClassInfo getEntity() { - return entity; - } - - @Override - public void setEntity(ClassInfo entity) { - this.entity = entity; - } - - public List<ServiceMetodInfoVO> getMetodInfoList() { - return metodInfoList; - } - - public void setMetodInfoList(List<ServiceMetodInfoVO> metodInfoList) { - this.metodInfoList = metodInfoList; - } -} - diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/AdminControllerInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminControllerInfoVO.java similarity index 79% rename from src/main/java/org/yeshi/utils/generater/vo/admin/AdminControllerInfoVO.java rename to src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminControllerInfoVO.java index 41ba237..baf35ef 100644 --- a/src/main/java/org/yeshi/utils/generater/vo/admin/AdminControllerInfoVO.java +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminControllerInfoVO.java @@ -1,19 +1,9 @@ -package org.yeshi.utils.generater.vo.admin; +package org.yeshi.utils.generater.vo.admin.controller; import org.yeshi.utils.StringUtil; -import org.yeshi.utils.generater.annotation.admin.form.Select; -import org.yeshi.utils.generater.annotation.admin.form.Text; -import org.yeshi.utils.generater.annotation.admin.form.TextArea; import org.yeshi.utils.generater.entity.ClassInfo; -import org.yeshi.utils.generater.entity.KeyValue; import org.yeshi.utils.generater.entity.admin.AdminGeneraterInfo; -import org.yeshi.utils.generater.entity.admin.FormRowData; -import org.yeshi.utils.generater.entity.admin.FormVerifyType; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import org.yeshi.utils.generater.util.EntityUtil; /** * @author Administrator @@ -28,6 +18,9 @@ private ClassInfo entity; private ClassInfo service; private ClassInfo query; + private boolean jsonp; + //涓婚敭绫诲瀷 + private String identifyIdType; public static class Builder { @@ -77,9 +70,11 @@ AdminControllerInfoVO vo = new AdminControllerInfoVO(); vo.setMapping(generaterInfo.getControllerData().mapping()); vo.setEntity(new ClassInfo(generaterInfo.getEntity().getSimpleName(), generaterInfo.getEntity().getName())); + vo.setJsonp(generaterInfo.getControllerData().jsonp()); vo.setPackageName(packageName); vo.setQueryVO(query); vo.setService(service); + vo.setIdentifyIdType(EntityUtil.getIdentifyId(generaterInfo.getEntity()).getType().getSimpleName()); return vo; } @@ -125,4 +120,24 @@ public void setQueryVO(ClassInfo query) { this.query = query; } + + public void setQuery(ClassInfo query) { + this.query = query; + } + + public boolean isJsonp() { + return jsonp; + } + + public void setJsonp(boolean jsonp) { + this.jsonp = jsonp; + } + + public String getIdentifyIdType() { + return identifyIdType; + } + + public void setIdentifyIdType(String identifyIdType) { + this.identifyIdType = identifyIdType; + } } diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/FormAddInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java similarity index 98% rename from src/main/java/org/yeshi/utils/generater/vo/admin/FormAddInfoVO.java rename to src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java index 70f16c3..049eb12 100644 --- a/src/main/java/org/yeshi/utils/generater/vo/admin/FormAddInfoVO.java +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java @@ -1,4 +1,4 @@ -package org.yeshi.utils.generater.vo.admin; +package org.yeshi.utils.generater.vo.admin.page; import org.yeshi.utils.StringUtil; import org.yeshi.utils.generater.annotation.admin.form.Select; diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/FormHttpRequestInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormHttpRequestInfoVO.java similarity index 95% rename from src/main/java/org/yeshi/utils/generater/vo/admin/FormHttpRequestInfoVO.java rename to src/main/java/org/yeshi/utils/generater/vo/admin/page/FormHttpRequestInfoVO.java index 216a4d6..f2e804e 100644 --- a/src/main/java/org/yeshi/utils/generater/vo/admin/FormHttpRequestInfoVO.java +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormHttpRequestInfoVO.java @@ -1,4 +1,4 @@ -package org.yeshi.utils.generater.vo.admin; +package org.yeshi.utils.generater.vo.admin.page; import java.util.Map; diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/FormInputRegexVerifyVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormInputRegexVerifyVO.java similarity index 92% rename from src/main/java/org/yeshi/utils/generater/vo/admin/FormInputRegexVerifyVO.java rename to src/main/java/org/yeshi/utils/generater/vo/admin/page/FormInputRegexVerifyVO.java index 5162e26..4a93e3f 100644 --- a/src/main/java/org/yeshi/utils/generater/vo/admin/FormInputRegexVerifyVO.java +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormInputRegexVerifyVO.java @@ -1,4 +1,4 @@ -package org.yeshi.utils.generater.vo.admin; +package org.yeshi.utils.generater.vo.admin.page; /** * @author Administrator diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/FormUpdateInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java similarity index 98% rename from src/main/java/org/yeshi/utils/generater/vo/admin/FormUpdateInfoVO.java rename to src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java index ece31e3..ffaf0ea 100644 --- a/src/main/java/org/yeshi/utils/generater/vo/admin/FormUpdateInfoVO.java +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java @@ -1,4 +1,4 @@ -package org.yeshi.utils.generater.vo.admin; +package org.yeshi.utils.generater.vo.admin.page; import org.yeshi.utils.StringUtil; import org.yeshi.utils.generater.annotation.admin.form.Select; diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/ListInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java similarity index 99% rename from src/main/java/org/yeshi/utils/generater/vo/admin/ListInfoVO.java rename to src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java index 2cfdeeb..26febb4 100644 --- a/src/main/java/org/yeshi/utils/generater/vo/admin/ListInfoVO.java +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java @@ -1,4 +1,4 @@ -package org.yeshi.utils.generater.vo.admin; +package org.yeshi.utils.generater.vo.admin.page; import org.yeshi.utils.StringUtil; import org.yeshi.utils.generater.annotation.admin.form.Select; diff --git a/src/main/java/org/yeshi/utils/generater/entity/MongoDBDaoData.java b/src/main/java/org/yeshi/utils/generater/vo/dao/MongoDBDaoVO.java similarity index 71% rename from src/main/java/org/yeshi/utils/generater/entity/MongoDBDaoData.java rename to src/main/java/org/yeshi/utils/generater/vo/dao/MongoDBDaoVO.java index 21637a9..d214ea5 100644 --- a/src/main/java/org/yeshi/utils/generater/entity/MongoDBDaoData.java +++ b/src/main/java/org/yeshi/utils/generater/vo/dao/MongoDBDaoVO.java @@ -1,8 +1,12 @@ -package org.yeshi.utils.generater.entity; +package org.yeshi.utils.generater.vo.dao; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; +import org.yeshi.utils.generater.entity.BaseData; +import org.yeshi.utils.generater.entity.ClassInfo; +import org.yeshi.utils.generater.entity.ColumnData; +import org.yeshi.utils.generater.entity.DaoQueryColumnData; import java.lang.annotation.Annotation; import java.lang.reflect.Field; @@ -11,11 +15,11 @@ import java.util.List; import java.util.Set; -public class MongoDBDaoData extends BaseData { +public class MongoDBDaoVO extends BaseData { private String daoName; - private String baseDaoClassName; - private String entityClassName; + private ClassInfo baseDao; + private ClassInfo entity; private Set<String> importClasses; private ColumnData identityColumn; @@ -25,43 +29,41 @@ public static class Builder { - private Class baseDaoClass; + private ClassInfo baseDao; + private Class entity; + private ClassInfo dao; - private Class entityClass; - - private String daoPackageName; - - private String daoName; - - - public Builder setBaseDaoClass(Class clazz) { - this.baseDaoClass = clazz; + public Builder setBaseDao(ClassInfo baseDao) { + this.baseDao = baseDao; return this; } - public Builder setEntityClass(Class clazz) { - this.entityClass = clazz; + public Builder setEntity(Class entity) { + this.entity = entity; return this; } - public Builder setDaoPackageName(String daoPackageName) { - this.daoPackageName = daoPackageName; + public Builder setDao(ClassInfo dao) { + this.dao = dao; return this; } - public Builder setDaoName(String daoName) { - this.daoName = daoName; - return this; - } + public MongoDBDaoVO build() throws Exception { - - public MongoDBDaoData create() { - - if (daoName == null) { - daoName = entityClass.getSimpleName() + "Dao"; + if (entity == null) { + throw new Exception("entity涓嶈兘涓虹┖"); } - Field[] fields = entityClass.getDeclaredFields(); + if (baseDao == null) { + throw new Exception("baseDao涓嶈兘涓虹┖"); + } + + if (dao == null) { + throw new Exception("dao涓嶈兘涓虹┖"); + } + + + Field[] fields = entity.getDeclaredFields(); String identityColumnName = null; String identityColumnType = null; List<ColumnData> columlist = new ArrayList<>(); @@ -71,12 +73,9 @@ if (fd.getModifiers() != 1 && fd.getModifiers() != 2) { continue; } - String columName = fd.getName(); String columnDataType = fd.getGenericType().getTypeName(); Annotation[] as = fd.getAnnotations(); - - if (columName != null) { for (Annotation a : as) { //涓婚敭 @@ -130,18 +129,17 @@ importClasses.add("java.util.ArrayList"); - MongoDBDaoData data = new MongoDBDaoData(); - data.setBaseDaoClassName(baseDaoClass.getSimpleName()); + MongoDBDaoVO data = new MongoDBDaoVO(); + data.setBaseDao(baseDao); data.setColumnDataList(columnDataList); data.setDaoQueryColumnDataList(daoQueryColumnList); - data.setDaoName(daoName); - data.setEntityClass(entityClass.getName()); - data.setEntityClassName(entityClass.getSimpleName()); + data.setDaoName(dao.getName()); + data.setEntity(new ClassInfo(entity.getSimpleName(), entity.getName())); data.setIdentityColumn(new ColumnData(identityColumnName, identityColumnType)); - data.setPackageName(daoPackageName); + data.setPackageName(dao.getClazz().replace("." + dao.getName(), "")); - importClasses.add(baseDaoClass.getName()); - importClasses.add(entityClass.getName()); + importClasses.add(baseDao.getClazz()); + importClasses.add(entity.getName()); data.setImportClasses(importClasses); return data; @@ -157,22 +155,23 @@ this.daoName = daoName; } - public String getBaseDaoClassName() { - return baseDaoClassName; + public ClassInfo getBaseDao() { + return baseDao; } - public void setBaseDaoClassName(String baseDaoClassName) { - this.baseDaoClassName = baseDaoClassName; + public void setBaseDao(ClassInfo baseDao) { + this.baseDao = baseDao; } - public String getEntityClassName() { - return entityClassName; + @Override + public ClassInfo getEntity() { + return entity; } - public void setEntityClassName(String entityClassName) { - this.entityClassName = entityClassName; + @Override + public void setEntity(ClassInfo entity) { + this.entity = entity; } - public ColumnData getIdentityColumn() { return identityColumn; diff --git a/src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java b/src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java new file mode 100644 index 0000000..ee9a630 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java @@ -0,0 +1,208 @@ +package org.yeshi.utils.generater.vo.dao; + +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.Transient; +import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; +import org.yeshi.utils.generater.entity.*; +import org.yeshi.utils.generater.mybatis.Column; +import org.yeshi.utils.generater.mybatis.ColumnParseUtil; +import org.yeshi.utils.generater.mybatis.Table; +import org.yeshi.utils.generater.vo.ExceptionVO; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class MyBatisDBDaoVO extends BaseData { + + private ClassInfo mapper; + private ClassInfo baseMapper; + //涓婚敭 + private MybatisColumnData identify; + //灞炴�� + private List<MybatisColumnData> columnList; + private List<DaoQueryColumnData> queryList; + private String table; + + public static class Builder { + + private ClassInfo baseMapper; + private Class entity; + private ClassInfo mapper; + + public Builder setBaseMapper(ClassInfo baseMapper) { + this.baseMapper = baseMapper; + return this; + } + + public Builder setEntity(Class entity) { + this.entity = entity; + return this; + } + + public Builder setMapper(ClassInfo mapper) { + this.mapper = mapper; + return this; + } + + //鑾峰彇table + + private String getTableName(Class clz) throws Exception { + Annotation[] as = clz.getAnnotations(); + for (Annotation a : as) { + if (a instanceof Table) { + Table t = (Table) a; + return t.value(); + } + } + throw new Exception("鏈幏鍙栧埌琛ㄥ悕绉�"); + } + + public MyBatisDBDaoVO build() throws Exception { + + if (entity == null) { + throw new Exception("entity涓嶈兘涓虹┖"); + } + + if (baseMapper == null) { + throw new Exception("baseMapper涓嶈兘涓虹┖"); + } + + if (mapper == null) { + throw new Exception("mapper涓嶈兘涓虹┖"); + } + + //鑾峰彇table鍚嶇О + String table = getTableName(entity); + + Field[] fields = entity.getDeclaredFields(); + MybatisColumnData identity = null; + List<MybatisColumnData> columlist = new ArrayList<>(); + List<DaoQueryColumnData> daoQueryColumnList = new ArrayList<>(); + for (Field fd : fields) { + //private/public 闈瀎inal锛宻tatic灞炴�ф墠浼氬弬涓庤В鏋� + if (fd.getModifiers() != 1 && fd.getModifiers() != 2) { + continue; + } + boolean valid = true; + + Annotation[] as = fd.getAnnotations(); + for (Annotation a : as) { + //涓嶅弬涓庤В鏋� + if (a instanceof Transient || a instanceof java.beans.Transient) { + valid = false; + break; + } + } + + if (!valid) { + continue; + } + + String property = fd.getName(); + String column = fd.getName(); + for (Annotation a : as) { + //涓嶅弬涓庤В鏋� + if (a instanceof Column) { + column = ((Column) a).name(); + break; + } + } + + MybatisColumnData columData = new MybatisColumnData(column, property, fd.getType().getSimpleName(), ColumnParseUtil.getJDBCType(fd.getType().getName())); + + + for (Annotation a : as) { + //涓婚敭 + if (a instanceof Id) { + identity = columData; + valid = false; + break; + } + } + + if (!valid) { + continue; + } + + columlist.add(columData); + + + //鑾峰彇鏌ヨ鏉′欢 + for (Annotation a : as) { + if (a instanceof DaoQueryCondition) { + daoQueryColumnList.add(new DaoQueryColumnData(columData.getProperty(), columData, fd.getType().getSimpleName(), ((DaoQueryCondition) a).queryType())); + break; + } + } + } + + if (identity == null) + throw new Exception("灏氭湭鎸囧畾涓婚敭"); + + + MyBatisDBDaoVO vo = new MyBatisDBDaoVO(); + vo.setBaseMapper(baseMapper); + vo.setEntity(new ClassInfo(entity.getSimpleName(), entity.getName())); + vo.setIdentify(identity); + vo.setTable(table); + vo.setQueryList(daoQueryColumnList); + vo.setPackageName(mapper.getClazz().replace("." + mapper.getName(), "")); + vo.setMapper(mapper); + vo.setColumnList(columlist); + return vo; + } + } + + public ClassInfo getMapper() { + return mapper; + } + + public void setMapper(ClassInfo mapper) { + this.mapper = mapper; + } + + public ClassInfo getBaseMapper() { + return baseMapper; + } + + public void setBaseMapper(ClassInfo baseMapper) { + this.baseMapper = baseMapper; + } + + + public MybatisColumnData getIdentify() { + return identify; + } + + public void setIdentify(MybatisColumnData identify) { + this.identify = identify; + } + + public List<MybatisColumnData> getColumnList() { + return columnList; + } + + public void setColumnList(List<MybatisColumnData> columnList) { + this.columnList = columnList; + } + + public List<DaoQueryColumnData> getQueryList() { + return queryList; + } + + public void setQueryList(List<DaoQueryColumnData> queryList) { + this.queryList = queryList; + } + + public String getTable() { + return table; + } + + public void setTable(String table) { + this.table = table; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/service/ServiceImplInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/service/ServiceImplInfoVO.java new file mode 100644 index 0000000..0920e4f --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/service/ServiceImplInfoVO.java @@ -0,0 +1,214 @@ +package org.yeshi.utils.generater.vo.service; + +import org.yeshi.utils.FreemarkerUtils; +import org.yeshi.utils.StringUtil; +import org.yeshi.utils.generater.entity.BaseData; +import org.yeshi.utils.generater.entity.ClassInfo; +import org.yeshi.utils.generater.util.EntityUtil; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +public class ServiceImplInfoVO extends BaseData { + private ClassInfo service; + private ClassInfo dao; + //鏂规硶鍒楄〃 + private List<ServiceMetodInfoVO> metodInfoList; + private ClassInfo daoQuery; + private ClassInfo query; + + + public static class Builder { + private Class entity; + private String packageName; + private ClassInfo dao; + private ClassInfo service; + private ClassInfo query; + private ClassInfo daoQuery; + + public Builder setEntity(Class entity) { + this.entity = entity; + return this; + } + + public Builder setPackageName(String packageName) { + this.packageName = packageName; + return this; + } + + public Builder setDao(ClassInfo dao) { + this.dao = dao; + return this; + } + + public Builder setService(ClassInfo service) { + this.service = service; + return this; + } + + public Builder setQuery(ClassInfo query) { + this.query = query; + return this; + } + + public Builder setDaoQuery(ClassInfo daoQuery) { + this.daoQuery = daoQuery; + return this; + } + + private void validParams() throws Exception { + if (entity == null) { + throw new Exception("entity涓嶈兘涓虹┖"); + } + if (packageName == null) { + throw new Exception("packageName涓嶈兘涓虹┖"); + } + if (dao == null) { + throw new Exception("dao涓嶈兘涓虹┖"); + } + if (service == null) { + throw new Exception("service涓嶈兘涓虹┖"); + } + if (query == null) { + throw new Exception("query涓嶈兘涓虹┖"); + } + if (daoQuery == null) { + throw new Exception("daoQuery涓嶈兘涓虹┖"); + } + } + + private String getMethodContentTemplatePath(String type) { + String basePath = "generater/service/method/impl/"; + if (dao.getName().endsWith("Mapper")) { + basePath += "mybatis/"; + } else { + basePath += "mongo/"; + } + + switch (type) { + case "list": + return basePath + "list.ftl"; + case "count": + return basePath + "count.ftl"; + case "add": + return basePath + "add.ftl"; + case "save": + return basePath + "save.ftl"; + case "get": + return basePath + "selectByPrimaryKey.ftl"; + case "update": + return basePath + "updateSlective.ftl"; + case "delete": + return basePath + "delete.ftl"; + } + return null; + } + + public ServiceImplInfoVO build() throws Exception { + validParams(); + Field identifyId = EntityUtil.getIdentifyId(entity); + if (identifyId == null) { + throw new Exception("灏氭湭鎵惧埌涓婚敭灞炴��"); + } + + ServiceImplInfoVO serviceData = new ServiceImplInfoVO(); + serviceData.setDao(dao); + serviceData.setService(service); + serviceData.setEntity(new ClassInfo(entity.getSimpleName(), entity.getName())); + serviceData.setPackageName(packageName); + serviceData.setDaoQuery(daoQuery); + serviceData.setQuery(query); + + //璁剧疆鎺ュ彛 + List<ServiceMetodInfoVO> metodInfoVOList = new ArrayList<>(); + /*******娣诲姞鏂规硶寮�濮�*******/ + List<String> params = null; + ServiceMetodInfoVO metodInfo = null; + //list鏂规硶 + params = new ArrayList<>(); + params.add(query.getName() + " " + StringUtil.firstCharToLower(query.getName())); + params.add(" int page"); + params.add(" int pageSize"); + metodInfo = new ServiceMetodInfoVO("public", String.format("List<%s>", serviceData.getEntity().getName()), "list", StringUtil.concat(params, ",")); + metodInfo.setContent(FreemarkerUtils.generateInputStream(serviceData, getClass().getClassLoader().getResourceAsStream(getMethodContentTemplatePath("list")))); + metodInfoVOList.add(metodInfo); + //count鏂规硶 + params = new ArrayList<>(); + params.add(query.getName() + " " + StringUtil.firstCharToLower(query.getName())); + metodInfo = new ServiceMetodInfoVO("public", "long", "count", StringUtil.concat(params, ",")); + metodInfo.setContent(FreemarkerUtils.generateInputStream(serviceData, getClass().getClassLoader().getResourceAsStream(getMethodContentTemplatePath("count")))); + metodInfoVOList.add(metodInfo); + //get鏂规硶 + params = new ArrayList<>(); + params.add(identifyId.getType().getSimpleName() + " id"); + metodInfo = new ServiceMetodInfoVO("public", serviceData.getEntity().getName(), "get", StringUtil.concat(params, ",")); + metodInfo.setContent(FreemarkerUtils.generateInputStream(serviceData, getClass().getClassLoader().getResourceAsStream(getMethodContentTemplatePath("get")))); + metodInfoVOList.add(metodInfo); + //add鏂规硶 + params = new ArrayList<>(); + params.add(serviceData.getEntity().getName() + " " + StringUtil.firstCharToLower(serviceData.getEntity().getName())); + metodInfo = new ServiceMetodInfoVO("public", "void", "add", StringUtil.concat(params, ",")); + metodInfo.setContent(FreemarkerUtils.generateInputStream(serviceData, getClass().getClassLoader().getResourceAsStream(getMethodContentTemplatePath("add")))); + metodInfoVOList.add(metodInfo); + //update鏂规硶 + params = new ArrayList<>(); + params.add(serviceData.getEntity().getName() + " " + StringUtil.firstCharToLower(serviceData.getEntity().getName())); + metodInfo = new ServiceMetodInfoVO("public", "void", "update", StringUtil.concat(params, ",")); + metodInfo.setContent(FreemarkerUtils.generateInputStream(serviceData, getClass().getClassLoader().getResourceAsStream(getMethodContentTemplatePath("update")))); + metodInfoVOList.add(metodInfo); + //delete鏂规硶 + params = new ArrayList<>(); + params.add(String.format("List<%s> idList", identifyId.getType().getSimpleName())); + metodInfo = new ServiceMetodInfoVO("public", String.format("void", serviceData.getEntity().getName()), "delete", StringUtil.concat(params, ",")); + metodInfo.setContent(FreemarkerUtils.generateInputStream(serviceData, getClass().getClassLoader().getResourceAsStream(getMethodContentTemplatePath("delete")))); + metodInfoVOList.add(metodInfo); + + /*******娣诲姞鏂规硶缁撴潫*******/ + serviceData.setMetodInfoList(metodInfoVOList); + return serviceData; + } + + } + + public ClassInfo getService() { + return service; + } + + public void setService(ClassInfo service) { + this.service = service; + } + + public ClassInfo getDao() { + return dao; + } + + public void setDao(ClassInfo dao) { + this.dao = dao; + } + + public List<ServiceMetodInfoVO> getMetodInfoList() { + return metodInfoList; + } + + public void setMetodInfoList(List<ServiceMetodInfoVO> metodInfoList) { + this.metodInfoList = metodInfoList; + } + + public ClassInfo getDaoQuery() { + return daoQuery; + } + + public void setDaoQuery(ClassInfo daoQuery) { + this.daoQuery = daoQuery; + } + + public ClassInfo getQuery() { + return query; + } + + public void setQuery(ClassInfo query) { + this.query = query; + } +} + diff --git a/src/main/java/org/yeshi/utils/generater/vo/ServiceInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/service/ServiceInfoVO.java similarity index 60% rename from src/main/java/org/yeshi/utils/generater/vo/ServiceInfoVO.java rename to src/main/java/org/yeshi/utils/generater/vo/service/ServiceInfoVO.java index 67924f7..3e7610e 100644 --- a/src/main/java/org/yeshi/utils/generater/vo/ServiceInfoVO.java +++ b/src/main/java/org/yeshi/utils/generater/vo/service/ServiceInfoVO.java @@ -1,9 +1,11 @@ -package org.yeshi.utils.generater.vo; +package org.yeshi.utils.generater.vo.service; import org.yeshi.utils.StringUtil; import org.yeshi.utils.generater.entity.BaseData; import org.yeshi.utils.generater.entity.ClassInfo; +import org.yeshi.utils.generater.util.EntityUtil; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; @@ -12,6 +14,7 @@ private ClassInfo dao; //鏂规硶鍒楄〃 private List<ServiceMetodInfoVO> metodInfoList; + private ClassInfo query; public static class Builder { @@ -48,12 +51,62 @@ } + private String getRemarksLine(String content) { + return "\t * " + content + "\n"; + } + + //鑾峰彇鏂规硶鐨勬敞閲� + private String getMethodRemarks(String type) { + StringBuilder builder = new StringBuilder(); + builder.append("/**\n"); + switch (type) { + case "list": + builder.append(getRemarksLine("鑾峰彇鍒楄〃")); + builder.append(getRemarksLine("@param " + StringUtil.firstCharToLower(query.getName()))); + builder.append(getRemarksLine("@param page")); + builder.append(getRemarksLine("@param pageSize")); + builder.append(getRemarksLine("@return")); + break; + default: + builder.append(getRemarksLine("")); + } + + builder.append("\t */"); + return builder.toString(); + } + + private void validParams() throws Exception { + if (entity == null) { + throw new Exception("entity涓嶈兘涓虹┖"); + } + if (packageName == null) { + throw new Exception("packageName涓嶈兘涓虹┖"); + } + if (dao == null) { + throw new Exception("dao涓嶈兘涓虹┖"); + } + if (service == null) { + throw new Exception("service涓嶈兘涓虹┖"); + } + if (query == null) { + throw new Exception("query涓嶈兘涓虹┖"); + } + + } + + public ServiceInfoVO build() throws Exception { + validParams(); + Field identifyId = EntityUtil.getIdentifyId(entity); + if (identifyId == null) { + throw new Exception("灏氭湭鎵惧埌涓婚敭灞炴��"); + } ServiceInfoVO serviceData = new ServiceInfoVO(); serviceData.setDao(dao); serviceData.setService(service); serviceData.setEntity(new ClassInfo(entity.getSimpleName(), entity.getName())); serviceData.setPackageName(packageName); + serviceData.setQuery(query); //璁剧疆鎺ュ彛 List<ServiceMetodInfoVO> metodInfoVOList = new ArrayList<>(); /*******娣诲姞鏂规硶寮�濮�*******/ @@ -62,38 +115,45 @@ //list鏂规硶 params = new ArrayList<>(); params.add(query.getName() + " " + StringUtil.firstCharToLower(query.getName())); - params.add("int page"); - params.add("int pageSize"); + params.add(" int page"); + params.add(" int pageSize"); metodInfo = new ServiceMetodInfoVO("public", String.format("List<%s>", serviceData.getEntity().getName()), "list", StringUtil.concat(params, ",")); + metodInfo.setNote(getMethodRemarks("list")); + metodInfoVOList.add(metodInfo); //count鏂规硶 params = new ArrayList<>(); params.add(query.getName() + " " + StringUtil.firstCharToLower(query.getName())); metodInfo = new ServiceMetodInfoVO("public", "long", "count", StringUtil.concat(params, ",")); + metodInfo.setNote(getMethodRemarks("count")); metodInfoVOList.add(metodInfo); //get鏂规硶 params = new ArrayList<>(); - params.add("String id"); + params.add(identifyId.getType().getSimpleName() + " id"); metodInfo = new ServiceMetodInfoVO("public", serviceData.getEntity().getName(), "get", StringUtil.concat(params, ",")); + metodInfo.setNote(getMethodRemarks("get")); metodInfoVOList.add(metodInfo); //add鏂规硶 params = new ArrayList<>(); params.add(serviceData.getEntity().getName() + " " + StringUtil.firstCharToLower(serviceData.getEntity().getName())); metodInfo = new ServiceMetodInfoVO("public", "void", "add", StringUtil.concat(params, ",")); + metodInfo.setNote(getMethodRemarks("add")); metodInfoVOList.add(metodInfo); //update鏂规硶 params = new ArrayList<>(); params.add(serviceData.getEntity().getName() + " " + StringUtil.firstCharToLower(serviceData.getEntity().getName())); metodInfo = new ServiceMetodInfoVO("public", "void", "update", StringUtil.concat(params, ",")); + metodInfo.setNote(getMethodRemarks("update")); metodInfoVOList.add(metodInfo); //delete鏂规硶 params = new ArrayList<>(); - params.add("List<String> idList"); + params.add(String.format("List<%s> idList", identifyId.getType().getSimpleName())); metodInfo = new ServiceMetodInfoVO("public", String.format("void", serviceData.getEntity().getName()), "delete", StringUtil.concat(params, ",")); + metodInfo.setNote(getMethodRemarks("delete")); metodInfoVOList.add(metodInfo); /*******娣诲姞鏂规硶缁撴潫*******/ - + serviceData.setMetodInfoList(metodInfoVOList); return serviceData; } @@ -124,5 +184,11 @@ this.metodInfoList = metodInfoList; } + public ClassInfo getQuery() { + return query; + } + public void setQuery(ClassInfo query) { + this.query = query; + } } diff --git a/src/main/java/org/yeshi/utils/generater/vo/ServiceMetodInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/service/ServiceMetodInfoVO.java similarity index 96% rename from src/main/java/org/yeshi/utils/generater/vo/ServiceMetodInfoVO.java rename to src/main/java/org/yeshi/utils/generater/vo/service/ServiceMetodInfoVO.java index cbb7d35..b34a46d 100644 --- a/src/main/java/org/yeshi/utils/generater/vo/ServiceMetodInfoVO.java +++ b/src/main/java/org/yeshi/utils/generater/vo/service/ServiceMetodInfoVO.java @@ -1,4 +1,4 @@ -package org.yeshi.utils.generater.vo; +package org.yeshi.utils.generater.vo.service; /** * @author Administrator diff --git a/src/main/resources/exception.template b/src/main/resources/exception.template deleted file mode 100644 index 1352fe7..0000000 --- a/src/main/resources/exception.template +++ /dev/null @@ -1,13 +0,0 @@ -package ${packageName}; - -import ${baseClass}; - -public class ${entityClassName}Exception extends ${baseClassName}{ - - - public ${entityClassName}Exception(int code, String msg) { - super(code, msg); - } - - -} diff --git a/src/main/resources/generater/admin/adminController.template b/src/main/resources/generater/admin/adminController.template index f7d8311..6ac0695 100644 --- a/src/main/resources/generater/admin/adminController.template +++ b/src/main/resources/generater/admin/adminController.template @@ -22,14 +22,24 @@ @RequestMapping("${mapping}") public class AdminAppController { - <#assign serviceObjName=${service.name?uncap_first}"> + <#assign serviceObjName="${service.name?uncap_first}"> + <#assign entityObjName="${entity.name?uncap_first}"> @Resource private ${service.name} ${serviceObjName}; + + private String loadPrint(String callback, String root){ + <#if jsonp> + return JsonUtil.loadJSONP(callback,root); + <#else> + return root; + </#if> + } + @ResponseBody @RequestMapping("list") - public String list(${query.name} query, int page, int limit) { - List<${entityName}> list = ${serviceObjName}.list(query,page,limit); + public String list(${query.name} query, int page, int limit, String callback) { + List<${entity.name}> list = ${serviceObjName}.list(query,page,limit); long count = ${serviceObjName}.count(query); JSONObject data = new JSONObject(); Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() { @@ -42,60 +52,53 @@ data.put("list", gson.toJson(list)); data.put("count", count); - return JsonUtil.loadTrueResult(data); + return loadPrint(callback,JsonUtil.loadTrueResult(data)); } @ResponseBody @RequestMapping("delete") - public String delete(String ids) { - JSONArray array = JSONArray.fromObject(ids); - List<String> idList=new ArrayList<>(); - for (int i = 0; i < array.size(); i++) { - idList.add(array.optString(i)); - } + public String delete(String ids, String callback) { + Type type = new TypeToken<List<${identifyIdType}>>(){}.get(); + List<${identifyIdType}> idList=new Gson().from(ids,type); ${serviceObjName}.delete(idList); - return JsonUtil.loadTrueResult(""); + return loadPrint(callback, JsonUtil.loadTrueResult("")); } - - - - @ResponseBody @RequestMapping("add") - public String add(${entity.name} bean, HttpSession session) { + public String add(${entity.name} bean, HttpSession session, String callback) { try{ ${serviceObjName}.add(bean); - return JsonUtil.loadTrueResult(""); + return loadPrint(callback, JsonUtil.loadTrueResult("")); }catch(Exception e){ - return JsonUtil.loadFalseResult(e.getMessage); + return loadPrint(callback, JsonUtil.loadFalseResult(e.getMessage)); } } @ResponseBody @RequestMapping("get") - public String add(String id, HttpSession session) { - try{ - ${serviceObjName}.get(id); - return JsonUtil.loadTrueResult(""); - }catch(Exception e){ - return JsonUtil.loadFalseResult(e.getMessage); + public String get(${identifyIdType} id, HttpSession session, String callback) { + ${entity.name} entity = ${serviceObjName}.get(id); + if (entity !=null){ + return loadPrint(callback,JsonUtil.loadTrueResult(entity)); + } else { + return loadPrint(callback,JsonUtil.loadFalseResult("ID涓嶅瓨鍦�")); } } @ResponseBody @RequestMapping("update") - public String update(${entity.name} bean, HttpSession session) { - if (app.getId() == null) { - return JsonUtil.loadFalseResult("ID涓嶈兘涓虹┖"); + public String update(${entity.name} bean, HttpSession session,String callback) { + if (bean.getId() == null) { + return loadPrint(callback, JsonUtil.loadFalseResult("ID涓嶈兘涓虹┖")); } try{ ${serviceObjName}.updateSelective(bean); }catch(Exception e){ - return JsonUtil.loadFalseResult(e.getMessage); + return loadPrint(callback,JsonUtil.loadFalseResult(e.getMessage)); } - return JsonUtil.loadTrueResult(""); + return loadPrint(callback,JsonUtil.loadTrueResult("")); } diff --git a/src/main/resources/generater/dao/mongoDBDao.template b/src/main/resources/generater/dao/mongoDBDao.template new file mode 100644 index 0000000..eeea6ba --- /dev/null +++ b/src/main/resources/generater/dao/mongoDBDao.template @@ -0,0 +1,92 @@ +package ${packageName}; + +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Repository; + +<#list importClasses as value> +import ${value}; +</#list> + + +@Repository +public class ${daoName} extends ${baseDao.name}<${entity.name}>{ + + public void updateSelective(${entity.name} bean) { + Query query = new Query(); + Update update=new Update(); + query.addCriteria(Criteria.where("${identityColumn.columnName}").is(bean.${identityColumn.columnMehtod})); + <#if columnDataList??> + <#list columnDataList as value> + if(bean.${value.columnMehtod} != null) { + update.set("${value.columnName}", bean.${value.columnMehtod}); + } + </#list> + </#if> + update.set("updateTime", new Date()); + update(query, update); + } + + + public List<${entity.name}> list(DaoQuery daoQuery){ + Query query = getQuery(daoQuery); + if (daoQuery.sortList!=null && daoQuery.sortList.size()>0){ + query.with(new Sort(daoQuery.sortList)); + } + query.skip(daoQuery.start); + query.limit(daoQuery.count); + return findList(query); + } + + public long count(DaoQuery daoQuery){ + Query query=getQuery(daoQuery); + return count(query); + } + + private Query getQuery(DaoQuery daoQuery){ + List<Criteria> andList=new ArrayList<>(); + <#list daoQueryColumnDataList as value> + <#if (value.type!"") == "Date"> + if(daoQuery.min${value.columnName?cap_first}!=null){ + andList.add(Criteria.where("${value.columnName}").gte(daoQuery.min${value.columnName?cap_first})); + } + if(daoQuery.max${value.columnName?cap_first}!=null){ + andList.add(Criteria.where("${value.columnName}").lt(daoQuery.max${value.columnName?cap_first})); + } + <#else> + if(daoQuery.${value.columnName}!=null){ + <#if (value.queryType!"") == "equal"> + andList.add(Criteria.where("${value.columnName}").is(daoQuery.${value.columnName})); + <#else> + andList.add(Criteria.where("${value.columnName}").regex(daoQuery.${value.columnName})); + </#if> + } + </#if> + </#list> + Query query=new Query(); + Criteria[] ands=new Criteria[andList.size()]; + andList.toArray(ands); + if(ands.length>0){ + query.addCriteria(new Criteria().andOperator(ands)); + } + return query; + } + + public static class DaoQuery{ + <#if daoQueryColumnDataList??> + <#list daoQueryColumnDataList as value> + <#if (value.type!"") == "Date"> + public ${value.type} min${value.columnName?cap_first}; + public ${value.type} max${value.columnName?cap_first}; + <#else> + public ${value.type} ${value.columnName}; + </#if> + </#list> + </#if> + public int start; + public int count; + public List<Sort.Order> sortList; + } +} diff --git a/src/main/resources/generater/dao/mybatisDBDao.template b/src/main/resources/generater/dao/mybatisDBDao.template new file mode 100644 index 0000000..3e7fd8a --- /dev/null +++ b/src/main/resources/generater/dao/mybatisDBDao.template @@ -0,0 +1,34 @@ +package ${packageName}; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import ${baseMapper.clazz}; +import ${entity.clazz}; + +public interface ${mapper.name} extends ${baseMapper.name}<${entity.name}> { + + ${entity.name} selectByPrimaryKeyForUpdate(@Param("id") ${identify.type} id); + + List<${entity.name}> list(@Param("query") DaoQuery query); + + long count(@Param("query") DaoQuery query); + + public static class DaoQuery{ + <#if queryList??> + <#list queryList as value> + <#if (value.type!"") == "Date"> + public ${value.type} min${value.columnName?cap_first}; + public ${value.type} max${value.columnName?cap_first}; + <#else> + public ${value.type} ${value.columnName}; + </#if> + </#list> + </#if> + public long start; + public int count; + public List<String> sortList; + } + +} \ No newline at end of file diff --git a/src/main/resources/generater/dao/mybatisDBXML.ftl b/src/main/resources/generater/dao/mybatisDBXML.ftl new file mode 100644 index 0000000..6456016 --- /dev/null +++ b/src/main/resources/generater/dao/mybatisDBXML.ftl @@ -0,0 +1,143 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="${mapper.clazz}"> + <resultMap id="BaseResultMap" + type="${entity.clazz}"> + <id column="${identify.column}" property="${identify.property}" jdbcType="${identify.jdbcType}"/> + <#list columnList as column> + <result column="${column.column}" property="${column.property}" jdbcType="${column.jdbcType}"/> + </#list> + </resultMap> + + <sql id="Base_Column_List"> + <trim suffixOverrides=","> + <#list columnList as column>${column.column},</#list> + </trim> + </sql> + + <select id="selectByPrimaryKey" resultMap="BaseResultMap" + parameterType="java.lang.Long"> + select + <include refid="Base_Column_List"/> + from ${table} where ${identify.column} = <#noparse>#{</#noparse>id, jdbcType=${identify.jdbcType}} + </select> + + <select id="selectByPrimaryKeyForUpdate" resultMap="BaseResultMap" + parameterType="java.lang.Long"> + select + <include refid="Base_Column_List"/> + from ${table} where ${identify.column} = <#noparse>#{</#noparse>id,jdbcType=${identify.jdbcType}} for update + </select> + + + <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> + delete from + ${table} where ${identify.column} = <#noparse>#{</#noparse>id,jdbcType=${identify.jdbcType}} + </delete> + <insert id="insert" + parameterType="${entity.class}" + useGeneratedKeys="true" keyProperty="${identify.property}"> + insert into + ${table} + <trim prefix="(" suffix=")" suffixOverrides=","> + <#list columnList as column> + ${column.column}}, + </#list> + + </trim> + values + <trim prefix="(" suffix=")" suffixOverrides=","> + <#list columnList as column> + <#noparse>#{</#noparse>${column.property}},jdbcType=${column.jdbcType}}, + </#list> + + </trim> + + </insert> + <insert id="insertSelective" + parameterType="${entity.class}" + useGeneratedKeys="true" keyProperty="${identify.property}"> + insert into ${table} + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="${identify.property} != null">${identify.column},</if> + <#list columnList as column> + <if test="${column.property} != null">${column.column},</if> + </#list> + </trim> + values + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="${identify.property} != null"><#noparse>#{</#noparse>${identify.property},jdbcType=${identify.jdbcType}},</if> + <#list columnList as column> + <if test="${column.property} != null"><#noparse>#{</#noparse>${column.property},jdbcType=${column.jdbcType}},</if> + </#list> + </trim> + </insert> + <update id="updateByPrimaryKey" + parameterType="${entity.class}"> + update ${table} + <set> + <if test="${identify.property} != null">${identify.column} = <#noparse>#{</#noparse>${identify.property},jdbcType=${identify.jdbcType}},</if> + <#list columnList as column> + <if test="${column.property} != null">${column.column} = <#noparse>#{</#noparse>${column.property},jdbcType=${column.jdbcType}},</if> + </#list> + </set> + where ${identify.column} = <#noparse>#{</#noparse>${identify.property},jdbcType=${identify.jdbcType}} + </update> + <update id="updateByPrimaryKeySelective" + parameterType="${entity.class}"> + update ${table} + <set> + <#list columnList as column> + <if test="${column.property} != null">${column.column} = <#noparse>#{</#noparse>${column.property},jdbcType=${column.jdbcType}},</if> + </#list> + </set> + where ${identify.column} = <#noparse>#{</#noparse>${identify.property},jdbcType=${identify.jdbcType}} + </update> + + <sql id="listWhere"> + <#list queryList as query> + <if test="query.${query.columnName}!=null"> + <#if query.queryType=="equal"> + and ${query.columnData.column} = <#noparse>#{</#noparse>query.${query.columnName}} + </#if> + <#if query.queryType=="start"> + and ${query.columnData.column} like '<#noparse>#{</#noparse>query.${query.columnName}}%' + </#if> + <#if query.queryType=="end"> + and ${query.columnData.column} like '%<#noparse>#{</#noparse>query.${query.columnName}}' + </#if> + <#if query.queryType=="contains"> + and ${query.columnData.column} = '%<#noparse>#{</#noparse>query.${query.columnName}}%' + </#if> + </if> + </#list> + </sql> + + <select id="list" + resultMap="BaseResultMap"> + SELECT * FROM ${table} + <where> + <include refid="listWhere"> + </include> + </where> + <if test="query.sortList!=null"> + <foreach collection="query.sortList" open=" order by " separator="," item="item"> + <#noparse>#{</#noparse>item} + </foreach> + </if> + limit <#noparse>#{</#noparse>query.start},<#noparse>#{</#noparse>query.count} + </select> + + + <select id="count" + resultType="java.lang.Long"> + SELECT count(*) FROM ${table} + <where> + <include refid="listWhere"> + </include> + </where> + </select> + + +</mapper> diff --git a/src/main/resources/generater/exception.template b/src/main/resources/generater/exception.template new file mode 100644 index 0000000..f982635 --- /dev/null +++ b/src/main/resources/generater/exception.template @@ -0,0 +1,11 @@ +package ${packageName}; + +import ${base.clazz}; + +public class ${entity.name}Exception extends ${base.name}{ + + public ${entity.name}Exception(int code, String msg) { + super(code, msg); + } + +} diff --git a/src/main/resources/generater/mongoDBDao.template b/src/main/resources/generater/mongoDBDao.template deleted file mode 100644 index cc5ba65..0000000 --- a/src/main/resources/generater/mongoDBDao.template +++ /dev/null @@ -1,92 +0,0 @@ -package ${packageName}; - -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Repository; - -<#list importClasses as value> -import ${value}; -</#list> - - -@Repository -public class ${daoName} extends ${baseDaoClassName}<${entityClassName}>{ - - public void updateSelective(${entityClassName} bean) { - Query query = new Query(); - Update update=new Update(); - query.addCriteria(Criteria.where("${identityColumn.columnName}").is(bean.${identityColumn.columnMehtod})); - <#if columnDataList??> - <#list columnDataList as value> - if(bean.${value.columnMehtod} != null) { - update.set("${value.columnName}", bean.${value.columnMehtod}); - } - </#list> - </#if> - update.set("updateTime", new Date()); - update(query, update); - } - - - public List<${entityClassName}> list(DaoQuery daoQuery){ - Query query=getQuery(daoQuery); - if(daoQuery.sortList!=null&&daoQuery.sortList.size()>0){ - query.with(new Sort(daoQuery.sortList)); - } - query.skip(daoQuery.start); - query.limit(daoQuery.count); - return findList(query); - } - - public long count(DaoQuery daoQuery){ - Query query=getQuery(daoQuery); - return count(query); - } - - private Query getQuery(DaoQuery daoQuery){ - List<Criteria> andList=new ArrayList<>(); - <#list daoQueryColumnDataList as value> - <#if (value.type!"") == "Date"> - if(daoQuery.min${value.columnName?cap_first}!=null){ - andList.add(Criteria.where("${value.columnName}").gte(daoQuery.min${value.columnName?cap_first})); - } - if(daoQuery.max${value.columnName?cap_first}!=null){ - andList.add(Criteria.where("${value.columnName}").lt(daoQuery.max${value.columnName?cap_first})); - } - <#else> - if(daoQuery.${value.columnName}!=null){ - <#if (value.queryType!"") == "equal"> - andList.add(Criteria.where("${value.columnName}").is(daoQuery.${value.columnName})); - <#else> - andList.add(Criteria.where("${value.columnName}").regex(daoQuery.${value.columnName})); - </#if> - } - </#if> - </#list> - Query query=new Query(); - Criteria[] ands=new Criteria[andList.size()]; - andList.toArray(ands); - if(ands.length>0){ - query.addCriteria(new Criteria().andOperator(ands)); - } - return query; - } - - public static class DaoQuery{ - <#if daoQueryColumnDataList??> - <#list daoQueryColumnDataList as value> - <#if (value.type!"") == "Date"> - public ${value.type} min${value.columnName?cap_first}; - public ${value.type} max${value.columnName?cap_first}; - <#else> - public ${value.type} ${value.columnName}; - </#if> - </#list> - </#if> - public int start; - public int count; - public List<Sort.Order> sortList; - } -} diff --git a/src/main/resources/generater/service/method/add.template b/src/main/resources/generater/service/method/add.template deleted file mode 100644 index a34478d..0000000 --- a/src/main/resources/generater/service/method/add.template +++ /dev/null @@ -1,4 +0,0 @@ -//鏌ヨ涓婚敭ID鏄惁瀛樺湪 - dao.find(if(${entity.name}.getId())) - - diff --git a/src/main/resources/generater/service/method/count.template b/src/main/resources/generater/service/method/count.template deleted file mode 100644 index fd83e79..0000000 --- a/src/main/resources/generater/service/method/count.template +++ /dev/null @@ -1,14 +0,0 @@ -package ${packageName}; - -import ${entityClass}; - - -public interface ${serviceClassName} { - -<#list metodInfoList as method> - ${method.note} - ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}); - -</#list> - -} diff --git a/src/main/resources/generater/service/method/delete.template b/src/main/resources/generater/service/method/delete.template deleted file mode 100644 index fd83e79..0000000 --- a/src/main/resources/generater/service/method/delete.template +++ /dev/null @@ -1,14 +0,0 @@ -package ${packageName}; - -import ${entityClass}; - - -public interface ${serviceClassName} { - -<#list metodInfoList as method> - ${method.note} - ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}); - -</#list> - -} diff --git a/src/main/resources/generater/service/method/impl/mongo/add.ftl b/src/main/resources/generater/service/method/impl/mongo/add.ftl new file mode 100644 index 0000000..36ea557 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mongo/add.ftl @@ -0,0 +1,13 @@ + +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign entityObjName="${entity.name?uncap_first}" > + //鏌ヨ涓婚敭ID鏄惁瀛樺湪 + if(${daoObjName}.get(${entityObjName}.getId())!=null){ + throw Exception("宸插瓨鍦�"); + } + + if(${entityObjName}.getCreateTime()==null){ + ${entityObjName}.setCreateTime(new Date()); + } + //淇濆瓨 + ${daoObjName}.save(bean); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mongo/count.ftl b/src/main/resources/generater/service/method/impl/mongo/count.ftl new file mode 100644 index 0000000..21de435 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mongo/count.ftl @@ -0,0 +1,5 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign queryObjName="${query.name?uncap_first}" > + ${daoQuery.name} daoQuery = new ${daoQuery.name}(); + BeanUtil.copyProperties(${queryObjName}, daoQuery); + ${daoObjName}.count(daoQuery); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mongo/delete.ftl b/src/main/resources/generater/service/method/impl/mongo/delete.ftl new file mode 100644 index 0000000..797fd91 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mongo/delete.ftl @@ -0,0 +1,4 @@ +<#assign daoObjName="${dao.name?uncap_first}" > + for (String id : idList){ + ${daoObjName}.delete(id); + } \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mongo/list.ftl b/src/main/resources/generater/service/method/impl/mongo/list.ftl new file mode 100644 index 0000000..b9c385d --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mongo/list.ftl @@ -0,0 +1,7 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign queryObjName="${query.name?uncap_first}" > + ${daoQuery.name} daoQuery = new ${daoQuery.name}(); + BeanUtil.copyProperties(${queryObjName}, daoQuery); + daoQuery.start=(page-1)*pageSize; + daoQuery.count=pageSize; + ${daoObjName}.list(daoQuery); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mongo/save.ftl b/src/main/resources/generater/service/method/impl/mongo/save.ftl new file mode 100644 index 0000000..32e925a --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mongo/save.ftl @@ -0,0 +1,6 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign entityObjName="${entity.name?uncap_first}" > + if(${entityObjName}.getCreateTime()==null){ + ${entityObjName}.setCreateTime(new Date()); + } + ${daoObjName}.save(${entityObjName}); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mongo/selectByPrimaryKey.ftl b/src/main/resources/generater/service/method/impl/mongo/selectByPrimaryKey.ftl new file mode 100644 index 0000000..207272e --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mongo/selectByPrimaryKey.ftl @@ -0,0 +1,4 @@ +<#assign daoObjName="${dao.name?uncap_first}" > + Query query=new Query(); + query.addCriteria(Criteria.where("_id").is(id)); + return ${daoObjName}.findOne(query); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mongo/updateSlective.ftl b/src/main/resources/generater/service/method/impl/mongo/updateSlective.ftl new file mode 100644 index 0000000..8724dbf --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mongo/updateSlective.ftl @@ -0,0 +1,7 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign entityObjName="${entity.name?uncap_first}" > + if(${entityObjName}.getUpdateTime()==null){ + ${entityObjName}.setUpdateTime(new Date()); + } + //鏇存柊 + ${daoObjName}.updateSelective(${entityObjName}); diff --git a/src/main/resources/generater/service/method/impl/mybatis/add.ftl b/src/main/resources/generater/service/method/impl/mybatis/add.ftl new file mode 100644 index 0000000..23ee748 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mybatis/add.ftl @@ -0,0 +1,7 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign entityObjName="${entity.name?uncap_first}" > + if(bean.getCreateTime()==null){ + bean.setCreateTime(new Date()); + } + //淇濆瓨 + ${daoObjName}.insertSelective(bean); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mybatis/count.ftl b/src/main/resources/generater/service/method/impl/mybatis/count.ftl new file mode 100644 index 0000000..21de435 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mybatis/count.ftl @@ -0,0 +1,5 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign queryObjName="${query.name?uncap_first}" > + ${daoQuery.name} daoQuery = new ${daoQuery.name}(); + BeanUtil.copyProperties(${queryObjName}, daoQuery); + ${daoObjName}.count(daoQuery); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mybatis/delete.ftl b/src/main/resources/generater/service/method/impl/mybatis/delete.ftl new file mode 100644 index 0000000..81ca7b1 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mybatis/delete.ftl @@ -0,0 +1,4 @@ +<#assign daoObjName="${dao.name?uncap_first}" > + for (String id : idList){ + ${daoObjName}.deleteByPrimaryKey(id); + } \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mybatis/list.ftl b/src/main/resources/generater/service/method/impl/mybatis/list.ftl new file mode 100644 index 0000000..b9c385d --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mybatis/list.ftl @@ -0,0 +1,7 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign queryObjName="${query.name?uncap_first}" > + ${daoQuery.name} daoQuery = new ${daoQuery.name}(); + BeanUtil.copyProperties(${queryObjName}, daoQuery); + daoQuery.start=(page-1)*pageSize; + daoQuery.count=pageSize; + ${daoObjName}.list(daoQuery); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mybatis/save.ftl b/src/main/resources/generater/service/method/impl/mybatis/save.ftl new file mode 100644 index 0000000..c948a03 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mybatis/save.ftl @@ -0,0 +1,12 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign entityObjName="${entity.name?uncap_first}" > + if(${entityObjName}.getId()!=null){ + //鏇存柊 + if(${entityObjName}.getUpdateTime()==null){ + ${entityObjName}.setUpdateTime(new Date()); + } + ${daoObjName}.updateByPrimaryKey( ${entityObjName}); + }else{ + //淇濆瓨 + add(${entityObjName}); + } \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mybatis/selectByPrimaryKey.ftl b/src/main/resources/generater/service/method/impl/mybatis/selectByPrimaryKey.ftl new file mode 100644 index 0000000..a87dba2 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mybatis/selectByPrimaryKey.ftl @@ -0,0 +1,2 @@ +<#assign daoObjName="${dao.name?uncap_first}" > + return ${daoObjName}.selectByPrimaryKey(id); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/impl/mybatis/updateSlective.ftl b/src/main/resources/generater/service/method/impl/mybatis/updateSlective.ftl new file mode 100644 index 0000000..bf4a551 --- /dev/null +++ b/src/main/resources/generater/service/method/impl/mybatis/updateSlective.ftl @@ -0,0 +1,7 @@ +<#assign daoObjName="${dao.name?uncap_first}" > +<#assign entityObjName="${entity.name?uncap_first}" > + if(${entityObjName}.getUpdateTime()==null){ + ${entityObjName}.setUpdateTime(new Date()); + } + //淇濆瓨 + ${daoObjName}.updateByPrimaryKey(${entityObjName}); \ No newline at end of file diff --git a/src/main/resources/generater/service/method/list.template b/src/main/resources/generater/service/method/list.template deleted file mode 100644 index fd83e79..0000000 --- a/src/main/resources/generater/service/method/list.template +++ /dev/null @@ -1,14 +0,0 @@ -package ${packageName}; - -import ${entityClass}; - - -public interface ${serviceClassName} { - -<#list metodInfoList as method> - ${method.note} - ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}); - -</#list> - -} diff --git a/src/main/resources/generater/service/method/save.template b/src/main/resources/generater/service/method/save.template deleted file mode 100644 index 85f8420..0000000 --- a/src/main/resources/generater/service/method/save.template +++ /dev/null @@ -1,6 +0,0 @@ - if(entity.getUpdateTime()==null){ - entity.setUpdateTime(new Date()); - } - dao.save(entity); - - diff --git a/src/main/resources/generater/service/method/selectByPrimaryKey.template b/src/main/resources/generater/service/method/selectByPrimaryKey.template deleted file mode 100644 index 870c88d..0000000 --- a/src/main/resources/generater/service/method/selectByPrimaryKey.template +++ /dev/null @@ -1,4 +0,0 @@ -return dao.selectByPrimaryKey(id); - - - diff --git a/src/main/resources/generater/service/method/updateSlective.template b/src/main/resources/generater/service/method/updateSlective.template deleted file mode 100644 index 03b06a9..0000000 --- a/src/main/resources/generater/service/method/updateSlective.template +++ /dev/null @@ -1,2 +0,0 @@ -entity.setUpdateTime(new Date()); -dao.updateSelective(entity); \ No newline at end of file diff --git a/src/main/resources/generater/service/service.template b/src/main/resources/generater/service/service.template index c7e793d..a63688c 100644 --- a/src/main/resources/generater/service/service.template +++ b/src/main/resources/generater/service/service.template @@ -1,6 +1,8 @@ package ${packageName}; import ${service.clazz}; +import ${query.clazz}; +import ${entity.clazz}; public interface ${service.name} { diff --git a/src/main/resources/generater/service/serviceImpl.template b/src/main/resources/generater/service/serviceImpl.template index 6d080bb..52e6a13 100644 --- a/src/main/resources/generater/service/serviceImpl.template +++ b/src/main/resources/generater/service/serviceImpl.template @@ -3,9 +3,12 @@ import ${entity.clazz}; import ${dao.clazz}; import ${service.clazz}; +import ${query.clazz}; +import ${daoQuery.clazz}; import javax.annotation.Resource; import org.springframework.stereotype.Service; import java.util.Date; +import org.yeshi.utils.bean.BeanUtil; @Service public class ${service.name}Impl implements ${service.name}{ @@ -14,10 +17,10 @@ private ${dao.name} ${dao.name?uncap_first}; <#list metodInfoList as method> - ${method.note} ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}){ - ${method.content} +${method.content} } + </#list> } \ No newline at end of file diff --git a/src/test/java/com/generater/GeneratorTest.java b/src/test/java/com/generater/GeneratorTest.java index a3af2b0..33d9472 100644 --- a/src/test/java/com/generater/GeneratorTest.java +++ b/src/test/java/com/generater/GeneratorTest.java @@ -1,32 +1,25 @@ package com.generater; -import freemarker.cache.StringTemplateLoader; -import freemarker.template.Template; import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.Transient; import org.yeshi.utils.FileUtil; import org.yeshi.utils.FreemarkerUtils; import org.yeshi.utils.generater.SpringComponentGenerater; -import org.yeshi.utils.generater.annotation.admin.form.CheckBox; -import org.yeshi.utils.generater.annotation.admin.form.Select; -import org.yeshi.utils.generater.annotation.admin.form.Text; -import org.yeshi.utils.generater.entity.KeyValue; -import org.yeshi.utils.generater.entity.MongoDBDaoData; +import org.yeshi.utils.generater.entity.ClassInfo; import org.yeshi.utils.generater.entity.admin.AdminGeneraterInfo; import org.yeshi.utils.generater.mybatis.Column; -import org.yeshi.utils.generater.mybatis.MyBatisMapperUtil; import org.yeshi.utils.generater.mybatis.Table; -import org.yeshi.utils.generater.vo.admin.FormAddInfoVO; -import org.yeshi.utils.generater.vo.admin.FormUpdateInfoVO; +import org.yeshi.utils.generater.vo.ExceptionVO; +import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO; +import org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO; +import org.yeshi.utils.generater.vo.service.ServiceImplInfoVO; +import org.yeshi.utils.generater.vo.service.ServiceInfoVO; +import org.yeshi.utils.generater.vo.admin.controller.AdminControllerInfoVO; +import org.yeshi.utils.generater.vo.admin.page.FormUpdateInfoVO; -import java.io.File; import java.io.InputStream; -import java.io.StringWriter; -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.*; -import java.util.regex.Pattern; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; public class GeneratorTest { @@ -51,8 +44,14 @@ // } - AdminGeneraterInfo info = new AdminGeneraterInfo.Builder().setEntityClass(TestEntity.class).build(); + // +// boolean match = Pattern.matches("^(https://){1}.*(\\.m3u8)$", "https://n1.szjal.cn/20210805/qnDXhXBa/index.m3u8123"); +// System.out.println(match); + generateMybatisDao(); + } + private static void generateAdminPage() throws Exception { + AdminGeneraterInfo info = new AdminGeneraterInfo.Builder().setEntityClass(TestEntity.class).build(); //灏嗘墍鏈夌殑鎺т欢妯℃澘鍔犺浇杩涘幓 String[] template = new String[]{ "admin/form/checkBox.ftl", @@ -74,12 +73,75 @@ } String result = FreemarkerUtils.generateInputStream(new FormUpdateInfoVO.Builder().setAdminInfo(info).build(), "admin/update.ftl", map); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), "C:\\Users\\Administrator\\Documents\\HBuilderProjects\\LayuiTest\\form.html"); - - System.out.println(result); - // -// boolean match = Pattern.matches("^(https://){1}.*(\\.m3u8)$", "https://n1.szjal.cn/20210805/qnDXhXBa/index.m3u8123"); -// System.out.println(match); + } + + + private static void generateService() throws Exception { + ClassInfo dao = new ClassInfo("TestDao", "com.test.dao.TestDao"); + ClassInfo query = new ClassInfo("TestQuery", "com.test.query.TestQuery"); + ClassInfo service = new ClassInfo("TestService", "com.test.service.TestService"); + ServiceInfoVO serviceInfoVO = new ServiceInfoVO.Builder().setDao(dao).setEntity(Entity.class).setPackageName("com.test.service").setQuery(query).setService(service).build(); + String result = FreemarkerUtils.generateInputStream(serviceInfoVO, GeneratorTest.class.getClassLoader().getResourceAsStream("generater\\service\\service.template")); + System.out.println(result); + } + + private static void generateServiceImpl() throws Exception { + ClassInfo dao = new ClassInfo("TestMapper", "com.test.dao.TestMapper"); + ClassInfo query = new ClassInfo("TestQuery", "com.test.query.TestQuery"); + ClassInfo service = new ClassInfo("TestService", "com.test.service.TestService"); + ClassInfo daoQuery = new ClassInfo("DaoQuery", "com.test.dao.query.DaoQuery"); + ServiceImplInfoVO serviceInfoVO = new ServiceImplInfoVO.Builder() + .setDao(dao) + .setEntity(Entity.class) + .setPackageName("com.test.service.impl") + .setQuery(query) + .setService(service) + .setDaoQuery(daoQuery) + .build(); + String result = FreemarkerUtils.generateInputStream(serviceInfoVO, GeneratorTest.class.getClassLoader().getResourceAsStream("generater\\service\\serviceImpl.template")); + System.out.println(result); + } + + + private static void generateAdminController() throws Exception { + AdminGeneraterInfo adminGeneraterInfo = new AdminGeneraterInfo.Builder().setEntityClass(TestEntity.class).build(); + ClassInfo query = new ClassInfo("TestQuery", "com.test.query.TestQuery"); + ClassInfo service = new ClassInfo("TestService", "com.test.service.TestService"); + AdminControllerInfoVO vo = new AdminControllerInfoVO.Builder().setAdminInfo(adminGeneraterInfo).setPackageName("com.test.controller.admin").setQueryVO(query).setService(service).build(); + String result = FreemarkerUtils.generateInputStream(vo, GeneratorTest.class.getClassLoader().getResourceAsStream("generater\\admin\\adminController.template")); + System.out.println(result); + } + + + private static void generateMongoDBDao() throws Exception { + MongoDBDaoVO vo = new MongoDBDaoVO.Builder().setBaseDao(new ClassInfo(BaseDao.class.getSimpleName(), BaseDao.class.getName())).setDao(new ClassInfo("TestDao", "com.test.dao.TestDao")).setEntity(TestEntity.class).build(); + String result = FreemarkerUtils.generateInputStream(vo, GeneratorTest.class.getClassLoader().getResourceAsStream("generater\\dao\\mongoDBDao.template")); + System.out.println(result); + } + + + private static void generateMybatisDao() throws Exception { + + MyBatisDBDaoVO vo = new MyBatisDBDaoVO + .Builder() + .setEntity(TestEntity2.class) + .setBaseMapper(new ClassInfo("BaseMapper", "com.test.mapper.BaseMapper")) + .setMapper(new ClassInfo("TestEntity2Mapper", "com.test.mapper.TestEntity2Mapper")) + .build(); + + +// String result = FreemarkerUtils.generateInputStream(vo, GeneratorTest.class.getClassLoader().getResourceAsStream("generater\\dao\\mybatisDBDao.template")); + String result = FreemarkerUtils.generateInputStream(vo, GeneratorTest.class.getClassLoader().getResourceAsStream("generater\\dao\\mybatisDBXML.ftl")); + System.out.println(result); + } + + private static void generateException() throws Exception { + ExceptionVO vo = new ExceptionVO.Builder() + .setEntity(Entity.class) + .setPackageName("com.test.exception").build(); + String result = FreemarkerUtils.generateInputStream(vo, GeneratorTest.class.getClassLoader().getResourceAsStream("generater\\exception.template")); + System.out.println(result); } diff --git a/src/test/java/com/generater/Test.java b/src/test/java/com/generater/Test.java new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/test/java/com/generater/Test.java diff --git a/src/test/java/com/generater/TestEntity.java b/src/test/java/com/generater/TestEntity.java index deeefd4..efbe70f 100644 --- a/src/test/java/com/generater/TestEntity.java +++ b/src/test/java/com/generater/TestEntity.java @@ -16,7 +16,7 @@ * @description: 娴嬭瘯entity * @date 2021/9/23 14:22 */ -@AdminController(mapping = "admin/api/test", title = "娴嬭瘯", searchForm = TestEntity.SearchForm.class) +@AdminController(mapping = "admin/api/test", title = "娴嬭瘯", searchForm = TestEntity.SearchForm.class,jsonp = true) public class TestEntity { @Id private String id; diff --git a/src/test/java/com/generater/TestEntity2.java b/src/test/java/com/generater/TestEntity2.java new file mode 100644 index 0000000..4b0b516 --- /dev/null +++ b/src/test/java/com/generater/TestEntity2.java @@ -0,0 +1,136 @@ +package com.generater; + +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.Transient; +import org.yeshi.utils.generater.annotation.admin.AdminController; +import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; +import org.yeshi.utils.generater.annotation.admin.Show; +import org.yeshi.utils.generater.annotation.admin.form.Img; +import org.yeshi.utils.generater.annotation.admin.form.RadioGroup; +import org.yeshi.utils.generater.annotation.admin.form.Select; +import org.yeshi.utils.generater.annotation.admin.form.Text; +import org.yeshi.utils.generater.entity.admin.FormVerifyType; +import org.yeshi.utils.generater.mybatis.Column; +import org.yeshi.utils.generater.mybatis.Table; + +/** + * @author Administrator + * @title: TestEntity + * @description: 娴嬭瘯entity + * @date 2021/9/23 14:22 + */ +@AdminController(mapping = "admin/api/test", title = "娴嬭瘯", searchForm = TestEntity2.SearchForm.class,jsonp = true) +@Table("table_test") +public class TestEntity2 { + @Id + private String id; + + @Column(name="nick_name") + @DaoQueryCondition(queryType = DaoQueryCondition.QueryType.contains) + @Show(order = 0, title = "鏄电О") + @Text(title = "鏄电О", maxLength = 50, require = true, placeHolder = "璇疯緭鍏ユ樀绉�", desc = "鏄电О涓嶈兘鍖呭惈鐗规畩瀛楃", verifyType = FormVerifyType.none, verifyValue = "^.{0-100}$", verifyNotifyMsg = "璇疯緭鍏ユ纭殑鏄电О") + private String nickName; + + @DaoQueryCondition + @Show(order = 1, title = "绫诲瀷") + @Select(values = {"1:鐢�", "2:濂�"}, title = "绫诲瀷") + private Integer type; + + @DaoQueryCondition + @Show(order = 2, title = "鎬у埆") + @RadioGroup(values = {"1:鐢�", "2:濂�"}, title = "鎬у埆") + private Integer sex; + + @Show(order = 3, title = "澶村儚", showType = Show.ShowType.IMG, imgWidth = 50, imgHeight = 50) + @Img(height = 50, title = "澶村儚", uploadApi = "/admin/uploadimg", uploadApiParams = {"id:123123","type:2"}) + private String portrait; + + @Transient + @DaoQueryCondition + @Show(order = 4, title = "鐪�") + @Select(values = {"cq:閲嶅簡","js:姹熻嫃"}, title = "鐪�", apiParams = {"page:1", "pageSize:10", "id:\"test\""}) + private String province; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getSex() { + return sex; + } + + public void setSex(Integer sex) { + this.sex = sex; + } + + public String getPortrait() { + return portrait; + } + + public void setPortrait(String portrait) { + this.portrait = portrait; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public class SearchForm { + + @Text(title = "寮�濮嬫棩鏈�", inputType = Text.Type.DATE) + private String startDate; + @Text(title = "缁撴潫鏃ユ湡", inputType = Text.Type.DATE) + private String endDate; + @Text(title = "璇疯緭鍏ュ叧閿瘝", inputType = Text.Type.TEXT) + private String key; + + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + } +} -- Gitblit v1.8.0