src/main/java/org/yeshi/utils/FileUtil.java
@@ -91,7 +91,7 @@ /** * 将输入流存为本地文件 * * @param inputStream * @param b * @param path * @return * @throws IOException src/main/java/org/yeshi/utils/StringUtil.java
@@ -328,10 +328,17 @@ //首字母小写 public static String firstCharToLower(String st) { if (st == null || st.length() < 2) if (st == null || st.length() < 1) return st; return st.substring(0, 1).toLowerCase() + st.substring(1); } //首字母大写 public static String firstCharToUpper(String st) { if (st == null || st.length() < 1) return st; return st.substring(0, 1).toUpperCase() + st.substring(1); } } src/main/java/org/yeshi/utils/generater/GeneraterManager.java
New file @@ -0,0 +1,323 @@ package org.yeshi.utils.generater; import com.meizu.push.sdk.server.IFlymePush; import org.springframework.data.mongodb.core.mapping.Document; import org.yeshi.utils.FileUtil; import org.yeshi.utils.StringUtil; import org.yeshi.utils.generater.entity.ClassInfo; import org.yeshi.utils.generater.entity.admin.AdminGeneraterInfo; import org.yeshi.utils.generater.mybatis.Table; import org.yeshi.utils.generater.params.AdminGeneraterParams; import org.yeshi.utils.generater.params.DaoGeneraterParams; import org.yeshi.utils.generater.params.ServiceGeneraterParams; import org.yeshi.utils.generater.vo.ExceptionVO; import org.yeshi.utils.generater.vo.admin.controller.AdminControllerInfoVO; import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO; import org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO; import org.yeshi.utils.generater.vo.service.QueryVO; import org.yeshi.utils.generater.vo.service.ServiceImplInfoVO; import org.yeshi.utils.generater.vo.service.ServiceInfoVO; import org.yeshi.utils.mongo.MongodbBaseDao; import org.yeshi.utils.mybatis.BaseMapper; import java.io.File; import java.lang.annotation.Annotation; /** * @author Administrator * @title: GeneraterManager * @description: 自动化代码生成管理器 * @date 2021/10/13 14:48 */ /** * Title * * @Description //TODO * @Author hxh * @Date 18:11 2021/10/13 **/ public class GeneraterManager { private static GeneraterManager instance; private String classRootDir; private Class entity; public static GeneraterManager getInstance() { if (instance == null) instance = new GeneraterManager(); return instance; } //类的根目录 public void init(String classRootDir, Class entity) { this.classRootDir = classRootDir; this.entity = entity; } //获取文件夹的路径 private String getDirPath(String packageName) { File f = new File(classRootDir); if (!f.exists()) { f.mkdirs(); } return new File(f.getAbsolutePath(), packageName.replace(".", "/")).getAbsolutePath(); } public void createException(String packageName, Class base) { String path = getDirPath(packageName); try { ExceptionVO vo = new ExceptionVO.Builder().setEntity(entity).setPackageName(packageName).setBase(new ClassInfo(base.getSimpleName(), base.getName())).build(); String result = GeneraterUtil.createException(vo); //保存 FileUtil.saveAsFileByte(result.getBytes("UTF-8"), path); } catch (Exception e) { e.printStackTrace(); } } /** * @return org.yeshi.utils.generater.vo.dao.MongoDBDaoVO * @author hxh * @description 自动生成Dao * @date 18:24 2021/10/13 * @param: packageName **/ public MongoDBDaoVO createDao(String packageName) throws Exception { String daoName = entity.getSimpleName() + "Dao"; String path = getDirPath(packageName); MongoDBDaoVO vo = new MongoDBDaoVO.Builder() .setBaseDao(new ClassInfo(MongodbBaseDao.class.getSimpleName(), MongodbBaseDao.class.getName())) .setDao(new ClassInfo(daoName, packageName + "." + daoName)) .setEntity(entity).build(); String result = GeneraterUtil.createMongoDBDao(vo); //保存 FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(path, daoName).getAbsolutePath()); return vo; } /** * @return org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO * @author hxh * @description 自动生成Mapper * @date 18:24 2021/10/13 * @param: packageName * @param: mapperDir **/ public MyBatisDBDaoVO createMapper(String packageName, String mapperDir) throws Exception { String mapperName = entity.getSimpleName() + "Mapper"; String path = getDirPath(packageName); MyBatisDBDaoVO vo = new MyBatisDBDaoVO.Builder() .setBaseMapper(new ClassInfo(BaseMapper.class.getSimpleName(), BaseMapper.class.getName())) .setMapper(new ClassInfo(mapperName, packageName + "." + mapperName)) .setEntity(entity) .build(); String result = GeneraterUtil.createMybatisDBMapper(vo); //保存 FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(path, mapperName + ".java").getAbsolutePath()); if (!new File(mapperDir).exists()) new File(mapperDir).mkdirs(); result = GeneraterUtil.createMybatisDBMapperXML(vo); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(mapperDir, mapperName + ".xml").getAbsolutePath()); return vo; } /** * @return org.yeshi.utils.generater.vo.service.QueryVO * @author hxh * @description /创建查询Query * @date 18:24 2021/10/13 * @param: packageName **/ public QueryVO createQuery(String packageName) throws Exception { //创建Query String path = getDirPath(packageName); QueryVO queryVO = new QueryVO.Builder().setEntity(entity).setPackageName(packageName).build(); String result = GeneraterUtil.createQuery(queryVO); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(path, queryVO.getClassName() + ".java").getAbsolutePath()); return queryVO; } /** * @return org.yeshi.utils.generater.vo.service.ServiceInfoVO * @author hxh * @description 自动生成服务 * @date 18:23 2021/10/13 * @param: interPackageName * @param: implPackageName * @param: query * @param: dao **/ public ServiceInfoVO createService(String interPackageName, String implPackageName, ClassInfo query, ClassInfo dao) throws Exception { //创建service接口 String serviceName = entity.getSimpleName() + "Service"; String path = getDirPath(interPackageName); ServiceInfoVO vo = new ServiceInfoVO.Builder() .setPackageName(interPackageName) .setEntity(entity) .setQuery(query) .setService(new ClassInfo(serviceName, interPackageName + "." + serviceName)) .build(); String result = GeneraterUtil.createService(vo); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(path, serviceName + ".java").getAbsolutePath()); //创建service实现 String serviceImplName = entity.getSimpleName() + "ServiceImpl"; path = getDirPath(implPackageName); ServiceImplInfoVO implVO = new ServiceImplInfoVO.Builder() .setDao(dao) .setPackageName(implPackageName) .setEntity(entity) .setQuery(query) .setService(new ClassInfo(serviceName, interPackageName + "." + serviceName)) .setDaoQuery(new ClassInfo("DaoQuery", dao.getClazz() + ".DaoQuery")) .build(); result = GeneraterUtil.createServiceImpl(implVO); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(path, serviceImplName + ".java").getAbsolutePath()); return vo; } /** * @return void * @author hxh * @description 自动生成管理模块 * @date 18:23 2021/10/13 * @param: controllerPackage * @param: htmlDir * @param: query * @param: service **/ public void createAdmin(String controllerPackage, String htmlDir, ClassInfo query, ClassInfo service) throws Exception { String path = getDirPath(controllerPackage); String controllerName = entity.getSimpleName() + "AdminController"; AdminGeneraterInfo generaterInfo = new AdminGeneraterInfo.Builder().setEntityClass(entity).build(); String htmlNamePrefix = getHtmlNameFromEntityName(entity.getSimpleName()); AdminControllerInfoVO vo = new AdminControllerInfoVO.Builder().setAdminInfo(generaterInfo).setPackageName(controllerName).setQueryVO(query).setService(service).build(); //生成controller String result = GeneraterUtil.createAdminController(vo); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(path, controllerName + ".java").getAbsolutePath()); result = GeneraterUtil.createAdminPageForList(generaterInfo); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(htmlDir, htmlNamePrefix + "_list.html").getAbsolutePath()); if (generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0) { result = GeneraterUtil.createAdminPageForAdd(generaterInfo); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(htmlDir, htmlNamePrefix + "_add.html").getAbsolutePath()); } if (generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0) { result = GeneraterUtil.createAdminPageForUpdate(generaterInfo); FileUtil.saveAsFileByte(result.getBytes("UTF-8"), new File(htmlDir, htmlNamePrefix + "_update.html").getAbsolutePath()); } } /** * @return void * @author hxh * @description 创建整个功能模块 * @date 18:19 2021/10/13 * @param: daoParams * @param: serviceParams * @param: adminParams **/ public void createWholeFunction(DaoGeneraterParams daoParams, ServiceGeneraterParams serviceParams, AdminGeneraterParams adminParams) throws Exception { Annotation[] as = entity.getAnnotations(); int type = -1; for (Annotation a : as) { if (a instanceof Table) { type = 1; break; } else if (a instanceof Document) { type = 2; break; } } if (type == -1) { throw new Exception("实体未配置mybatis或者mongodb"); } if (daoParams != null) { if (type == 1 && StringUtil.isNullOrEmpty(daoParams.getMapperXMLDir())) { throw new Exception("mybatis xml文件路径为空"); } } //创建dao ClassInfo daoClass = null; if (daoParams != null) { if (type == 1) { MyBatisDBDaoVO vo = createMapper(daoParams.getDaoPackage(), daoParams.getMapperXMLDir()); daoClass = vo.getMapper(); } else { MongoDBDaoVO vo = createDao(daoParams.getDaoPackage()); daoClass = new ClassInfo(vo.getDaoName(), vo.getPackageName() + "." + vo.getDaoName()); } } ClassInfo queryClass = null; ClassInfo serviceClass = null; if (serviceParams != null) { //创建Query QueryVO queryVO = createQuery(serviceParams.getQueryPackage()); queryClass = new ClassInfo(queryVO.getClassName(), queryVO.getPackageName() + "." + queryVO.getClassName()); //创建service ServiceInfoVO serviceInfoVO = createService(serviceParams.getServiceInterPackage(), serviceParams.getServiceImplPackage(), queryClass, daoClass); serviceClass = serviceInfoVO.getService(); } //创建Admin模块 createAdmin(adminParams.getControllerPackage(), adminParams.getHtmlDir(), queryClass, serviceClass); } /** * @return java.lang.String * @author hxh * @description 通过entity的名称获取html文件的前缀名称 * @date 18:25 2021/10/13 * @param: entityName **/ private static String getHtmlNameFromEntityName(String entityName) { StringBuffer sb = new StringBuffer(); StringBuffer buffer = null; for (int i = 0; i < entityName.length(); i++) { if (entityName.charAt(i) >= 65 && entityName.charAt(i) <= 90) { //大写字母 if (buffer == null) buffer = new StringBuffer(); buffer.append(entityName.charAt(i)); } else { if (buffer != null) { sb.append("_" + buffer.toString().toLowerCase()); buffer = null; } sb.append(entityName.charAt(i)); } } if (buffer != null) { sb.append("_" + buffer.toString().toLowerCase()); } if (sb.charAt(0) == '_') sb = sb.replace(0, 1, ""); return sb.toString(); } public static void main(String[] args) { System.out.print(getHtmlNameFromEntityName("TTestEEntity")); } } src/main/java/org/yeshi/utils/generater/GeneraterUtil.java
New file @@ -0,0 +1,119 @@ package org.yeshi.utils.generater; import org.yeshi.utils.FreemarkerUtils; import org.yeshi.utils.generater.entity.admin.AdminGeneraterInfo; import org.yeshi.utils.generater.vo.ExceptionVO; import org.yeshi.utils.generater.vo.admin.controller.AdminControllerInfoVO; import org.yeshi.utils.generater.vo.admin.page.FormAddInfoVO; import org.yeshi.utils.generater.vo.admin.page.FormUpdateInfoVO; import org.yeshi.utils.generater.vo.admin.page.ListInfoVO; import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO; import org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO; import org.yeshi.utils.generater.vo.service.QueryVO; import org.yeshi.utils.generater.vo.service.ServiceImplInfoVO; import org.yeshi.utils.generater.vo.service.ServiceInfoVO; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; public class GeneraterUtil { public static String createException(ExceptionVO vo) throws IOException { String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater\\exception.template")); System.out.println(result); return result; } public static String createMongoDBDao(MongoDBDaoVO vo) throws IOException { String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater\\dao\\mongoDBDao.template")); System.out.println(result); return result; } public static String createMybatisDBMapper(MyBatisDBDaoVO vo) throws IOException { String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater\\dao\\mybatisDBDao.template")); System.out.println(result); return result; } public static String createMybatisDBMapperXML(MyBatisDBDaoVO vo) throws IOException { String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater\\dao\\mybatisDBXML.ftl")); System.out.println(result); return result; } public static String createQuery(QueryVO vo) throws IOException { String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater\\service\\queryVO.ftl")); System.out.println(result); return result; } public static String createService(ServiceInfoVO vo) throws IOException { String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater\\service\\service.template")); System.out.println(result); return result; } public static String createServiceImpl(ServiceImplInfoVO vo) throws IOException { String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater\\service\\serviceImpl.template")); System.out.println(result); return result; } public static String createAdminController(AdminControllerInfoVO vo) throws IOException { String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater\\admin\\adminController.template")); System.out.println(result); return result; } private static Map<String, InputStream> getAdminIncludePageMap() { //将所有的控件模板加载进去 String[] template = new String[]{ "admin/form/checkBox.ftl", "admin/form/img.ftl", "admin/form/password.ftl", "admin/form/radioGroup.ftl", "admin/form/select.ftl", "admin/form/switch.ftl", "admin/form/text.ftl", "admin/form/textArea.ftl", "admin/add.ftl", "admin/update.ftl", "admin/list.ftl" }; Map<String, InputStream> map = new HashMap<>(); for (String st : template) { map.put(st, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater/" + st)); } return map; } public static String createAdminPageForUpdate(AdminGeneraterInfo vo) throws IOException { Map<String, InputStream> map = getAdminIncludePageMap(); String result = FreemarkerUtils.generateInputStream(new FormUpdateInfoVO.Builder().setAdminInfo(vo).build(), "admin/update.ftl", map); System.out.println(result); return result; } public static String createAdminPageForAdd(AdminGeneraterInfo vo) throws IOException { Map<String, InputStream> map = getAdminIncludePageMap(); String result = FreemarkerUtils.generateInputStream(new FormAddInfoVO.Builder().setAdminInfo(vo).build(), "admin/add.ftl", map); System.out.println(result); return result; } public static String createAdminPageForList(AdminGeneraterInfo vo) throws IOException { Map<String, InputStream> map = getAdminIncludePageMap(); String result = FreemarkerUtils.generateInputStream(new ListInfoVO.Builder().setAdminInfo(vo).build(), "admin/list.ftl", map); System.out.println(result); return result; } } src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java
File was deleted src/main/java/org/yeshi/utils/generater/annotation/admin/DaoQueryCondition.java
@@ -20,7 +20,7 @@ //显示类型 enum QueryType { start, end, contains, equal start, end, contains, equal, gt, gte, lt, lte } src/main/java/org/yeshi/utils/generater/entity/MybatisColumnData.java
@@ -16,6 +16,11 @@ this.jdbcType = jdbcType; } public MybatisColumnData( String property) { this.property = property; } public String getColumn() { return column; } src/main/java/org/yeshi/utils/generater/params/AdminGeneraterParams.java
New file @@ -0,0 +1,33 @@ package org.yeshi.utils.generater.params; /** * @author Administrator * @title: DaoParams * @description: 管理功能生成参数 * @date 2021/10/13 17:41 */ public class AdminGeneraterParams { private String controllerPackage; private String htmlDir; public AdminGeneraterParams(String controllerPackage, String htmlDir) { this.controllerPackage = controllerPackage; this.htmlDir = htmlDir; } public String getControllerPackage() { return controllerPackage; } public void setControllerPackage(String controllerPackage) { this.controllerPackage = controllerPackage; } public String getHtmlDir() { return htmlDir; } public void setHtmlDir(String htmlDir) { this.htmlDir = htmlDir; } } src/main/java/org/yeshi/utils/generater/params/DaoGeneraterParams.java
New file @@ -0,0 +1,33 @@ package org.yeshi.utils.generater.params; /** * @author Administrator * @title: DaoParams * @description: 生成Dao的参数配置 * @date 2021/10/13 17:41 */ public class DaoGeneraterParams { private String daoPackage; private String mapperXMLDir; public DaoGeneraterParams(String daoPackage, String mapperXMLDir) { this.daoPackage = daoPackage; this.mapperXMLDir = mapperXMLDir; } public String getDaoPackage() { return daoPackage; } public void setDaoPackage(String daoPackage) { this.daoPackage = daoPackage; } public String getMapperXMLDir() { return mapperXMLDir; } public void setMapperXMLDir(String mapperXMLDir) { this.mapperXMLDir = mapperXMLDir; } } src/main/java/org/yeshi/utils/generater/params/ServiceGeneraterParams.java
New file @@ -0,0 +1,44 @@ package org.yeshi.utils.generater.params; /** * @author Administrator * @title: DaoParams * @description: service自动生成参数 * @date 2021/10/13 17:41 */ public class ServiceGeneraterParams { private String queryPackage; private String serviceInterPackage; private String serviceImplPackage; public ServiceGeneraterParams(String queryPackage, String serviceInterPackage, String serviceImplPackage) { this.queryPackage = queryPackage; this.serviceInterPackage = serviceInterPackage; this.serviceImplPackage = serviceImplPackage; } public String getQueryPackage() { return queryPackage; } public void setQueryPackage(String queryPackage) { this.queryPackage = queryPackage; } public String getServiceInterPackage() { return serviceInterPackage; } public void setServiceInterPackage(String serviceInterPackage) { this.serviceInterPackage = serviceInterPackage; } public String getServiceImplPackage() { return serviceImplPackage; } public void setServiceImplPackage(String serviceImplPackage) { this.serviceImplPackage = serviceImplPackage; } } src/main/java/org/yeshi/utils/generater/vo/dao/MongoDBDaoVO.java
@@ -2,11 +2,9 @@ import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.yeshi.utils.StringUtil; 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 org.yeshi.utils.generater.entity.*; import java.lang.annotation.Annotation; import java.lang.reflect.Field; @@ -99,7 +97,13 @@ //获取查询条件 for (Annotation a : as) { if (a instanceof DaoQueryCondition) { daoQueryColumnList.add(new DaoQueryColumnData(columName, columnDataType, ((DaoQueryCondition) a).queryType())); MybatisColumnData columnData=new MybatisColumnData(columName); if (fd.getType().getSimpleName().equalsIgnoreCase("Date")) { daoQueryColumnList.add(new DaoQueryColumnData("max" + StringUtil.firstCharToUpper(columName),columnData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.lt)); daoQueryColumnList.add(new DaoQueryColumnData("min" + StringUtil.firstCharToUpper(columName),columnData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.gte)); } else { daoQueryColumnList.add(new DaoQueryColumnData(columName,columnData, fd.getType().getSimpleName(), ((DaoQueryCondition) a).queryType())); } break; } } src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java
@@ -2,6 +2,7 @@ import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.yeshi.utils.StringUtil; import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; import org.yeshi.utils.generater.entity.*; import org.yeshi.utils.generater.mybatis.Column; @@ -119,6 +120,7 @@ //主键 if (a instanceof Id) { identity = columData; identity.setType(fd.getType().getName()); valid = false; break; } @@ -134,7 +136,12 @@ //获取查询条件 for (Annotation a : as) { if (a instanceof DaoQueryCondition) { daoQueryColumnList.add(new DaoQueryColumnData(columData.getProperty(), columData, fd.getType().getSimpleName(), ((DaoQueryCondition) a).queryType())); if (fd.getType().getSimpleName().equalsIgnoreCase("Date")) { daoQueryColumnList.add(new DaoQueryColumnData("max" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.lt)); daoQueryColumnList.add(new DaoQueryColumnData("min" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.gte)); } else { daoQueryColumnList.add(new DaoQueryColumnData(columData.getProperty(), columData, fd.getType().getSimpleName(), ((DaoQueryCondition) a).queryType())); } break; } } src/main/java/org/yeshi/utils/generater/vo/service/QueryVO.java
New file @@ -0,0 +1,57 @@ package org.yeshi.utils.generater.vo.service; import org.yeshi.utils.generater.entity.BaseData; import org.yeshi.utils.generater.util.EntityUtil; import java.lang.reflect.Field; public class QueryVO extends BaseData { private String className; public static class Builder { private Class entity; private String packageName; public Builder setEntity(Class entity) { this.entity = entity; return this; } public Builder setPackageName(String packageName) { this.packageName = packageName; return this; } private void validParams() throws Exception { if (entity == null) { throw new Exception("entity不能为空"); } if (packageName == null) { throw new Exception("packageName不能为空"); } } public QueryVO build() throws Exception { validParams(); Field identifyId = EntityUtil.getIdentifyId(entity); if (identifyId == null) { throw new Exception("尚未找到主键属性"); } QueryVO vo = new QueryVO(); vo.setPackageName(packageName); vo.setClassName(entity.getSimpleName() + "Query"); return vo; } } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } } src/main/java/org/yeshi/utils/generater/vo/service/ServiceInfoVO.java
@@ -11,7 +11,6 @@ public class ServiceInfoVO extends BaseData { private ClassInfo service; private ClassInfo dao; //方法列表 private List<ServiceMetodInfoVO> metodInfoList; private ClassInfo query; @@ -20,7 +19,6 @@ public static class Builder { private Class entity; private String packageName; private ClassInfo dao; private ClassInfo service; private ClassInfo query; @@ -32,11 +30,6 @@ public Builder setPackageName(String packageName) { this.packageName = packageName; return this; } public Builder setDao(ClassInfo dao) { this.dao = dao; return this; } @@ -82,9 +75,6 @@ if (packageName == null) { throw new Exception("packageName不能为空"); } if (dao == null) { throw new Exception("dao不能为空"); } if (service == null) { throw new Exception("service不能为空"); } @@ -102,7 +92,6 @@ throw new Exception("尚未找到主键属性"); } ServiceInfoVO serviceData = new ServiceInfoVO(); serviceData.setDao(dao); serviceData.setService(service); serviceData.setEntity(new ClassInfo(entity.getSimpleName(), entity.getName())); serviceData.setPackageName(packageName); @@ -166,14 +155,6 @@ 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() { src/main/java/org/yeshi/utils/mongo/MongodbBaseDao.java
New file @@ -0,0 +1,106 @@ package org.yeshi.utils.mongo; import org.springframework.data.mongodb.core.MongoTemplate; 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 javax.annotation.Resource; import java.lang.reflect.ParameterizedType; import java.util.List; /** * @author Administrator * @title: MongodbBaseDao * @description: base dao * @date 2021/10/13 15:03 */ public class MongodbBaseDao<T> { @Resource protected MongoTemplate mongoTemplate; /** * 插入数据 * * @param bean * @return */ public T save(T bean) { mongoTemplate.save(bean); return bean; } /** * 根据主键更新数据 * * @param query * @param update */ public void update(Query query, Update update) { mongoTemplate.upsert(query, update, this.getEntityClass()); } /** * 查询一个数据 * * @param query * @return */ public T findOne(Query query) { return (T) mongoTemplate.findOne(query, this.getEntityClass()); } /** * 查询多个数据 * * @param query * @return */ public List<T> findList(Query query) { return mongoTemplate.find(query, this.getEntityClass()); } /** * 统计数量 * * @param query * @return */ public long count(Query query) { return mongoTemplate.count(query, this.getEntityClass()); } /** * 主键查询 * * @param id * @return */ public T get(Object id) { return (T) mongoTemplate.findById(id, this.getEntityClass()); } /** * 通过主键删除 * * @param id */ public void delete(Object id) { Query query = Query.query(Criteria.where("id").is(id)); mongoTemplate.remove(query, getEntityClass()); } public void delete(Query query) { mongoTemplate.remove(query, getEntityClass()); } @SuppressWarnings("unchecked") protected Class<T> getEntityClass() { Class<T> tClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()) .getActualTypeArguments()[0]; return tClass; } } src/main/java/org/yeshi/utils/mybatis/BaseMapper.java
New file @@ -0,0 +1,23 @@ package org.yeshi.utils.mybatis; /** * @author Administrator * @title: BaseMapper * @projectName utils * @description: 基础Mapper * @date 2021/10/1315:02 */ public interface BaseMapper<T> { int deleteByPrimaryKey(Long id); int insert(T record); int insertSelective(T record); T selectByPrimaryKey(Long id); int updateByPrimaryKeySelective(T record); int updateByPrimaryKey(T record); } src/main/resources/generater/dao/mongoDBDao.template
@@ -46,43 +46,37 @@ } 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; List<Criteria> andList=new ArrayList<>(); <#list daoQueryColumnDataList as value> if(daoQuery.${value.columnName}!=null){ <#if (value.queryType!"") == "equal"> andList.add(Criteria.where("${value.columnData.property}").is(daoQuery.${value.columnName})); <#elseif (value.queryType!"") == "gt"> andList.add(Criteria.where("${value.columnData.property}").gt(daoQuery.${value.columnName})); <#elseif (value.queryType!"") == "gte"> andList.add(Criteria.where("${value.columnData.property}").gte(daoQuery.${value.columnName})); <#elseif (value.queryType!"") == "lt"> andList.add(Criteria.where("${value.columnData.property}").lt(daoQuery.${value.columnName})); <#elseif (value.queryType!"") == "lte"> andList.add(Criteria.where("${value.columnData.property}").lte(daoQuery.${value.columnName})); <#else> andList.add(Criteria.where("${value.columnData.property}").regex(daoQuery.${value.columnName})); </#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; src/main/resources/generater/dao/mybatisDBDao.template
@@ -18,12 +18,7 @@ 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; src/main/resources/generater/dao/mybatisDBXML.ftl
@@ -17,32 +17,32 @@ </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long"> parameterType="${identify.type}"> 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"> parameterType="${identify.type}"> 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 id="deleteByPrimaryKey" parameterType="${identify.type}"> delete from ${table} where ${identify.column} = <#noparse>#{</#noparse>id,jdbcType=${identify.jdbcType}} </delete> <insert id="insert" parameterType="${entity.class}" parameterType="${entity.clazz}" useGeneratedKeys="true" keyProperty="${identify.property}"> insert into ${table} <trim prefix="(" suffix=")" suffixOverrides=","> <#list columnList as column> ${column.column}}, ${column.column}, </#list> </trim> @@ -56,7 +56,7 @@ </insert> <insert id="insertSelective" parameterType="${entity.class}" parameterType="${entity.clazz}" useGeneratedKeys="true" keyProperty="${identify.property}"> insert into ${table} <trim prefix="(" suffix=")" suffixOverrides=","> @@ -74,7 +74,7 @@ </trim> </insert> <update id="updateByPrimaryKey" parameterType="${entity.class}"> parameterType="${entity.clazz}"> update ${table} <set> <if test="${identify.property} != null">${identify.column} = <#noparse>#{</#noparse>${identify.property},jdbcType=${identify.jdbcType}},</if> @@ -85,7 +85,7 @@ where ${identify.column} = <#noparse>#{</#noparse>${identify.property},jdbcType=${identify.jdbcType}} </update> <update id="updateByPrimaryKeySelective" parameterType="${entity.class}"> parameterType="${entity.clazz}"> update ${table} <set> <#list columnList as column> @@ -110,6 +110,18 @@ <#if query.queryType=="contains"> and ${query.columnData.column} = '%<#noparse>#{</#noparse>query.${query.columnName}}%' </#if> <#if query.queryType=="gt"> and ${query.columnData.column} > <#noparse>#{</#noparse>query.${query.columnName}} </#if> <#if query.queryType=="gte"> and ${query.columnData.column} >= <#noparse>#{</#noparse>query.${query.columnName}} </#if> <#if query.queryType=="lt"> and ${query.columnData.column} <![CDATA[<]]> <#noparse>#{</#noparse>query.${query.columnName}} </#if> <#if query.queryType=="lte"> and ${query.columnData.column} <![CDATA[<=]]> <#noparse>#{</#noparse>query.${query.columnName}} </#if> </if> </#list> </sql> src/main/resources/generater/service/queryVO.ftl
@@ -1,7 +1,6 @@ package ${packageName}; public class ${className} { //搜索关键词 private String kw; @@ -10,7 +9,7 @@ } private void setKw(String kw){ this.kw=kw; this.kw = kw; } src/test/java/com/generater/GeneratorTest.java
@@ -3,11 +3,13 @@ import org.springframework.data.annotation.Id; import org.yeshi.utils.FileUtil; import org.yeshi.utils.FreemarkerUtils; import org.yeshi.utils.generater.SpringComponentGenerater; import org.yeshi.utils.generater.GeneraterManager; import org.yeshi.utils.generater.GeneraterUtil; 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.Table; import org.yeshi.utils.generater.params.DaoGeneraterParams; import org.yeshi.utils.generater.vo.ExceptionVO; import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO; import org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO; @@ -47,7 +49,7 @@ // // boolean match = Pattern.matches("^(https://){1}.*(\\.m3u8)$", "https://n1.szjal.cn/20210805/qnDXhXBa/index.m3u8123"); // System.out.println(match); generateMybatisDao(); generater(); } private static void generateAdminPage() throws Exception { @@ -69,7 +71,7 @@ Map<String, InputStream> map = new HashMap<>(); for (String st : template) { map.put(st, SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/" + st)); map.put(st, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater/" + st)); } 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"); @@ -81,7 +83,7 @@ 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(); ServiceInfoVO serviceInfoVO = new ServiceInfoVO.Builder().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); } @@ -144,6 +146,11 @@ System.out.println(result); } private static void generater() throws Exception { GeneraterManager.getInstance().init("D:\\workspace\\server\\utils\\src\\test\\java", TestEntity.class); GeneraterManager.getInstance().createWholeFunction(new DaoGeneraterParams("com.generater.temp.dao", null), null, null); } @Table("tb_test") public static class Entity { src/test/java/com/generater/TestEntity.java
@@ -1,6 +1,7 @@ package com.generater; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.yeshi.utils.generater.annotation.admin.AdminController; import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; import org.yeshi.utils.generater.annotation.admin.Show; @@ -10,12 +11,15 @@ import org.yeshi.utils.generater.annotation.admin.form.Text; import org.yeshi.utils.generater.entity.admin.FormVerifyType; import java.util.Date; /** * @author Administrator * @title: TestEntity * @description: 测试entity * @date 2021/9/23 14:22 */ @Document(collection = "test") @AdminController(mapping = "admin/api/test", title = "测试", searchForm = TestEntity.SearchForm.class,jsonp = true) public class TestEntity { @Id @@ -44,6 +48,9 @@ @Show(order = 4, title = "省") @Select(values = {"cq:重庆","js:江苏"}, title = "省", apiParams = {"page:1", "pageSize:10", "id:\"test\""}) private String province; @DaoQueryCondition private Date createTime; public String getId() { @@ -94,6 +101,13 @@ this.province = province; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public class SearchForm { src/test/java/com/generater/TestEntity2.java
@@ -13,6 +13,8 @@ import org.yeshi.utils.generater.mybatis.Column; import org.yeshi.utils.generater.mybatis.Table; import java.util.Date; /** * @author Administrator * @title: TestEntity @@ -50,6 +52,11 @@ @Show(order = 4, title = "省") @Select(values = {"cq:重庆","js:江苏"}, title = "省", apiParams = {"page:1", "pageSize:10", "id:\"test\""}) private String province; @DaoQueryCondition private Date createTime; public String getId() { return id; @@ -99,6 +106,14 @@ this.province = province; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public class SearchForm { @Text(title = "开始日期", inputType = Text.Type.DATE)