在实际开发过程中,也难免需要生成一些基本的代码,也能大大的提高开发效率。
那么那么那么小编也写了一个基本的代码生成器,包括实体、持久层、Service、Controller、xml
<!--mybatis plus代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<!--apache velocity 模板-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<!--slf4j 日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
package com.example.demo.generator;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
/**
* @Auther: IT贱男
* @Date: 2019/6/14 14:29
* @Description: Mybatis Plus 代码生成器
*/
public class MybatisPlusGenerator {
public static void main(String[] args) {
// 全局配置
GlobalConfig globalConfig = globalConfig();
// 数据源配置
DataSourceConfig dataSourceConfig = dataSourceConfig();
// 策略配置
StrategyConfig strategyConfig = strategyConfig();
// 包名策略配置
PackageConfig packageConfig = packageConfig();
// 整合配置
AutoGenerator autoGenerator = new AutoGenerator();
autoGenerator.setGlobalConfig(globalConfig);
autoGenerator.setDataSource(dataSourceConfig);
autoGenerator.setStrategy(strategyConfig);
autoGenerator.setPackageInfo(packageConfig);
autoGenerator.execute();
}
/**
* 全局配置
*
* @return
*/
private static GlobalConfig globalConfig() {
GlobalConfig config = new GlobalConfig();
config.setActiveRecord(false) // 是否开启AR模式
.setAuthor("IT贱男") // 作者
.setOutputDir("/Volumes/Cute/Taify/学习/项目/mybatis-plus/frist/src/main/java") //生成路径
.setFileOverride(true) //文件是否覆盖
.setIdType(IdType.AUTO) // 主键策略
.setServiceName("%sService") //默认情况下生成的Service接口的名字首字母都带有I
.setBaseResultMap(true) // 是否生成基本的sql中的ResultMap
.setBaseColumnList(true); // 是否生成基本的sql列
return config;
}
/**
* 数据源配置
*
* @return
*/
private static DataSourceConfig dataSourceConfig() {
DataSourceConfig dsconfig = new DataSourceConfig();
// 设置数据库类型
dsconfig.setDbType(DbType.MYSQL);
dsconfig.setDriverName("com.mysql.jdbc.Driver");
dsconfig.setUrl("jdbc:mysql://127.0.0.1:3306/mdp?userSSL=false");
dsconfig.setUsername("root");
dsconfig.setPassword("123456");
return dsconfig;
}
/**
* 策略配置
* @return
*/
private static StrategyConfig strategyConfig() {
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setCapitalMode(true); // 是否大写命名
strategyConfig.setTablePrefix("sys_"); // 表前缀
strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 从数据库表到文件的命名策略
strategyConfig.setInclude("sys_user"); // 对应数据库所需要生成的表名
return strategyConfig;
}
/**
* 包名策略配置
* @return
*/
private static PackageConfig packageConfig() {
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.example.demo"); // 所需要生成的包下
packageConfig.setEntity("model"); // 设置实体生成包名
packageConfig.setController("controller"); // 设置控制层包名,以下以此类推
packageConfig.setService("service");
packageConfig.setMapper("mapper");
packageConfig.setXml("mapper");
return packageConfig;
}
}
由于有小伙伴提问怎么把xml文件生成到resources文件夹下,实现步骤如下:
引入模板pom文件,默认是Velocity,也可以更换Freemarker、Beetl,三个选其中一个就行了。
Velocity(默认):
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
Freemarker:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
Beetl:
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.0.13.RELEASE</version>
</dependency>
定义自定义配置私有方法,返回InjectionConfig对象,这个模板内容根据自己需求来编写,小编这里就不提供了。
/**
* 自定义配置文件输出
* @return
*/
private static InjectionConfig customConfig(){
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
// String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
String projectPath = System.getProperty("user.dir");
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath+"/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
return cfg;
}
最后还需要整合到GlobalConfig对象中去,这样就可以实现把自定义的xml生成到resources目录下了。
public static void main(String[] args) {
// 全局配置
GlobalConfig globalConfig = globalConfig();
// 数据源配置
DataSourceConfig dataSourceConfig = dataSourceConfig();
// 策略配置
StrategyConfig strategyConfig = strategyConfig();
// 包名策略配置
PackageConfig packageConfig = packageConfig();
// 自定义配置文件输出
InjectionConfig injectionConfig = customConfig();
// 整合配置
AutoGenerator autoGenerator = new AutoGenerator();
autoGenerator.setGlobalConfig(globalConfig);
autoGenerator.setDataSource(dataSourceConfig);
autoGenerator.setStrategy(strategyConfig);
autoGenerator.setPackageInfo(packageConfig);
autoGenerator.setCfg(injectionConfig);
autoGenerator.execute();
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://jiannan.blog.csdn.net/article/details/92421013
内容来源于网络,如有侵权,请联系作者删除!