admin
2022-03-29 fac5d01bfcddfc8edef0a5fd3d401b1fe383fe16
采用配置文件自动化生成代码
11个文件已修改
26个文件已添加
2579 ■■■■■ 已修改文件
src/main/java/org/yeshi/utils/generater/GeneraterManager.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/GeneraterManagerV2.java 391 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/TestEntity3.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/util/NameUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminControllerInfoVO.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/dao/MongoDBDaoVO.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/service/QueryVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/GenertorConfig.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/XmlConfigParseUtil.java 425 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AddPageData.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminControllerData.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminData.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminPageData.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/ColumnData.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/ListPageData.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/SearchFormData.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/UpdatePageData.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentImg.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentRadioGroup.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentSelect.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentSwitch.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentText.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/ApiData.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/FormComponent.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/VerifyData.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/dao/DaoData.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/dao/DaoQuery.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ExceptionData.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/generater/admin/adminController.template 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/schemas/generator.dtd 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/generater/GeneratorTest.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/test.xml 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/yeshi/utils/generater/GeneraterManager.java
@@ -10,6 +10,7 @@
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.util.NameUtil;
import org.yeshi.utils.generater.vo.ExceptionVO;
import org.yeshi.utils.generater.vo.admin.controller.AdminControllerInfoVO;
import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO;
@@ -17,6 +18,7 @@
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.generater.vo.xmlconfig.GenertorConfig;
import org.yeshi.utils.mongo.MongodbBaseDao;
import org.yeshi.utils.mybatis.BaseMapper;
@@ -44,6 +46,7 @@
    private String classRootDir;
    private Class entity;
    public static GeneraterManager getInstance() {
        if (instance == null)
@@ -104,7 +107,8 @@
     * @param: packageName
     **/
    public MongoDBDaoVO createDao(String packageName) throws Exception {
        String daoName = entity.getSimpleName() + "Dao";
        String daoName = NameUtil.getDefaultDaoName(entity);
        String path = getDirPath(packageName);
        MongoDBDaoVO vo = new MongoDBDaoVO.Builder()
                .setBaseDao(new ClassInfo(MongodbBaseDao.class.getSimpleName(), MongodbBaseDao.class.getName()))
@@ -125,7 +129,7 @@
     * @param: mapperDir
     **/
    public MyBatisDBDaoVO createMapper(String packageName, String mapperDir) throws Exception {
        String mapperName = entity.getSimpleName() + "Mapper";
        String mapperName =  NameUtil.getDefaultMapperName(entity);
        String path = getDirPath(packageName);
        MyBatisDBDaoVO vo = new MyBatisDBDaoVO.Builder()
                .setBaseMapper(new ClassInfo(BaseMapper.class.getSimpleName(), BaseMapper.class.getName()))
@@ -172,7 +176,7 @@
        //创建service接口
        String serviceName = entity.getSimpleName() + "Service";
        String serviceName = NameUtil.getDefaultServiceName(entity);
        String path = getDirPath(interPackageName);
        ServiceInfoVO vo = new ServiceInfoVO.Builder()
                .setPackageName(interPackageName)
@@ -184,7 +188,7 @@
        saveFile(result, new File(path, serviceName + ".java").getAbsolutePath());
        //创建service实现
        String serviceImplName = entity.getSimpleName() + "ServiceImpl";
        String serviceImplName = NameUtil.getDefaultServiceImplName(entity);
        path = getDirPath(implPackageName);
        ServiceImplInfoVO implVO = new ServiceImplInfoVO.Builder()
                .setDao(dao)
src/main/java/org/yeshi/utils/generater/GeneraterManagerV2.java
New file
@@ -0,0 +1,391 @@
package org.yeshi.utils.generater;
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.util.NameUtil;
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.generater.vo.xmlconfig.GenertorConfig;
import org.yeshi.utils.mongo.MongodbBaseDao;
import org.yeshi.utils.mybatis.BaseMapper;
import java.io.File;
import java.io.IOException;
import java.lang.annotation.Annotation;
/**
 * @author Administrator
 * @title: GeneraterManager
 * @description: 自动化代码生成管理器(采用解析xml配置文件的形式)
 * @date 2021/10/13 14:48
 */
/**
 * Title
 *
 * @Description //TODO
 * @Author hxh
 * @Date 18:11 2021/10/13
 **/
public class GeneraterManagerV2 {
    private static GeneraterManagerV2 instance;
    private String classRootDir;
    private GenertorConfig config;
    public static GeneraterManagerV2 getInstance() {
        if (instance == null)
            instance = new GeneraterManagerV2();
        return instance;
    }
    public void init(String classRootDir, GenertorConfig config) {
        this.classRootDir = classRootDir;
        this.config = config;
    }
    //获取文件夹的路径
    private String getDirPath(String packageName) {
        File f = new File(classRootDir);
        if (!f.exists()) {
            f.mkdirs();
        }
        f = new File(f.getAbsolutePath(), packageName.replace(".", "/"));
        if (!f.exists()) {
            f.mkdirs();
        }
        return f.getAbsolutePath();
    }
    /**
     * @return void
     * @author hxh
     * @description 保存文件
     * @date 10:06 2021/10/14
     * @param: data
     * @param: path
     **/
    private void saveFile(String data, String path) throws IOException {
        if (!new File(path).exists())
            new File(path).createNewFile();
        FileUtil.saveAsFileByte(data.getBytes("UTF-8"), path);
    }
    public void createException(Class base) throws Exception {
        if (config.getService().getException() == null) {
            throw new Exception("尚未配置异常信息");
        }
        String path = getDirPath(config.getService().getException().getPkg());
        try {
            ExceptionVO vo = new ExceptionVO.Builder().setEntity(config.getEntity()).setPackageName(config.getService().getException().getPkg()).setBase(new ClassInfo(base.getSimpleName(), base.getName())).build();
            String result = GeneraterUtil.createException(vo);
            //保存
            saveFile(result, path);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void createDao() throws Exception {
        Annotation[] as = config.getEntity().getAnnotations();
        for (Annotation a : as) {
            if (a instanceof Table) {
                createMapper();
                break;
            } else if (a instanceof Document) {
                createMongoDBDao();
                break;
            }
        }
    }
    /**
     * @return org.yeshi.utils.generater.vo.dao.MongoDBDaoVO
     * @author hxh
     * @description 自动生成Dao
     * @date 18:24 2021/10/13
     * @param: packageName
     **/
    public MongoDBDaoVO createMongoDBDao() throws Exception {
        if (config.getDao() == null) {
            throw new Exception("尚未配置Dao信息");
        }
        String daoName = NameUtil.getDefaultDaoName(config.getEntity());
        String path = getDirPath(config.getDao().getPkg());
        MongoDBDaoVO vo = new MongoDBDaoVO.Builder()
                .setBaseDao(new ClassInfo(MongodbBaseDao.class.getSimpleName(), MongodbBaseDao.class.getName()))
                .setDao(new ClassInfo(daoName, config.getDao().getPkg() + "." + daoName))
                .setEntity(config.getEntity()).setDaoData(config.getDao()).build();
        String result = GeneraterUtil.createMongoDBDao(vo);
        //保存
        saveFile(result, new File(path, daoName + ".java").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() throws Exception {
        if (config.getDao() == null) {
            throw new Exception("尚未配置Dao信息");
        }
        if (StringUtil.isNullOrEmpty(config.getDao().getMapperDir())) {
            throw new Exception("Mapper存放目录为空");
        }
        String mapperName = NameUtil.getDefaultMapperName(config.getEntity());
        String path = getDirPath(config.getDao().getPkg());
        MyBatisDBDaoVO vo = new MyBatisDBDaoVO.Builder()
                .setBaseMapper(new ClassInfo(BaseMapper.class.getSimpleName(), BaseMapper.class.getName()))
                .setMapper(new ClassInfo(mapperName, config.getDao().getPkg() + "." + mapperName))
                .setEntity(config.getEntity())
                .setDaoData(config.getDao())
                .build();
        String result = GeneraterUtil.createMybatisDBMapper(vo);
        //保存
        saveFile(result, new File(path, mapperName + ".java").getAbsolutePath());
        if (!new File(config.getDao().getMapperDir()).exists())
            new File(config.getDao().getMapperDir()).mkdirs();
        result = GeneraterUtil.createMybatisDBMapperXML(vo);
        saveFile(result, new File(config.getDao().getMapperDir(), 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(config.getEntity()).setPackageName(packageName).build();
        String result = GeneraterUtil.createQuery(queryVO);
        saveFile(result, 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(ClassInfo dao) throws Exception {
        if (config.getService() == null) {
            throw new Exception("尚未配置service");
        }
        if (config.getDao() == null && dao == null) {
            throw new Exception("请在xml中配置Dao,或者传入Dao信息");
        }
        if (dao == null) {
            if (StringUtil.isNullOrEmpty(config.getDao().getMapperDir())) {
                String daoName = NameUtil.getDefaultDaoName(config.getEntity());
                dao = new ClassInfo(daoName, config.getDao().getPkg() + "." + daoName);
            } else {
                String daoName = NameUtil.getDefaultMapperName(config.getEntity());
                dao = new ClassInfo(daoName, config.getDao().getPkg() + "." + daoName);
            }
        }
        QueryVO queryVO = createQuery(config.getService().getQueryPackage());
        ClassInfo query = new ClassInfo(queryVO.getClassName(), queryVO.getPackageName() + "." + queryVO.getClassName());
        //创建service接口
        String serviceName = NameUtil.getDefaultServiceName(config.getEntity());
        String path = getDirPath(config.getService().getInterPackage());
        ServiceInfoVO vo = new ServiceInfoVO.Builder()
                .setPackageName(config.getService().getInterPackage())
                .setEntity(config.getEntity())
                .setQuery(query)
                .setService(new ClassInfo(serviceName, config.getService().getInterPackage() + "." + serviceName))
                .build();
        String result = GeneraterUtil.createService(vo);
        saveFile(result, new File(path, serviceName + ".java").getAbsolutePath());
        //创建service实现
        String serviceImplName = NameUtil.getDefaultServiceImplName(config.getEntity());
        path = getDirPath(config.getService().getImplPackage());
        ServiceImplInfoVO implVO = new ServiceImplInfoVO.Builder()
                .setDao(dao)
                .setPackageName(config.getService().getImplPackage())
                .setEntity(config.getEntity())
                .setQuery(query)
                .setService(new ClassInfo(serviceName, config.getService().getInterPackage() + "." + serviceName))
                .setDaoQuery(new ClassInfo("DaoQuery", dao.getClazz() + ".DaoQuery"))
                .build();
        result = GeneraterUtil.createServiceImpl(implVO);
        saveFile(result, 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(ClassInfo query, ClassInfo service) throws Exception {
        if (config.getAdmin() == null) {
            throw new Exception("尚未配置admin");
        }
        if (service == null) {
            if (config.getService() == null) {
                throw new Exception("请传入service或者在xml中配置service");
            }
            String serviceName = NameUtil.getDefaultServiceName(config.getEntity());
            service = new ClassInfo(serviceName, config.getService().getInterPackage() + "." + serviceName);
        }
        if (query == null) {
            if (config.getService() == null) {
                throw new Exception("请传入service或者在xml中配置service");
            }
            String queryName = NameUtil.getDefaultQueryName(config.getEntity());
            query = new ClassInfo(queryName, config.getService().getQueryPackage() + "." + queryName);
        }
        String path = getDirPath(config.getAdmin().getController().getPkg());
        AdminGeneraterInfo generaterInfo = new AdminGeneraterInfo.Builder().setEntityClass(config.getEntity()).setAdminData(config.getAdmin()).build();
        AdminControllerInfoVO vo = new AdminControllerInfoVO.Builder().setAdminInfo(generaterInfo).setPackageName(generaterInfo.getControllerData().getPkg()).setQueryVO(query).setService(service).build();
        String controllerName = vo.getControllerName();
        //生成controller
        String result = GeneraterUtil.createAdminController(vo);
        saveFile(result, new File(path, controllerName + ".java").getAbsolutePath());
        if (!new File(generaterInfo.getPageDir()).exists()) {
            new File(generaterInfo.getPageDir()).mkdirs();
        }
        String htmlNamePrefix = getHtmlNameFromEntityName(config.getEntity().getSimpleName());
        if (generaterInfo.getShowDataList() != null && generaterInfo.getShowDataList().size() > 0) {
            result = GeneraterUtil.createAdminPageForList(generaterInfo);
            saveFile(result, new File(generaterInfo.getPageDir(), generaterInfo.getListFileName() != null ? generaterInfo.getListFileName() : htmlNamePrefix + "_list.html").getAbsolutePath());
        }
        if (config.getAdmin().getPages().getAdd() != null && generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0) {
            result = GeneraterUtil.createAdminPageForAdd(generaterInfo);
            saveFile(result, new File(generaterInfo.getPageDir(), generaterInfo.getAddFileName() != null ? generaterInfo.getAddFileName() : htmlNamePrefix + "_add.html").getAbsolutePath());
        }
        if (config.getAdmin().getPages().getUpdate() != null && generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0) {
            result = GeneraterUtil.createAdminPageForUpdate(generaterInfo);
            saveFile(result, new File(generaterInfo.getPageDir(), generaterInfo.getUpdateFileName() != null ? generaterInfo.getUpdateFileName() : htmlNamePrefix + "_update.html").getAbsolutePath());
        }
    }
    /**
     * @return void
     * @author hxh
     * @description 创建整个功能模块
     * @date 18:19 2021/10/13
     * @param: daoParams
     * @param: serviceParams
     * @param: adminParams
     **/
    public void createWholeFunction() throws Exception {
        Annotation[] as = config.getEntity().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");
        }
        createDao();
        createService(null);
        createAdmin(null, null);
    }
    /**
     * @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/TestEntity3.java
New file
@@ -0,0 +1,91 @@
package org.yeshi.utils.generater;
import org.springframework.data.annotation.Id;
import org.yeshi.utils.generater.mybatis.Column;
import org.yeshi.utils.generater.mybatis.Table;
import java.util.Date;
/**
 * @author Administrator
 * @title: TestEntity
 * @description: 测试entity
 * @date 2021/9/23 14:22
 */
@Table("table_test")
public class TestEntity3 {
    @Id
    private String id;
    @Column(name = "nick_name")
    private String nickName;
    private Integer type;
    private Integer sex;
    private String portrait;
    private String province;
    private Date createTime;
    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 Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}
src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java
@@ -1,11 +1,18 @@
package org.yeshi.utils.generater.entity.admin;
import org.yeshi.utils.generater.annotation.admin.AdminController;
import org.yeshi.utils.generater.annotation.admin.form.*;
import org.yeshi.utils.generater.entity.KeyValue;
import org.yeshi.utils.generater.util.AnotationUtil;
import org.yeshi.utils.generater.vo.xmlconfig.admin.AdminControllerData;
import org.yeshi.utils.generater.vo.xmlconfig.admin.AdminData;
import org.yeshi.utils.generater.vo.xmlconfig.admin.ColumnData;
import org.yeshi.utils.generater.vo.xmlconfig.admin.SearchFormData;
import org.yeshi.utils.generater.vo.xmlconfig.admin.form.*;
import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent;
import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * @author Administrator
@@ -18,7 +25,7 @@
    //entity类
    private Class entity;
    //controller注解对象
    private AdminController controllerData;
    private AdminControllerData controllerData;
    //修改的表单行数据
    private List<FormRowData> updateFormRows;
    //添加的表单行数据
@@ -28,6 +35,24 @@
    private List<Map<String, Object>> showDataList;
    private String title;
    private String pageDir;
    private String listFileName;
    private String addFileName;
    private String updateFileName;
    private boolean delete;
    private boolean add;
    private boolean edit;
    public String getPageDir() {
        return pageDir;
    }
    public void setPageDir(String pageDir) {
        this.pageDir = pageDir;
    }
    public Class getEntity() {
        return entity;
@@ -37,11 +62,11 @@
        this.entity = entity;
    }
    public AdminController getControllerData() {
    public AdminControllerData getControllerData() {
        return controllerData;
    }
    public void setControllerData(AdminController controllerData) {
    public void setControllerData(AdminControllerData controllerData) {
        this.controllerData = controllerData;
    }
@@ -77,13 +102,75 @@
        this.showDataList = showDataList;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getListFileName() {
        return listFileName;
    }
    public void setListFileName(String listFileName) {
        this.listFileName = listFileName;
    }
    public String getAddFileName() {
        return addFileName;
    }
    public void setAddFileName(String addFileName) {
        this.addFileName = addFileName;
    }
    public String getUpdateFileName() {
        return updateFileName;
    }
    public void setUpdateFileName(String updateFileName) {
        this.updateFileName = updateFileName;
    }
    public boolean isDelete() {
        return delete;
    }
    public void setDelete(boolean delete) {
        this.delete = delete;
    }
    public boolean isAdd() {
        return add;
    }
    public void setAdd(boolean add) {
        this.add = add;
    }
    public boolean isEdit() {
        return edit;
    }
    public void setEdit(boolean edit) {
        this.edit = edit;
    }
    public static class Builder {
        private Class entity;
        private AdminData adminData;
        public Builder setEntityClass(Class clazz) {
            this.entity = clazz;
            return this;
        }
        public Builder setAdminData(AdminData adminData) {
            this.adminData = adminData;
            return this;
        }
@@ -91,24 +178,180 @@
            if (entity == null) {
                throw new Exception("尚未设置entity");
            }
            //查询是否需要生成管理界面与controller
            Annotation[] ans = entity.getAnnotations();
            for (Annotation an : ans) {
                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));
                    info.setUpdateFormRows(AnotationUtil.getUpdateFormRowData(entity));
                    info.setShowDataList(AnotationUtil.getShowDataList(entity));
                    return info;
            if (adminData != null) {
                //xml配置文件方式生成
                AdminGeneraterInfo info = new AdminGeneraterInfo();
                info.setEntity(entity);
                info.setControllerData(adminData.getController());
                info.setTitle(adminData.getPages().getTitle());
                info.setPageDir(adminData.getPages().getPageDir());
                info.setEdit(adminData.getPages().getList().isEdit());
                info.setDelete(adminData.getPages().getList().isDelete());
                info.setAdd(adminData.getPages().getAdd() != null);
                if (adminData.getPages().getList() != null) {
                    info.setListFileName(adminData.getPages().getList().getFileName());
                    if (adminData.getPages().getList().getSearchForm() != null) {
                        List<FormRowData> searchFormList = new ArrayList<>();
                        for (ColumnData columnData : adminData.getPages().getList().getSearchForm().getColumns()) {
                            FormRowData rowData = getFormRowData(columnData);
                            searchFormList.add(rowData);
                        }
                        info.setSearchFormRows(searchFormList);
                    }
                    List<Map<String, Object>> showList = new ArrayList<>();
                    for (ColumnData columnData : adminData.getPages().getList().getColumns()) {
                        Map<String, Object> map = new HashMap<>();
                        map.put("identifier", columnData.getProperty());
                        map.put("title", columnData.getTitle());
                        map.put("order", columnData.getOrder());
                        map.put("imgWidth", columnData.getImgWidth());
                        map.put("imgHeight", columnData.getImgHeight());
                        map.put("showType", columnData.getShowType().name());
                        showList.add(map);
                    }
                    Comparator<Map<String, Object>> cm = (Map<String, Object> o1, Map<String, Object> o2) -> {
                        return (int) (o1.get("order")) - (int) (o2.get("order"));
                    };
                    Collections.sort(showList, cm);
                    info.setShowDataList(showList);
                }
                if (adminData.getPages().getAdd() != null) {
                    info.setAddFileName(adminData.getPages().getAdd().getFileName());
                    List<FormRowData> rowList = new ArrayList<>();
                    for (ColumnData columnData : adminData.getPages().getAdd().getColumns()) {
                        FormRowData rowData = getFormRowData(columnData);
                        rowList.add(rowData);
                    }
                    info.setAddFormRows(rowList);
                }
                if (adminData.getPages().getUpdate() != null) {
                    info.setUpdateFileName(adminData.getPages().getUpdate().getFileName());
                    List<FormRowData> rowList = new ArrayList<>();
                    for (ColumnData columnData : adminData.getPages().getUpdate().getColumns()) {
                        FormRowData rowData = getFormRowData(columnData);
                        rowList.add(rowData);
                    }
                    info.setUpdateFormRows(rowList);
                }
                return info;
            } else {
                //注解方式生成
                //查询是否需要生成管理界面与controller
                Annotation[] ans = entity.getAnnotations();
                for (Annotation an : ans) {
                    if (an instanceof AdminController) {
                        Class searchFormClass = ((AdminController) an).searchForm();
                        AdminGeneraterInfo info = new AdminGeneraterInfo();
                        info.setEntity(entity);
                        AdminControllerData adminControllerData = new AdminControllerData();
                        AdminController adminController = (AdminController) an;
                        adminControllerData.setMapping(adminController.mapping());
                        adminControllerData.setResponseBody(true);
                        adminControllerData.setPkg(null);
                        adminControllerData.setJsonp(false);
                        info.setEdit(adminController.edit());
                        info.setDelete(adminController.delete());
                        info.setAdd(true);
                        info.setControllerData(adminControllerData);
                        info.setSearchFormRows(AnotationUtil.getFormRowData(searchFormClass));
                        info.setAddFormRows(AnotationUtil.getFormRowData(entity));
                        info.setUpdateFormRows(AnotationUtil.getUpdateFormRowData(entity));
                        info.setShowDataList(AnotationUtil.getShowDataList(entity));
                        return info;
                    }
                }
            }
            return null;
        }
        private FormRowData getFormRowData(ColumnData columnData) {
            FormRowData rowData = new FormRowData();
            rowData.setKey(columnData.getProperty());
            FormComponent component = columnData.getComponent();
            Map<String, Object> params = new HashMap<>();
            params.put("desc", component.getDesc());
            params.put("disable", !component.isEnable());
            params.put("title", columnData.getTitle());
            if (component instanceof FormComponentText) {
                rowData.setType(Text.class.getSimpleName());
                FormComponentText formComponentText = (FormComponentText) component;
                params.put("dateFormat", formComponentText.getDateFormat());
                params.put("inputType", formComponentText.getInputType().name());
                params.put("maxLength", formComponentText.getMaxLength() == null ? -1 : formComponentText.getMaxLength());
                params.put("minLength", formComponentText.getMinLength() == null ? -1 : formComponentText.getMinLength());
                params.put("placeHolder", formComponentText.getPlaceHolder());
                if (formComponentText.getVerify() != null) {
                    params.put("require", formComponentText.getVerify().isRequire());
                    params.put("verifyType", formComponentText.getVerify().getType());
                    params.put("verifyValue", formComponentText.getVerify().getExpress());
                    params.put("verifyNotifyMsg", formComponentText.getVerify().getNotify());
                }
            } else if (component instanceof FormComponentRadioGroup) {
                rowData.setType(RadioGroup.class.getSimpleName());
                FormComponentRadioGroup formComponentRadioGroup = (FormComponentRadioGroup) component;
                Map<String, Object> map = formComponentRadioGroup.getValues();
                List<KeyValue> list = new ArrayList<>();
                for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) {
                    String key = its.next();
                    list.add(new KeyValue(key, map.get(key) + ""));
                }
                params.put("values", list);
            } else if (component instanceof FormComponentImg) {
                rowData.setType(Img.class.getSimpleName());
                FormComponentImg formComponentImg = (FormComponentImg) component;
                params.put("width", formComponentImg.getWidth() == null ? -1 : formComponentImg.getWidth());
                params.put("height", formComponentImg.getHeight() == null ? -1 : formComponentImg.getHeight());
                params.put("uploadApi", formComponentImg.getApi().getPath());
                if (formComponentImg.getApi().getParams() != null) {
                    List<KeyValue> list = new ArrayList<>();
                    for (Iterator<String> its = formComponentImg.getApi().getParams().keySet().iterator(); its.hasNext(); ) {
                        String key = its.next();
                        list.add(new KeyValue(key, formComponentImg.getApi().getParams().get(key) + ""));
                    }
                    params.put("uploadApiParams", list);
                }
            } else if (component instanceof FormComponentSwitch) {
                rowData.setType(Switch.class.getSimpleName());
            } else if (component instanceof FormComponentSelect) {
                rowData.setType(Select.class.getSimpleName());
                FormComponentSelect formComponentSelect = (FormComponentSelect) component;
                if (formComponentSelect.getApi() != null) {
                    params.put("apiPath", formComponentSelect.getApi().getPath());
                    List<KeyValue> list = new ArrayList<>();
                    for (Iterator<String> its = formComponentSelect.getApi().getParams().keySet().iterator(); its.hasNext(); ) {
                        String key = its.next();
                        list.add(new KeyValue(key, formComponentSelect.getApi().getParams().get(key) + ""));
                    }
                    params.put("apiParams", list);
                }
                if (formComponentSelect.getValues() != null) {
                    List<KeyValue> list = new ArrayList<>();
                    for (Iterator<String> its = formComponentSelect.getValues().keySet().iterator(); its.hasNext(); ) {
                        String key = its.next();
                        list.add(new KeyValue(key, formComponentSelect.getValues().get(key) + ""));
                    }
                    params.put("values", list);
                }
            }
            rowData.setParams(params);
            return rowData;
        }
    }
src/main/java/org/yeshi/utils/generater/util/NameUtil.java
New file
@@ -0,0 +1,32 @@
package org.yeshi.utils.generater.util;
/**
 * @author hxh
 * @title: NameUtil
 * @description: 取名工具类
 * @date 2022/3/29 15:59
 */
public class NameUtil {
    public static String getDefaultDaoName(Class entity) {
        return entity.getSimpleName() + "Dao";
    }
    public static String getDefaultMapperName(Class entity) {
        return entity.getSimpleName() + "Mapper";
    }
    public static String getDefaultServiceName(Class entity) {
        return entity.getSimpleName() + "Service";
    }
    public static String getDefaultQueryName(Class entity) {
        return entity.getSimpleName() + "Query";
    }
    public static String getDefaultServiceImplName(Class entity) {
        return entity.getSimpleName() + "ServiceImpl";
    }
}
src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminControllerInfoVO.java
@@ -19,6 +19,8 @@
    private ClassInfo service;
    private ClassInfo query;
    private boolean jsonp;
    private boolean responseBody;
    //主键类型
    private String identifyIdType;
@@ -38,6 +40,8 @@
        private ClassInfo query;
        //
        private ClassInfo service;
        private boolean responseBody;
        public Builder setAdminInfo(AdminGeneraterInfo generaterInfo) {
@@ -60,6 +64,11 @@
            return this;
        }
        public Builder setResponseBody(boolean responseBody) {
            this.responseBody = responseBody;
            return this;
        }
        public AdminControllerInfoVO build() throws Exception {
            if (generaterInfo == null) {
                throw new Exception("generaterInfo不能为空");
@@ -75,15 +84,16 @@
            }
            AdminControllerInfoVO vo = new AdminControllerInfoVO();
            vo.setMapping(generaterInfo.getControllerData().mapping());
            vo.setMapping(generaterInfo.getControllerData().getMapping());
            vo.setEntity(new ClassInfo(generaterInfo.getEntity().getSimpleName(), generaterInfo.getEntity().getName()));
            vo.setJsonp(generaterInfo.getControllerData().jsonp());
            vo.setJsonp(generaterInfo.getControllerData().isJsonp());
            vo.setPackageName(packageName);
            vo.setQueryVO(query);
            vo.setService(service);
            vo.setAdd(generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0);
            vo.setUpdate(generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0 && generaterInfo.getControllerData().edit());
            vo.setDelete(generaterInfo.getControllerData().delete());
            vo.setUpdate(generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0 );
            vo.setDelete(true);
            vo.setResponseBody(generaterInfo.getControllerData().isResponseBody());
            vo.setIdentifyIdType(EntityUtil.getIdentifyId(generaterInfo.getEntity()).getType().getSimpleName());
            vo.setControllerName(vo.getEntity().getName() + "AdminController");
@@ -184,4 +194,12 @@
    public void setDelete(boolean delete) {
        this.delete = delete;
    }
    public boolean isResponseBody() {
        return responseBody;
    }
    public void setResponseBody(boolean responseBody) {
        this.responseBody = responseBody;
    }
}
src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java
@@ -40,9 +40,9 @@
        public FormAddInfoVO build() {
            FormAddInfoVO vo = new FormAddInfoVO();
            vo.setAddApi(generaterInfo.getControllerData().mapping() + "/add");
            vo.setAddApi(generaterInfo.getControllerData().getMapping() + "/add");
            vo.setRowsList(generaterInfo.getAddFormRows());
            vo.setTitle("新增" + generaterInfo.getControllerData().title());
            vo.setTitle("新增" + generaterInfo.getTitle());
            //遍历需要正则表达式的Text或者TextArea
            List<FormInputRegexVerifyVO> verifyVOList = new ArrayList<>();
            for (FormRowData row : vo.getRowsList()) {
src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java
@@ -41,10 +41,10 @@
        public FormUpdateInfoVO build() {
            FormUpdateInfoVO vo = new FormUpdateInfoVO();
            vo.setUpdateApi(generaterInfo.getControllerData().mapping() + "/update");
            vo.setDetailApi(generaterInfo.getControllerData().mapping() + "/get");
            vo.setUpdateApi(generaterInfo.getControllerData().getMapping() + "/update");
            vo.setDetailApi(generaterInfo.getControllerData().getMapping() + "/get");
            vo.setRowsList(generaterInfo.getUpdateFormRows());
            vo.setTitle("修改" + generaterInfo.getControllerData().title());
            vo.setTitle("修改" + generaterInfo.getTitle());
            //遍历需要正则表达式的Text或者TextArea
            List<FormInputRegexVerifyVO> verifyVOList = new ArrayList<>();
            for (FormRowData row : vo.getRowsList()) {
src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java
@@ -51,7 +51,7 @@
        public ListInfoVO build() {
            ListInfoVO vo = new ListInfoVO();
            vo.setListApi(generaterInfo.getControllerData().mapping() + "/list");
            vo.setListApi(generaterInfo.getControllerData().getMapping() + "/list");
            if (generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0) {
                vo.setAddPagePath(generaterInfo.getEntity().getSimpleName().toLowerCase() + "_add.html");
            }
@@ -61,10 +61,10 @@
            }
            vo.setSearchFormRows(generaterInfo.getSearchFormRows());
            vo.setShowFileds(generaterInfo.getShowDataList());
            vo.setTitle(generaterInfo.getControllerData().title());
            vo.setTitle(generaterInfo.getTitle());
            if (generaterInfo.getControllerData().delete()) {
                vo.setDeleteApi(generaterInfo.getControllerData().mapping() + "/delete");
            if (generaterInfo.isDelete()) {
                vo.setDeleteApi(generaterInfo.getControllerData().getMapping() + "/delete");
            }
            //遍历需要正则表达式的Text或者TextArea
@@ -132,6 +132,9 @@
                if (layVerify.endsWith("|"))
                    layVerify = layVerify.substring(0, layVerify.length() - 1);
                //重新赋值,表单中直接取值
                if (row.getParams() == null) {
                    row.setParams(new HashMap<>());
                }
                row.getParams().put("verifyValue", layVerify);
            }
src/main/java/org/yeshi/utils/generater/vo/dao/MongoDBDaoVO.java
@@ -5,6 +5,8 @@
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition;
import org.yeshi.utils.generater.entity.*;
import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData;
import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoQuery;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
@@ -31,6 +33,8 @@
        private Class entity;
        private ClassInfo dao;
        private DaoData daoData;
        public Builder setBaseDao(ClassInfo baseDao) {
            this.baseDao = baseDao;
            return this;
@@ -43,6 +47,11 @@
        public Builder setDao(ClassInfo dao) {
            this.dao = dao;
            return this;
        }
        public Builder setDaoData(DaoData daoData) {
            this.daoData = daoData;
            return this;
        }
@@ -95,16 +104,34 @@
                }
                //获取查询条件
                for (Annotation a : as) {
                    if (a instanceof DaoQueryCondition) {
                        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()));
                if (daoData != null) {
                    //查询条件从外部传入
                    for (DaoQuery query : daoData.getQueryList()) {
                        if (query.getName().equalsIgnoreCase(columName)) {
                            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(), query.getQueryType()));
                            }
                        }
                        break;
                    }
                } else {
                    //根据注解设置的查询条件
                    for (Annotation a : as) {
                        if (a instanceof DaoQueryCondition) {
                            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
@@ -9,6 +9,8 @@
import org.yeshi.utils.generater.mybatis.ColumnParseUtil;
import org.yeshi.utils.generater.mybatis.Table;
import org.yeshi.utils.generater.vo.ExceptionVO;
import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData;
import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoQuery;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
@@ -28,11 +30,13 @@
    private List<DaoQueryColumnData> queryList;
    private String table;
    public static class Builder {
        private ClassInfo baseMapper;
        private Class entity;
        private ClassInfo mapper;
        private DaoData daoData;
        public Builder setBaseMapper(ClassInfo baseMapper) {
            this.baseMapper = baseMapper;
@@ -46,6 +50,11 @@
        public Builder setMapper(ClassInfo mapper) {
            this.mapper = mapper;
            return this;
        }
        public Builder setDaoData(DaoData daoData) {
            this.daoData = daoData;
            return this;
        }
@@ -133,16 +142,31 @@
                columlist.add(columData);
                //获取查询条件
                for (Annotation a : as) {
                    if (a instanceof DaoQueryCondition) {
                        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()));
                if (daoData != null) {
                    //查询条件从外部传入
                    for (DaoQuery query : daoData.getQueryList()) {
                        if (query.getName().equalsIgnoreCase(columData.getProperty())) {
                            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(), query.getQueryType()));
                            }
                        }
                        break;
                    }
                } else {
                    //获取注解查询条件
                    for (Annotation a : as) {
                        if (a instanceof DaoQueryCondition) {
                            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
@@ -2,6 +2,7 @@
import org.yeshi.utils.generater.entity.BaseData;
import org.yeshi.utils.generater.util.EntityUtil;
import org.yeshi.utils.generater.util.NameUtil;
import java.lang.reflect.Field;
@@ -41,7 +42,7 @@
            }
            QueryVO vo = new QueryVO();
            vo.setPackageName(packageName);
            vo.setClassName(entity.getSimpleName() + "Query");
            vo.setClassName(NameUtil.getDefaultQueryName(entity));
            return vo;
        }
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/GenertorConfig.java
New file
@@ -0,0 +1,50 @@
package org.yeshi.utils.generater.vo.xmlconfig;
import org.yeshi.utils.generater.vo.xmlconfig.admin.AdminData;
import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData;
import org.yeshi.utils.generater.vo.xmlconfig.service.ServiceData;
/**
 * @author hxh
 * @title: GenertorConfig
 * @description: xml映射的数据解析结果
 * @date 2022/3/28 11:53
 */
public class GenertorConfig {
    private Class entity;
    private DaoData dao;
    private ServiceData service;
    private AdminData admin;
    public Class getEntity() {
        return entity;
    }
    public void setEntity(Class entity) {
        this.entity = entity;
    }
    public DaoData getDao() {
        return dao;
    }
    public void setDao(DaoData dao) {
        this.dao = dao;
    }
    public ServiceData getService() {
        return service;
    }
    public void setService(ServiceData service) {
        this.service = service;
    }
    public AdminData getAdmin() {
        return admin;
    }
    public void setAdmin(AdminData admin) {
        this.admin = admin;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/XmlConfigParseUtil.java
New file
@@ -0,0 +1,425 @@
package org.yeshi.utils.generater.vo.xmlconfig;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.yeshi.utils.generater.GeneraterManagerV2;
import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition;
import org.yeshi.utils.generater.annotation.admin.Show;
import org.yeshi.utils.generater.annotation.admin.form.Text;
import org.yeshi.utils.generater.entity.admin.FormVerifyType;
import org.yeshi.utils.generater.vo.xmlconfig.admin.*;
import org.yeshi.utils.generater.vo.xmlconfig.admin.form.*;
import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData;
import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent;
import org.yeshi.utils.generater.vo.xmlconfig.base.VerifyData;
import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData;
import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoQuery;
import org.yeshi.utils.generater.vo.xmlconfig.service.ExceptionData;
import org.yeshi.utils.generater.vo.xmlconfig.service.ServiceData;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author hxh
 * @title: XmlConfigParseUtil
 * @description: xml配置文件解析工具类
 * @date 2022/3/28 15:02
 */
public class XmlConfigParseUtil {
    public static GenertorConfig parse(InputStream inputStream) throws IOException, ParserConfigurationException, SAXException, ClassNotFoundException {
        if (inputStream == null) {
            throw new FileNotFoundException();
        }
        GenertorConfig genertorConfig = new GenertorConfig();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document root = builder.parse(inputStream);
        NodeList nodelist = root.getElementsByTagName("generator-config");
        Node rootNode = nodelist.item(0);
        String clazz = rootNode.getAttributes().getNamedItem("class").getNodeValue();
        genertorConfig.setEntity(Class.forName(clazz));
        nodelist = rootNode.getChildNodes();
        for (int i = 0; i < nodelist.getLength(); i++) {
            Node node = nodelist.item(i);
            switch (node.getNodeName()) {
                case "dao": {
                    genertorConfig.setDao(parseDao(node));
                }
                break;
                case "service": {
                    genertorConfig.setService(parseService(node));
                }
                break;
                case "admin": {
                    genertorConfig.setAdmin(parseAdmin(node));
                }
                break;
            }
        }
        return genertorConfig;
    }
    private static DaoData parseDao(Node node) {
        DaoData daoData = new DaoData();
        daoData.setPkg(node.getAttributes().getNamedItem("package").getNodeValue());
        daoData.setMapperDir(getNodeAttributeValue(node, "mapperDir"));
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++) {
            if (nodeList.item(i).getNodeName().equalsIgnoreCase("queryList")) {
                nodeList = nodeList.item(i).getChildNodes();
                List<DaoQuery> queryList = new ArrayList<>();
                for (int j = 0; j < nodeList.getLength(); j++) {
                    Node node1 = nodeList.item(j);
                    if (node1.getNodeName().equalsIgnoreCase("query")) {
                        DaoQuery daoQuery = new DaoQuery();
                        daoQuery.setName(getNodeAttributeValue(node1, "name"));
                        daoQuery.setQueryType(DaoQueryCondition.QueryType.valueOf(getNodeAttributeValue(node1, "type")));
                        queryList.add(daoQuery);
                    }
                }
                daoData.setQueryList(queryList);
                break;
            }
        }
        return daoData;
    }
    private static ServiceData parseService(Node node) {
        ServiceData data = new ServiceData();
        data.setInterPackage(getNodeAttributeValue(node, "interPackage"));
        data.setImplPackage(getNodeAttributeValue(node, "implPackage"));
        data.setQueryPackage(getNodeAttributeValue(node, "queryPackage"));
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++) {
            if (nodeList.item(i).getNodeName().equalsIgnoreCase("exception")) {
                ExceptionData exceptionData = new ExceptionData();
                exceptionData.setPkg(getNodeAttributeValue(nodeList.item(i), "package"));
                exceptionData.setName(getNodeAttributeValue(nodeList.item(i), "name"));
                data.setException(exceptionData);
                break;
            }
        }
        return data;
    }
    private static AdminData parseAdmin(Node node) {
        AdminData adminData = new AdminData();
        //解析page数据
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++) {
            switch (nodeList.item(i).getNodeName()) {
                case "pages": {
                    Node node1 = nodeList.item(i);
                    AdminPageData adminPageData = new AdminPageData();
                    adminPageData.setTitle(getNodeAttributeValue(node1, "title"));
                    adminPageData.setPageDir(getNodeAttributeValue(node1, "pageDir"));
                    NodeList nodeList1 = node1.getChildNodes();
                    for (int i1 = 0; i1 < nodeList1.getLength(); i1++) {
                        Node node2 = nodeList1.item(i1);
                        switch (node2.getNodeName()) {
                            case "list": {
                                ListPageData listPageData = new ListPageData();
                                listPageData.setDelete(Boolean.parseBoolean(getNodeAttributeValue(node2, "delete")));
                                listPageData.setEdit(Boolean.parseBoolean(getNodeAttributeValue(node2, "edit")));
                                listPageData.setPage(Boolean.parseBoolean(getNodeAttributeValue(node2, "page")));
                                listPageData.setFileName(getNodeAttributeValue(node2, "fileName"));
                                NodeList nodeList2 = node2.getChildNodes();
                                for (int i2 = 0; i2 < nodeList2.getLength(); i2++) {
                                    Node node3 = nodeList2.item(i2);
                                    if (node3.getNodeName().equalsIgnoreCase("searchForm")) {
                                        SearchFormData searchFormData = new SearchFormData();
                                        NodeList nodeList3 = node3.getChildNodes();
                                        for (int i3 = 0; i3 < nodeList3.getLength(); i3++) {
                                            if (nodeList3.item(i3).getNodeName().equalsIgnoreCase("columns")) {
                                                searchFormData.setColumns(parseColumns(nodeList3.item(i3)));
                                                break;
                                            }
                                        }
                                        searchFormData.setPkg(getNodeAttributeValue(node3, "package"));
                                        searchFormData.setName(getNodeAttributeValue(node3, "name"));
                                        listPageData.setSearchForm(searchFormData);
                                    } else if (node3.getNodeName().equalsIgnoreCase("columns")) {
                                        listPageData.setColumns(parseColumns(node3));
                                    }
                                }
                                adminPageData.setList(listPageData);
                            }
                            break;
                            case "add": {
                                AddPageData addPageData = new AddPageData();
                                addPageData.setColumns(parseColumns(node2));
                                addPageData.setApi(null);
                                addPageData.setFileName(getNodeAttributeValue(node2, "fileName"));
                                adminPageData.setAdd(addPageData);
                            }
                            break;
                            case "update": {
                                UpdatePageData updatePageData = new UpdatePageData();
                                updatePageData.setColumns(parseColumns(node2));
                                updatePageData.setApi(null);
                                updatePageData.setFileName(getNodeAttributeValue(node2, "fileName"));
                                adminPageData.setUpdate(updatePageData);
                            }
                            break;
                        }
                    }
                    adminData.setPages(adminPageData);
                }
                break;
                case "controller": {
                    Node node1 = nodeList.item(i);
                    AdminControllerData adminControllerData = new AdminControllerData();
                    adminControllerData.setJsonp(Boolean.parseBoolean(getNodeAttributeValue(node1, "jsonp")));
                    adminControllerData.setMapping(getNodeAttributeValue(node1, "mapping"));
                    adminControllerData.setName(getNodeAttributeValue(node1, "name"));
                    adminControllerData.setPkg(getNodeAttributeValue(node1, "package"));
                    adminControllerData.setResponseBody(Boolean.parseBoolean(getNodeAttributeValue(node1, "responseBody")));
                    adminData.setController(adminControllerData);
                }
                break;
            }
        }
        return adminData;
    }
    private static String getNodeAttributeValue(Node node, String attr) {
        if (node.getAttributes().getNamedItem(attr) != null) {
            return node.getAttributes().getNamedItem(attr).getNodeValue();
        }
        return null;
    }
    private static List<ColumnData> parseColumns(Node node) {
        List<ColumnData> list = new ArrayList<>();
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++) {
            Node node1 = nodeList.item(i);
            if (node1.getNodeName().equalsIgnoreCase("column")) {
                list.add(parseColumn(node1));
            }
        }
        return list;
    }
    private static ColumnData parseColumn(Node node) {
        ColumnData columnData = new ColumnData();
        columnData.setTitle(getNodeAttributeValue(node, "title"));
        columnData.setProperty(getNodeAttributeValue(node, "property"));
        String order = getNodeAttributeValue(node, "order");
        if (order != null) {
            columnData.setOrder(Integer.parseInt(order));
        }
        String showType = getNodeAttributeValue(node, "showType");
        if (showType != null) {
            columnData.setShowType(Show.ShowType.valueOf(showType));
        }
        columnData.setImgHeight(Integer.parseInt(getNodeAttributeValue(node, "imgHeight")));
        columnData.setImgWidth(Integer.parseInt(getNodeAttributeValue(node, "imgWidth")));
        NodeList nodeList = node.getChildNodes();
        if (nodeList != null) {
            for (int i = 0; i < nodeList.getLength(); i++) {
                FormComponent formComponent = parseFormComponent(nodeList.item(i));
                if (formComponent != null) {
                    columnData.setComponent(formComponent);
                    break;
                }
            }
        }
        return columnData;
    }
    private static FormComponent parseFormComponent(Node node) {
        switch (node.getNodeName()) {
            case "text": {
                FormComponentText formComponentText = new FormComponentText();
                formComponentText.setDateFormat(getNodeAttributeValue(node, "dateFormat"));
                formComponentText.setDesc(getNodeAttributeValue(node, "desc"));
                formComponentText.setInputType(Text.Type.valueOf(getNodeAttributeValue(node, "inputType")));
                String maxLength = getNodeAttributeValue(node, "maxLength");
                String minlength = getNodeAttributeValue(node, "minlength");
                if (maxLength != null) {
                    formComponentText.setMaxLength(Integer.parseInt(maxLength));
                }
                if (minlength != null) {
                    formComponentText.setMinLength(Integer.parseInt(minlength));
                }
                formComponentText.setPlaceHolder(getNodeAttributeValue(node, "placeHolder"));
                formComponentText.setTextArea(Boolean.parseBoolean(getNodeAttributeValue(node, "isTextArea")));
                formComponentText.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable")));
                formComponentText.setNotify(getNodeAttributeValue(node, "notify"));
                NodeList nodeList = node.getChildNodes();
                for (int i = 0; i < nodeList.getLength(); i++) {
                    if (nodeList.item(i).getNodeName().equalsIgnoreCase("verify")) {
                        formComponentText.setVerify(parseVerify(nodeList.item(i)));
                    }
                }
                return formComponentText;
            }
            case "select": {
                FormComponentSelect select = new FormComponentSelect();
                NodeList nodeList = node.getChildNodes();
                for (int i = 0; i < nodeList.getLength(); i++) {
                    switch (nodeList.item(i).getNodeName()) {
                        case "api": {
                            select.setApi(parseApi(nodeList.item(i)));
                        }
                        break;
                        case "values": {
                            select.setValues(parseValues(nodeList.item(i)));
                        }
                        break;
                        case "verify": {
                            select.setVerify(parseVerify(nodeList.item(i)));
                        }
                        break;
                    }
                }
                select.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable")));
                select.setNotify(getNodeAttributeValue(node, "notify"));
                return select;
            }
            case "switch": {
                FormComponentSwitch formComponentSwitch = new FormComponentSwitch();
                formComponentSwitch.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable")));
                formComponentSwitch.setNotify(getNodeAttributeValue(node, "notify"));
                return formComponentSwitch;
            }
            case "img": {
                FormComponentImg img = new FormComponentImg();
                img.setEditLink(Boolean.parseBoolean(getNodeAttributeValue(node, "editLink")));
                NodeList nodeList = node.getChildNodes();
                for (int i = 0; i < nodeList.getLength(); i++) {
                    if (nodeList.item(i).getNodeName().equalsIgnoreCase("api")) {
                        img.setApi(parseApi(nodeList.item(i)));
                        break;
                    }
                }
                String height = getNodeAttributeValue(node, "height");
                if (height != null) {
                    img.setHeight(Integer.parseInt(height));
                }
                String width = getNodeAttributeValue(node, "width");
                if (width != null) {
                    img.setWidth(Integer.parseInt(width));
                }
                img.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable")));
                img.setNotify(getNodeAttributeValue(node, "notify"));
                return img;
            }
            case "radioGroup": {
                FormComponentRadioGroup radioGroup = new FormComponentRadioGroup();
                NodeList nodeList = node.getChildNodes();
                for (int i = 0; i < nodeList.getLength(); i++) {
                    if (nodeList.item(i).getNodeName().equalsIgnoreCase("values")) {
                        radioGroup.setValues(parseValues(nodeList.item(i)));
                        break;
                    }
                }
                radioGroup.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable")));
                radioGroup.setNotify(getNodeAttributeValue(node, "notify"));
                return radioGroup;
            }
        }
        return null;
    }
    private static VerifyData parseVerify(Node node) {
        if (node == null) {
            return null;
        }
        VerifyData verifyData = new VerifyData();
        verifyData.setType(FormVerifyType.valueOf(getNodeAttributeValue(node, "type")));
        verifyData.setExpress(getNodeAttributeValue(node, "express"));
        verifyData.setNotify(getNodeAttributeValue(node, "notify"));
        verifyData.setRequire(Boolean.parseBoolean(getNodeAttributeValue(node, "require")));
        return verifyData;
    }
    private static ApiData parseApi(Node node) {
        if (node == null) {
            return null;
        }
        ApiData apiData = new ApiData();
        apiData.setPath(getNodeAttributeValue(node, "path"));
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++) {
            if (nodeList.item(i).getNodeName().equalsIgnoreCase("params")) {
                apiData.setParams(parseValues(nodeList.item(i)));
            }
        }
        return apiData;
    }
    private static Map<String, Object> parseValues(Node node) {
        if (node == null) {
            return null;
        }
        Map<String, Object> values = new HashMap<>();
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++) {
            if (nodeList.item(i).getNodeName().equalsIgnoreCase("value")) {
                values.put(getNodeAttributeValue(nodeList.item(i), "key"), nodeList.item(i).getNodeValue());
            }
        }
        return values;
    }
    public static void main(String[] args) throws Exception {
        GenertorConfig config = XmlConfigParseUtil.parse(new FileInputStream("D:\\workspace\\server\\utils\\src\\test\\test.xml"));
        GeneraterManagerV2.getInstance().init("D:\\workspace\\server\\utils\\src\\test\\java", config);
        GeneraterManagerV2.getInstance().createWholeFunction();
        System.out.println(config);
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AddPageData.java
New file
@@ -0,0 +1,44 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin;
import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData;
import java.util.List;
/**
 * @author hxh
 * @title: ListPageData
 * @description: 新增页面
 * @date 2022/3/28 14:08
 */
public class AddPageData {
    private List<ColumnData> columns;
    //请求接口
    private ApiData api;
    //文件名称
    private String fileName;
    public List<ColumnData> getColumns() {
        return columns;
    }
    public void setColumns(List<ColumnData> columns) {
        this.columns = columns;
    }
    public ApiData getApi() {
        return api;
    }
    public void setApi(ApiData api) {
        this.api = api;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminControllerData.java
New file
@@ -0,0 +1,59 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin;
/**
 * @author hxh
 * @title: AdminControllerData
 * @description: 管理Controller数据
 * @date 2022/3/28 14:23
 */
public class AdminControllerData {
    private String pkg;
    private String name;
    private String mapping;
    //是否responseBody
    private boolean responseBody;
    //接口是否jsonp
    private boolean jsonp;
    public String getPkg() {
        return pkg;
    }
    public void setPkg(String pkg) {
        this.pkg = pkg;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMapping() {
        return mapping;
    }
    public void setMapping(String mapping) {
        this.mapping = mapping;
    }
    public boolean isResponseBody() {
        return responseBody;
    }
    public void setResponseBody(boolean responseBody) {
        this.responseBody = responseBody;
    }
    public boolean isJsonp() {
        return jsonp;
    }
    public void setJsonp(boolean jsonp) {
        this.jsonp = jsonp;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminData.java
New file
@@ -0,0 +1,28 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin;
/**
 * @author hxh
 * @title: AdminData
 * @description: 管理信息
 * @date 2022/3/28 14:17
 */
public class AdminData {
    private AdminPageData pages;
    private AdminControllerData controller;
    public AdminPageData getPages() {
        return pages;
    }
    public void setPages(AdminPageData pages) {
        this.pages = pages;
    }
    public AdminControllerData getController() {
        return controller;
    }
    public void setController(AdminControllerData controller) {
        this.controller = controller;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminPageData.java
New file
@@ -0,0 +1,57 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin;
/**
 * @author hxh
 * @title: AdminPageData
 * @description: TODO
 * @date 2022/3/28 14:31
 */
public class AdminPageData {
    private ListPageData list;
    private AddPageData add;
    private UpdatePageData update;
    //页面文件目录路径
    private String pageDir;
    //功能名称
    private String title;
    public ListPageData getList() {
        return list;
    }
    public void setList(ListPageData list) {
        this.list = list;
    }
    public AddPageData getAdd() {
        return add;
    }
    public void setAdd(AddPageData add) {
        this.add = add;
    }
    public UpdatePageData getUpdate() {
        return update;
    }
    public void setUpdate(UpdatePageData update) {
        this.update = update;
    }
    public String getPageDir() {
        return pageDir;
    }
    public void setPageDir(String pageDir) {
        this.pageDir = pageDir;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/ColumnData.java
New file
@@ -0,0 +1,86 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin;
import org.yeshi.utils.generater.annotation.admin.Show;
import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent;
/**
 * @author hxh
 * @title: ColumnData
 * @description: 列信息
 * @date 2022/3/28 14:05
 */
public class ColumnData {
    //显示标题
    private String title;
    //属性字段
    private String property;
    //排序字段
    private Integer order;
    //显示类型
    private Show.ShowType showType;
    private int imgWidth;
    private int imgHeight;
    //编辑控件
    private FormComponent component;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getProperty() {
        return property;
    }
    public void setProperty(String property) {
        this.property = property;
    }
    public Integer getOrder() {
        return order;
    }
    public void setOrder(Integer order) {
        this.order = order;
    }
    public FormComponent getComponent() {
        return component;
    }
    public void setComponent(FormComponent component) {
        this.component = component;
    }
    public Show.ShowType getShowType() {
        return showType;
    }
    public void setShowType(Show.ShowType showType) {
        this.showType = showType;
    }
    public int getImgWidth() {
        return imgWidth;
    }
    public void setImgWidth(int imgWidth) {
        this.imgWidth = imgWidth;
    }
    public int getImgHeight() {
        return imgHeight;
    }
    public void setImgHeight(int imgHeight) {
        this.imgHeight = imgHeight;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/ListPageData.java
New file
@@ -0,0 +1,85 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin;
import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData;
import java.util.List;
/**
 * @author hxh
 * @title: ListPageData
 * @description: 列表页面
 * @date 2022/3/28 14:08
 */
public class ListPageData {
    private List<ColumnData> columns;
    private SearchFormData searchForm;
    //请求接口
    private ApiData api;
    //是否可删除
    private boolean delete;
    //是否可编辑
    private boolean edit;
    //文件名称
    private String fileName;
    //是否可分页
    private boolean page;
    public List<ColumnData> getColumns() {
        return columns;
    }
    public void setColumns(List<ColumnData> columns) {
        this.columns = columns;
    }
    public SearchFormData getSearchForm() {
        return searchForm;
    }
    public void setSearchForm(SearchFormData searchForm) {
        this.searchForm = searchForm;
    }
    public ApiData getApi() {
        return api;
    }
    public void setApi(ApiData api) {
        this.api = api;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public boolean isDelete() {
        return delete;
    }
    public void setDelete(boolean delete) {
        this.delete = delete;
    }
    public boolean isEdit() {
        return edit;
    }
    public void setEdit(boolean edit) {
        this.edit = edit;
    }
    public boolean isPage() {
        return page;
    }
    public void setPage(boolean page) {
        this.page = page;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/SearchFormData.java
New file
@@ -0,0 +1,43 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin;
import java.util.List;
/**
 * @author hxh
 * @title: SearchFormData
 * @description: 搜索条件表单
 * @date 2022/3/28 14:10
 */
public class SearchFormData {
    //列
    private List<ColumnData> columns;
    //包名
    private String pkg;
    //类名称
    private String name;
    public List<ColumnData> getColumns() {
        return columns;
    }
    public void setColumns(List<ColumnData> columns) {
        this.columns = columns;
    }
    public String getPkg() {
        return pkg;
    }
    public void setPkg(String pkg) {
        this.pkg = pkg;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/UpdatePageData.java
New file
@@ -0,0 +1,44 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin;
import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData;
import java.util.List;
/**
 * @author hxh
 * @title: ListPageData
 * @description: 更新页面
 * @date 2022/3/28 14:08
 */
public class UpdatePageData {
    private List<ColumnData> columns;
    //请求接口
    private ApiData api;
    //文件名称
    private String fileName;
    public List<ColumnData> getColumns() {
        return columns;
    }
    public void setColumns(List<ColumnData> columns) {
        this.columns = columns;
    }
    public ApiData getApi() {
        return api;
    }
    public void setApi(ApiData api) {
        this.api = api;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentImg.java
New file
@@ -0,0 +1,52 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin.form;
import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData;
import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent;
/**
 * @author hxh
 * @title: FormComponentSelect
 * @description: 图片控件
 * @date 2022/3/28 13:56
 */
public class FormComponentImg extends FormComponent {
    //图片上传链接
    private ApiData api;
    //是否可编辑图片链接
    private boolean editLink;
    private Integer width;
    private Integer height;
    public ApiData getApi() {
        return api;
    }
    public void setApi(ApiData api) {
        this.api = api;
    }
    public boolean isEditLink() {
        return editLink;
    }
    public void setEditLink(boolean editLink) {
        this.editLink = editLink;
    }
    public Integer getWidth() {
        return width;
    }
    public void setWidth(Integer width) {
        this.width = width;
    }
    public Integer getHeight() {
        return height;
    }
    public void setHeight(Integer height) {
        this.height = height;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentRadioGroup.java
New file
@@ -0,0 +1,26 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin.form;
import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent;
import java.util.List;
import java.util.Map;
/**
 * @author hxh
 * @title: FormComponentSelect
 * @description: 单选控件
 * @date 2022/3/28 13:56
 */
public class FormComponentRadioGroup extends FormComponent {
    //内容常量接口
    private Map<String, Object> values;
    public Map<String, Object> getValues() {
        return values;
    }
    public void setValues(Map<String, Object> values) {
        this.values = values;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentSelect.java
New file
@@ -0,0 +1,46 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin.form;
import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData;
import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent;
import org.yeshi.utils.generater.vo.xmlconfig.base.VerifyData;
import java.util.List;
import java.util.Map;
/**
 * @author hxh
 * @title: FormComponentSelect
 * @description: 选择控件
 * @date 2022/3/28 13:56
 */
public class FormComponentSelect extends FormComponent {
    //内容常量接口
    private Map<String, Object> values;
    //内容的API接口
    private ApiData api;
    private VerifyData verify;
    public Map<String, Object> getValues() {
        return values;
    }
    public void setValues(Map<String, Object> values) {
        this.values = values;
    }
    public ApiData getApi() {
        return api;
    }
    public void setApi(ApiData api) {
        this.api = api;
    }
    public VerifyData getVerify() {
        return verify;
    }
    public void setVerify(VerifyData verify) {
        this.verify = verify;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentSwitch.java
New file
@@ -0,0 +1,13 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin.form;
import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent;
/**
 * @author hxh
 * @title: FormComponentSelect
 * @description: 开关控件
 * @date 2022/3/28 13:56
 */
public class FormComponentSwitch extends FormComponent {
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentText.java
New file
@@ -0,0 +1,86 @@
package org.yeshi.utils.generater.vo.xmlconfig.admin.form;
import org.yeshi.utils.generater.annotation.admin.form.Text;
import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent;
import org.yeshi.utils.generater.vo.xmlconfig.base.VerifyData;
/**
 * @author hxh
 * @title: FormComponentText
 * @description: 表单组件之文本组件
 * @date 2022/3/28 12:13
 */
public class FormComponentText extends FormComponent {
    private String desc;
    private String dateFormat;
    private Integer maxLength;
    private Integer minLength;
    private Text.Type inputType;
    private String placeHolder;
    private boolean isTextArea;
    private VerifyData verify;
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public String getDateFormat() {
        return dateFormat;
    }
    public void setDateFormat(String dateFormat) {
        this.dateFormat = dateFormat;
    }
    public Integer getMaxLength() {
        return maxLength;
    }
    public void setMaxLength(Integer maxLength) {
        this.maxLength = maxLength;
    }
    public Integer getMinLength() {
        return minLength;
    }
    public void setMinLength(Integer minLength) {
        this.minLength = minLength;
    }
    public Text.Type getInputType() {
        return inputType;
    }
    public void setInputType(Text.Type inputType) {
        this.inputType = inputType;
    }
    public String getPlaceHolder() {
        return placeHolder;
    }
    public void setPlaceHolder(String placeHolder) {
        this.placeHolder = placeHolder;
    }
    public boolean isTextArea() {
        return isTextArea;
    }
    public void setTextArea(boolean textArea) {
        isTextArea = textArea;
    }
    public VerifyData getVerify() {
        return verify;
    }
    public void setVerify(VerifyData verify) {
        this.verify = verify;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/ApiData.java
New file
@@ -0,0 +1,30 @@
package org.yeshi.utils.generater.vo.xmlconfig.base;
import java.util.Map;
/**
 * @author hxh
 * @title: ApiConfig
 * @description: 接口数据
 * @date 2022/3/28 12:08
 */
public class ApiData {
    private String path;
    private Map<String, Object> params;
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public Map<String, Object> getParams() {
        return params;
    }
    public void setParams(Map<String, Object> params) {
        this.params = params;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/FormComponent.java
New file
@@ -0,0 +1,38 @@
package org.yeshi.utils.generater.vo.xmlconfig.base;
/**
 * @author hxh
 * @title: EditComponent
 * @description: 表单组件
 * @date 2022/3/28 12:12
 */
public class FormComponent {
    private boolean enable;
    private String notify;
    private String desc;
    public boolean isEnable() {
        return enable;
    }
    public void setEnable(boolean enable) {
        this.enable = enable;
    }
    public String getNotify() {
        return notify;
    }
    public void setNotify(String notify) {
        this.notify = notify;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/VerifyData.java
New file
@@ -0,0 +1,52 @@
package org.yeshi.utils.generater.vo.xmlconfig.base;
import org.yeshi.utils.generater.entity.admin.FormVerifyType;
/**
 * @author hxh
 * @title: VerifyConfig
 * @description: 验证配置
 * @date 2022/3/28 13:47
 */
public class VerifyData {
    //验证类型
    private FormVerifyType type;
    //type为regex的表达式
    private String express;
    //是否必须
    private boolean require;
    //提示信息
    private String notify;
    public FormVerifyType getType() {
        return type;
    }
    public void setType(FormVerifyType type) {
        this.type = type;
    }
    public String getExpress() {
        return express;
    }
    public void setExpress(String express) {
        this.express = express;
    }
    public boolean isRequire() {
        return require;
    }
    public void setRequire(boolean require) {
        this.require = require;
    }
    public String getNotify() {
        return notify;
    }
    public void setNotify(String notify) {
        this.notify = notify;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/dao/DaoData.java
New file
@@ -0,0 +1,39 @@
package org.yeshi.utils.generater.vo.xmlconfig.dao;
import java.util.List;
/**
 * @author hxh
 * @title: DaoData
 * @description: Dao数据
 * @date 2022/3/28 14:44
 */
public class DaoData {
    private String pkg;
    private String mapperDir;
    private List<DaoQuery> queryList;
    public String getPkg() {
        return pkg;
    }
    public void setPkg(String pkg) {
        this.pkg = pkg;
    }
    public String getMapperDir() {
        return mapperDir;
    }
    public void setMapperDir(String mapperDir) {
        this.mapperDir = mapperDir;
    }
    public List<DaoQuery> getQueryList() {
        return queryList;
    }
    public void setQueryList(List<DaoQuery> queryList) {
        this.queryList = queryList;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/dao/DaoQuery.java
New file
@@ -0,0 +1,31 @@
package org.yeshi.utils.generater.vo.xmlconfig.dao;
import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition;
/**
 * @author hxh
 * @title: DaoQuery
 * @description: dao条件查询
 * @date 2022/3/28 14:42
 */
public class DaoQuery {
    //字段名称
    private String name;
    private DaoQueryCondition.QueryType queryType;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public DaoQueryCondition.QueryType getQueryType() {
        return queryType;
    }
    public void setQueryType(DaoQueryCondition.QueryType queryType) {
        this.queryType = queryType;
    }
}
src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ExceptionData.java
New file
@@ -0,0 +1,29 @@
package org.yeshi.utils.generater.vo.xmlconfig.service;
/**
 * @author hxh
 * @title: ExceptionData
 * @description: 异常数据
 * @date 2022/3/28 14:39
 */
public class ExceptionData {
    private String pkg;
    private String name;
    public String getPkg() {
        return pkg;
    }
    public void setPkg(String pkg) {
        this.pkg = pkg;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
src/main/resources/generater/admin/adminController.template
@@ -18,7 +18,10 @@
import ${entity.clazz};
import ${service.clazz};
import ${query.clazz};
<#if responseBody>
<#else>
import java.io.PrintWriter;
</#if>
@Controller
@RequestMapping("${mapping}")
public class ${controllerName} {
@@ -28,18 +31,27 @@
    @Resource
    private ${service.name} ${serviceObjName};
    private String loadPrint(String callback, String root){
    <#macro print data>
      <#if responseBody>
        <#if jsonp>
        return JsonUtil.loadJSONP(callback,root);
return JsonUtil.loadJSONP(callback,${data});
        <#else>
          return root;
return ${data};
        </#if>
    }
      <#else>
       <#if jsonp>
out.print(JsonUtil.loadJSONP(callback,${data}));
        return;
        <#else>
out.print(${data});
        return;
        </#if>
       </#if>
    </#macro>
    @ResponseBody
   ${responseBody?string("@ResponseBody","")}
    @RequestMapping("list")
    public String list(${query.name} query, int page, int limit, String callback) {
    public ${responseBody?string("String","void")} list(${query.name} query, int page, int limit${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")} ) {
        List<${entity.name}> list = ${serviceObjName}.list(query,page,limit);
        long count = ${serviceObjName}.count(query);
        JSONObject data = new JSONObject();
@@ -53,58 +65,58 @@
        data.put("list", gson.toJson(list));
        data.put("count", count);
        return loadPrint(callback,JsonUtil.loadTrueResult(data));
        <@print data="JsonUtil.loadTrueResult(data)" > </@print>
    }
    <#if delete>
    @ResponseBody
    ${responseBody?string("@ResponseBody","")}
    @RequestMapping("delete")
    public String delete(String ids, String callback) {
    public ${responseBody?string("String","void")} delete(String ids${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")}) {
        Type type = new TypeToken<List<${identifyIdType}>>(){}.getType();
        List<${identifyIdType}> idList=new Gson().fromJson(ids,type);
        ${serviceObjName}.delete(idList);
        return loadPrint(callback, JsonUtil.loadTrueResult(""));
        <@print data="JsonUtil.loadTrueResult(\"\")" > </@print>
    }
     </#if>
    <#if add>
    @ResponseBody
    ${responseBody?string("@ResponseBody","")}
    @RequestMapping("add")
    public String add(${entity.name} bean, HttpSession session, String callback) {
    public ${responseBody?string("String","void")} add(${entity.name} bean, HttpSession session${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")}) {
        try{
            ${serviceObjName}.add(bean);
            return loadPrint(callback, JsonUtil.loadTrueResult(""));
            <@print data="JsonUtil.loadTrueResult(\"\")" > </@print>
        }catch(Exception e){
            return loadPrint(callback, JsonUtil.loadFalseResult(e.getMessage()));
            <@print data="JsonUtil.loadFalseResult(e.getMessage())" > </@print>
        }
    }
    </#if>
    @ResponseBody
    ${responseBody?string("@ResponseBody","")}
    @RequestMapping("get")
    public String get(${identifyIdType} id, HttpSession session, String callback) {
    public ${responseBody?string("String","void")} get(${identifyIdType} id, HttpSession session${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")}) {
        ${entity.name} entity = ${serviceObjName}.get(id);
        if (entity !=null){
            return loadPrint(callback,JsonUtil.loadTrueResult(entity));
            <@print data="JsonUtil.loadTrueResult(entity)" > </@print>
        } else {
            return loadPrint(callback,JsonUtil.loadFalseResult("ID不存在"));
            <@print data="JsonUtil.loadFalseResult(\"ID不存在\")" > </@print>
        }
    }
    <#if update>
    @ResponseBody
    ${responseBody?string("@ResponseBody","")}
    @RequestMapping("update")
    public String update(${entity.name} bean, HttpSession session,String callback) {
    public ${responseBody?string("String","void")} update(${entity.name} bean, HttpSession session${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")}) {
        if (bean.getId() == null) {
            return loadPrint(callback, JsonUtil.loadFalseResult("ID不能为空"));
           <@print data="JsonUtil.loadFalseResult(\"ID不能为空\")" > </@print>
        }
        try{
            ${serviceObjName}.update(bean);
        }catch(Exception e){
            return loadPrint(callback,JsonUtil.loadFalseResult(e.getMessage()));
            <@print data="JsonUtil.loadFalseResult(e.getMessage())" > </@print>
        }
        return loadPrint(callback,JsonUtil.loadTrueResult(""));
        <@print data="JsonUtil.loadTrueResult(\"\")" > </@print>
    }
    </#if>
src/main/resources/schemas/generator.dtd
New file
@@ -0,0 +1,110 @@
<!--
自动化代码生成器,包含自动生成
-->
        <!ELEMENT generator-config  (dao?,service?,admin?)>
        <!ATTLIST generator-config class CDATA #REQUIRED>
        <!-- dao配置信息 -->
        <!ELEMENT dao  (queryList?)>
        <!ATTLIST dao mapperDir CDATA #IMPLIED>
        <!ATTLIST dao package CDATA #REQUIRED>
        <!ELEMENT queryList  (query+)>
        <!ELEMENT query  EMPTY>
        <!ATTLIST query name CDATA #REQUIRED>
        <!ATTLIST query type (start|end|contains|equal|gt|gte|lt|lte) #REQUIRED>
        <!ELEMENT service  (exception?)>
        <!ATTLIST service interPackage CDATA #REQUIRED>
        <!ATTLIST service implPackage CDATA #REQUIRED>
        <!ATTLIST service queryPackage CDATA #REQUIRED>
        <!ELEMENT exception  EMPTY>
        <!ATTLIST exception package CDATA #REQUIRED>
        <!ATTLIST exception name CDATA #IMPLIED>
        <!--表单配置信息 -->
        <!ELEMENT admin  (controller?,pages?)>
        <!ELEMENT controller  EMPTY>
        <!ATTLIST controller package CDATA #REQUIRED>
        <!ATTLIST controller name CDATA #IMPLIED>
        <!ATTLIST controller mapping CDATA #REQUIRED>
        <!ATTLIST controller responseBody (true|false) "true">
        <!ATTLIST controller jsonp (true|false) "true">
        <!ELEMENT pages  (list?,add?,update?)>
        <!ATTLIST pages title CDATA #REQUIRED>
        <!ATTLIST pages pageDir CDATA #REQUIRED>
        <!ELEMENT list  (searchForm?,columns,api?)>
        <!ATTLIST list fileName CDATA #IMPLIED>
        <!ATTLIST list delete (true|false) "true">
        <!ATTLIST list edit (true|false) "true">
        <!ATTLIST list page (true|false) "true">
        <!ELEMENT columns  (column*)>
        <!ELEMENT searchForm  (columns)>
        <!ELEMENT column  (text?|select?|radioGroup?|switch?|img?)>
        <!ATTLIST column property CDATA #REQUIRED>
        <!ATTLIST column title CDATA #REQUIRED>
        <!ATTLIST column order CDATA "0">
        <!ATTLIST column showType (TEXT|IMG|SWITCH) #IMPLIED>
        <!ATTLIST column imgWidth CDATA "-1">
        <!ATTLIST column imgHeight CDATA "-1">
        <!ELEMENT add  (column+)>
        <!ATTLIST add fileName CDATA #IMPLIED>
        <!ELEMENT update  (column+)>
        <!ATTLIST update fileName CDATA #IMPLIED>
        <!--表单中的text -->
        <!ELEMENT text  (verify*)>
        <!ATTLIST text maxLength CDATA #IMPLIED>
        <!ATTLIST text minlength CDATA #IMPLIED>
        <!ATTLIST text inputType (TEXT|DATE|DATETIME) #REQUIRED>
        <!ATTLIST text dateFormat CDATA #IMPLIED>
        <!ATTLIST text placeHolder CDATA "">
        <!ATTLIST text desc CDATA #IMPLIED>
        <!ATTLIST text enable (true|false) "true">
        <!ATTLIST text isTextArea (true|false) "false">
        <!ELEMENT verify  EMPTY>
        <!ATTLIST verify type (number|phone|email|date|url|identity|regex|none) #REQUIRED>
        <!ATTLIST verify express CDATA #IMPLIED>
        <!ATTLIST verify notify CDATA #IMPLIED>
        <!ATTLIST verify require (true|false) #IMPLIED>
        <!--表单中的select -->
        <!ELEMENT select  ((values|api),verify?)>
        <!ATTLIST select notify CDATA #IMPLIED>
        <!ATTLIST select enable (true|false) "true">
        <!ELEMENT values  (value*)>
        <!ELEMENT value  (#PCDATA)>
        <!ATTLIST value key CDATA #REQUIRED>
        <!ELEMENT api  (params?)>
        <!ATTLIST api path CDATA #REQUIRED>
        <!ELEMENT params  (value+)>
        <!--表单中的radioGroup -->
        <!ELEMENT radioGroup  (values)>
        <!ATTLIST radioGroup enable (true|false) "true">
        <!--表单中的switch -->
        <!ELEMENT switch  EMPTY>
        <!ATTLIST switch enable (true|false) "true">
        <!--表单中的img -->
        <!ELEMENT img  (api?)>
        <!ATTLIST img enable (true|false) "true">
        <!ATTLIST img editLink (true|false) "false">
        <!ATTLIST img width CDATA #IMPLIED>
        <!ATTLIST img height CDATA #IMPLIED>
src/test/java/com/generater/GeneratorTest.java
@@ -3,16 +3,14 @@
import org.springframework.data.annotation.Id;
import org.yeshi.utils.FileUtil;
import org.yeshi.utils.FreemarkerUtils;
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.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.xmlconfig.base.FormComponent;
import org.yeshi.utils.generater.vo.xmlconfig.admin.form.FormComponentText;
import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO;
import org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO;
import org.yeshi.utils.generater.vo.service.ServiceImplInfoVO;
@@ -153,6 +151,14 @@
//        AdminGeneraterParams adminGeneraterParams=new AdminGeneraterParams("com.generater.temp.controller","D:\\workspace\\server\\utils\\src\\test");
//
//        GeneraterManager.getInstance().createWholeFunction(new DaoGeneraterParams("com.generater.temp.dao", "D:\\workspace\\server\\utils\\src\\test"), new ServiceGeneraterParams("com.generater.temp.query","com.generater.temp.service","com.generater.temp.service.impl"), adminGeneraterParams);
        FormComponent fc=new FormComponentText();
        System.out.println(fc instanceof  FormComponentText);
        FormComponentText text=(FormComponentText) fc;
        System.out.println(text);
    }
src/test/test.xml
New file
@@ -0,0 +1,88 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE generator-config  PUBLIC "-//yeshitv.com//DTD generator_code 1.0//EN"
        "http://192.168.3.122:8848/buwan-web/dtd/generator.dtd">
<generator-config class="org.yeshi.utils.generater.TestEntity3">
    <dao package="com.generater.test.mapper" mapperDir="D:/workspace/server/utils/src/test/java/mapper">
        <queryList>
            <query name="nickName" type="contains"></query>
        </queryList>
    </dao>
    <service interPackage="com.generater.test.service.inter" implPackage="com.generater.test.service.impl"
             queryPackage="com.generater.test.query">
        <exception package="com.generater.test.exception"></exception>
    </service>
    <admin>
        <controller package="com.generater.test.controller.admin" mapping="/test" />
        <pages title="测试" pageDir="D:/workspace/server/utils/src/test/java/html">
            <list fileName="list.html">
                <searchForm>
                    <columns>
                        <column property="nickName" title="昵称">
                            <text inputType="TEXT" maxLength="100"></text>
                        </column>
                    </columns>
                </searchForm>
                <columns>
                    <column property="id" title="ID" showType="TEXT"></column>
                    <column property="nickName" title="昵称" showType="TEXT"></column>
                    <column property="sex" title="性别" showType="TEXT"></column>
                    <column property="portrait" title="头像" showType="IMG"></column>
                </columns>
            </list>
            <add fileName="add.html">
                <column property="nickName" title="昵称">
                    <text inputType="TEXT" dateFormat="" placeHolder="">
                        <verify type="regex" express="*" require="true" notify=""></verify>
                    </text>
                </column>
                <column property="sex" title="性别">
                    <select>
                        <values>
                            <value key="0">未知</value>
                            <value key="1">男</value>
                            <value key="2">女</value>
                        </values>
                    </select>
                </column>
                <column property="province" title="省份">
                    <select>
                        <api path="api/getCountrys">
                            <params>
                                <value key="cq">重庆</value>
                                <value key="sc">四川</value>
                            </params>
                        </api>
                        <verify type="none" require="true"></verify>
                    </select>
                </column>
                <column property="show" title="是否显示">
                    <switch></switch>
                </column>
                <column property="portrait" title="头像">
                    <img enable="false" editLink="true">
                        <api path="/api/uploadImg">
                            <params>
                                <value key="type">portrait</value>
                            </params>
                        </api>
                    </img>
                </column>
            </add>
            <update fileName="update.html">
                <column property="nickName" title="昵称">
                    <text inputType="TEXT">
                        <verify type="regex" express="*" require="true" notify=""></verify>
                    </text>
                </column>
            </update>
        </pages>
    </admin>
</generator-config>