idea 配置mysql逆向_如何优雅的将数据库表逆向生成代码

本文介绍了Java开发者如何利用IDEA、Maven插件和Java代码自动生成Mybatis的Entity、DAO、Service等代码。详细讲述了Free Mybatis plugin的配置与使用,mybatis-generator-maven-plugin的配置,以及MyBatis-Plus的AutoGenerator的使用方法,帮助提升开发效率。
摘要由CSDN通过智能技术生成

公众号:不安分的猿人

作为 Java 开发,数据库操作是不可逃避的问题,最原始的方式可能使用JDBC操作数据库。渐渐的有了对象关系映射的框架。最让人熟知的有 Hibernate、Mybitas。Hibernate消除了代码的映射规则,开发人员可以将数据库表当对象使用,确实很方便,但是它最大的一个问题是在表关联和复杂的SQL查询支持较差。而Mybitas 是一个款半自动的ORM 框架,开发人员重点关注sql语句即可,框架解除了sql与程序代码的耦合。基于这样的原因我总结了三种方式通过数据库表逆向生成代码,让使用 Mabitas的小伙伴的开发效率提高一个台阶。

三种方式

1.1 Idea 插件生成代码

安装Idea插件 Free Mybatis plugin,如下图:

如何使用呢?需要在Idea 打开数据库视图,连接数据库。

第一次使用Idea连接可能会报下面错误:

Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.

解决方法

查询数据库时区,并设置为东八区。sql语句如下:

show variables like '%time_zone%';

set global time_zone='+8:00';

成功连接如下图:

逆向生成代码

在需要生成表右键->EasyCode->Generate Code就可以生成代码。

根据自己的需要选择生成的代码:

我勾选的所有,最终生成的代码结构如下:

└─code

├─controller

│ OptionsController.java

├─dao

│ OptionsDao.java

├─entity

│ Options.java

└─service

│ OptionsService.java

└─impl

OptionsServiceImpl.java

自定义模板

打开setting搜索easy,就可以找到逆向生成代码的模板,如下图:

1.2 Maven 插件生成代码

Maven项目添加插件(plugin)就可以自动生成代码。

项目引入依赖

org.mybatis.generator

mybatis-generator-maven-plugin

1.3.2

创建 generatorConfig.xml 文件

在项目资源路径resource 目录创建 generatorConfig.xml 文件,文件内容如下:

-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

生成代码

1.第一种方法

项目添加 mybatis-generator-maven-plugin 插件后,可以直接使用插件自带的工具,如下图:

直接双击运行,就可以生成 dao,entity,mapper.xml三种格式的代码文件了。

2.第二种方法

也可以使用另外一种方式,Edit Configurations...->Maven 创建 Maven 配置,如下图:

说明:Working directory:本地代码磁盘存放路径 Command line:命令行执行命令,这里添加mybatis-generator:generate -e 运行命令就可以生成代码了。 3.第三种方法

在命令执行如下命令,也可以生成对应的代码

mvn mybatis-generator:generate -e

1.3 Java 代码生成AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

详细的代码如下:

public class CodeGenerator {

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.isNotEmpty(ipt)) {

return ipt;

}

}

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

}

public static void main(String[] args) {

AutoGenerator mpg = new AutoGenerator();

GlobalConfig gc = new GlobalConfig();// 全局配置 String projectPath = System.getProperty("user.dir");

gc.setOutputDir(projectPath + "/src/main/java");

gc.setAuthor("jobob");

gc.setOpen(false);

gc.setSwagger2(true); //实体属性 Swagger2 注解 mpg.setGlobalConfig(gc);

DataSourceConfig dsc = new DataSourceConfig();// 数据源配置 dsc.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");

dsc.setDriverName("com.mysql.jdbc.Driver");

dsc.setUsername("root");

dsc.setPassword("密码");

mpg.setDataSource(dsc);

PackageConfig pc = new PackageConfig(); // 包配置 pc.setModuleName(scanner("模块名"));

pc.setParent("com.baomidou.ant");

mpg.setPackageInfo(pc);

// 自定义配置 InjectionConfig cfg = new InjectionConfig() {

@Override

public void initMap() {

}

};

// 如果模板引擎是 freemarker String templatePath = "/templates/mapper.xml.ftl";

// 如果模板引擎是 velocity // String templatePath = "/templates/mapper.xml.vm";

// 自定义输出配置 List focList = new ArrayList<>();

// 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) {

@Override

public String outputFile(TableInfo tableInfo) {

// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()

+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;

}

});

cfg.setFileOutConfigList(focList);

mpg.setCfg(cfg);

TemplateConfig templateConfig = new TemplateConfig();// 配置模板

// 配置自定义输出模板 //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 // templateConfig.setEntity("templates/entity2.java"); // templateConfig.setService(); // templateConfig.setController();

templateConfig.setXml(null);

mpg.setTemplate(templateConfig);

StrategyConfig strategy = new StrategyConfig();// 策略配置 strategy.setNaming(NamingStrategy.underline_to_camel);

strategy.setColumnNaming(NamingStrategy.underline_to_camel);

strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");

strategy.setEntityLombokModel(true);

strategy.setRestControllerStyle(true);

strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");

strategy.setSuperEntityColumns("id");

strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));

strategy.setControllerMappingHyphenStyle(true);

strategy.setTablePrefix(pc.getModuleName() + "_");

mpg.setStrategy(strategy);

mpg.setTemplateEngine(new FreemarkerTemplateEngine());

mpg.execute();

}

}

最后

本篇文章的三种逆向生成代码的方式网络上都有,我使用后的分析结果如下: - Free Mybatis plugin是Idea的一个插件,配置相对灵活,entity,dao,service,controller,mapper都可以生成。如果你们的开发团队都在使用 Idea开发项目,那这款插件是个不错的选择。 - Maven插件 mybatis-generator-maven-plugin只可生成entity,dao,mapper文件,不依赖于开发工具,生成代码相对简单。 - AutoGenerator 通过Java代码连接数据库并逆向生成代码,entity,dao,service,controller,mapper都可以生成,支持三种自定义模板Velocity,Freemarker,Beetl可根据自己的项目编写自定义模板。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值