根据数据库表名生成对应的bean及其相关接口、实现类、Mapper xml

一、背景

项目开发中,经常会根据数据库表,创建对应的bean及其相关接口、实现类、Mapper xml。都是一个固定的格式,所以不如将其写成一个固定程序,每次生成执行一次即可。

二、实现

示例如下:

public class Generator {

	/**

     * <p>

     * 读取控制台内容

     * </p>

     */

    public static String scanner(String tip) {

        Scanner scanner = new Scanner(System.in);

        StringBuilder help = new StringBuilder();

        help.append("请输入" + tip + ":");

        System.out.println(help.toString());

        if (scanner.hasNext()) {

            String ipt = scanner.next();

            if (!StringUtils.isEmpty(ipt)) {

                return ipt;

            }

        }

        throw new MybatisPlusException("请输入正确的" + tip + "!");

    }
    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
        String projectPath = System.getProperty("user.dir");
        // 全局配置
        GlobalConfig gc = new GlobalConfig();

        // 设置数据库设置
        mpg.setDataSource(
                new DataSourceConfig()
                .setUrl("jdbc:mysql://192.168.22.111:3306/test?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai")
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUsername("root")
                .setPassword("root123456")
                .setDbType(DbType.MYSQL)
        );

        // 包配置
        PackageConfig pc = new PackageConfig().setParent("com.gdfxit.foundwater");
        pc.setModuleName("persistence");
        mpg.setPackageInfo(pc);
        mpg.setStrategy(new StrategyConfig()
                .setNaming(NamingStrategy.underline_to_camel)
                .setInclude(scanner("表名,多个英文逗号分割").split(","))
                .setEntityColumnConstant(true)
                .setRestControllerStyle(true));

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // 自定义模板使用${cfg.map的key}获取该map的值
                Map<String, Object> map = new HashMap<>();
                map.put("author", "linmiao");
                this.setMap(map);
            }
        };

        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        // Mapper.xml
        focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath+"/src/main/resources/mapper/"
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });

        // Controller.java
        focList.add(new FileOutConfig("/templates/controller.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath+"/src/main/java/" + pc.getParent().replace(".", "/").replace("persistence", "controller")
                        + "/" + tableInfo.getEntityName() + "ApiController" + StringPool.DOT_JAVA;
            }
        });

        // Entity.Java
        focList.add(new FileOutConfig("/templates/entity.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath+"/src/main/java/" + pc.getParent().replace(".", "/")
                        + "/entity/" + tableInfo.getEntityName() + StringPool.DOT_JAVA;
            }
        });

        // Mapper.java
        focList.add(new FileOutConfig("/templates/mapper.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath+"/src/main/java/" + pc.getParent().replace(".", "/")
                        + "/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_JAVA;
            }
        });

        // Service.java
        focList.add(new FileOutConfig("/templates/service.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath+"/src/main/java/" + pc.getParent().replace(".", "/")
                        + "/service/" + tableInfo.getEntityName() + "Service" + StringPool.DOT_JAVA;
            }
        });

        // ServiceImpl.java
        focList.add(new FileOutConfig("/templates/serviceImpl.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath+"/src/main/java/" + pc.getParent().replace(".", "/")
                        + "/service/impl/" + tableInfo.getEntityName() + "ServiceImpl" + StringPool.DOT_JAVA;
            }
        });

        // 设置自定义模板
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 设置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setEntity(null)
                .setXml(null)
                .setController(null)
                .setService(null)
                .setMapper(null)
                .setServiceImpl(null);
        mpg.setTemplate(templateConfig);

        // 执行生成器
        mpg.execute();
    }

}

 

博客地址:http://blog.csdn.net/vipbooks 一直以来把数据库的表转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个表的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,支持精确指定只生成哪几个表的Bean,也支持模糊查找生成哪几个表的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆表! 该压缩包中包含32位和64位两个版本。 第11版更新震撼发布,此次版本更新如下: 1、新增数据源配置管理功能,可以为每种型的数据库添加多个不同的数据源。 2、新增快速新增数据源功能,快速为当前选中的数据库添加数据源。 3、新增打开目录功能,左键打开菜单选择要打开的目录,点击右键可以快速打开当前应用所在目录。 4、新增对使用驼峰命表名和字段的支持,例如表名是UserInfo,生成Bean的也是UserInfo; 字段是userId,那么生成Bean字段也是userId。 5、主界面移除驱动下拉选项,并新增快速切换数据源配置下拉选项。 6、改进精确匹配中“更多”的选表功能,在文本框中已选中的表在打开选表对话框时会被勾选。 7、改进清除StringBuffer工具,选择SQL型会自动将“//”替换为“--”。 8、改进字符串格式化工具,将有更多型可选,操作更方便。 9、其他一些小Bug的修改和代码优化调整。
一直以来把数据库的表转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个表的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,支持精确指定只生成哪几个表的Bean,也支持模糊查找生成哪几个表的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现生成。 这次版本更新如下: 1、修复生成JavaBean后缀错误的问题。 2、新增实体的schema,生成实体时要使用的schema,schema可以自动生成: 如果schema与数据库的用户相同则写dbUsername,如果schema与数据库的库相同则写 dbName。 3、新增设置文件扩展,现在已经不仅仅只能生成Java Bean了,还可能生成DoNet Bean等等各种各 样的Bean了,只需要配置下用户模板和修改下文件扩展就可以实现了,简单方便。我在用户 模板中添加了一个DoNet的用户模板,大家可以直接生成DoNet的Bean了。大家如果想要生成其 它编程语言的Bean可以发一个那种编程语言的标准Bean给我,我做成用户模板发布上来。 4、新增继承的父生成JavaBean要继承的父。 5、新增实现接口生成JavaBean要实现接口。 6、新增忽略的字段,生成JavaBean需要忽略的表字段。 7、新增要导入的包,需要导入到JavaBean中的包。 8、新增要排除的包,不需要导入到JavaBean中的包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值