MyBatis-Plus Generator
采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
一、添加依赖
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!-- 模板引擎,需要指定 mpg.setTemplateEngine(new FreemarkerTemplateEngine()); -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<!-- MP 核心库 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.3</version>
</dependency>
二、脚本初始化
1)创建数据库(mybatis-plus)。
2)导入数据。
-- ----------------------------
-- Table structure for `sys_user`
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint(20) NOT NULL COMMENT '用户ID',
`name` varchar(50) DEFAULT NULL COMMENT '用户名',
`age` int(3) DEFAULT NULL COMMENT '用户年龄',
`type` int(1) DEFAULT '0' COMMENT '0、禁用 1、正常, 如果使用tinyint(1),mysql连接没加tinyInt1isBit=false,默认mysql驱动会把值转成boolean',
`ctime` datetime DEFAULT NULL COMMENT '自定义填充的创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户表';
-- ----------------------------
-- Records of `sys_user`
-- ----------------------------
BEGIN;
INSERT INTO `sys_user`(id,name,age,ctime,type) VALUES ('784972358981328902', 'Tom', '24', '2017-06-25 20:53:33', '1');
INSERT INTO `sys_user`(id,name,age,ctime,type) VALUES ('784972358981328903', 'Jammy', '21', '2017-06-25 20:53:37', '1');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
三、创建MyGeneratorJ类(二选一)
1)MyGeneratorJ 类在 java 目录下创建 mapper 文件夹。
2)在 mapper 目录下创建 xml 文件夹。
3)在 xml 目录下创建 xxMapper.xml 配置文件。
4)常用参数已提取,可直接修改使用。
/**
* @author Ray
* @date 2018/7/17 0017
* Mybaits-Plus 测试代码生成器
*/
public class MyGeneratorJ {
// private static Logger logger = LoggerFactory.getLogger(MyGeneratorJ.class.getName());
// 数据库配置
private String url = "jdbc:mysql://localhost:3306/mybatis-plus";
private String driver = "com.mysql.jdbc.Driver";
private String username = "root";
private String password = "root";
// 开发人员
private String author = "Ray";
// 生成文件的输出目录
private String javaHome = "F:\\codeGen\\java\\"; // java路径
// 生成包名和类名
private String packageName = "com.ray"; // 生成的包名 如: com.ray
private String[] tables = {"sys_user"}; // 生成对应表的类名,可多个表
// 设置子包名 如: com.ray.controller
private String controllerName = "controller";
private String entityName = "entity";
/**
* 运行代码生成器
*/
@Test
public void generateCode() {
generateByTables(packageName, tables);
}
/**
* 代码生成器
* @param packageName 生成的包名
* @param tableNames 生成对应表名及类名
*/
private void generateByTables(String packageName, String... tableNames) {
/**
* 全局配置
*/
GlobalConfig config = new GlobalConfig();
config
.setActiveRecord(false) // 需要ActiveRecord特性的请改为true
.setAuthor(author)
.setOutputDir(javaHome)
.setFileOverride(true) // 覆盖已有文件
.setEnableCache(false) // 二级缓存配置
.setBaseColumnList(true) // XML columList
.setBaseResultMap(true) // XML ResultMap
// 自定义文件命名,注意 %s 会自动填充表实体属性!
.setServiceName("%sService");
/**
* 数据库配置
*/
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig
.setDbType(DbType.MYSQL)
.setUrl(url)
.setUsername(username)
.setPassword(password)
.setDriverName(driver);
/**
* 策略配置项
*/
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig
.setCapitalMode(true)
.setEntityLombokModel(false) // 个人喜欢设为true,需添加Lombok依赖
.setDbColumnUnderline(true)
.setNaming(NamingStrategy.underline_to_camel) // 下划线转驼峰命名
.setInclude(tableNames); // 生成对应表的类名
/**
* 生成文件
*/
new AutoGenerator().setGlobalConfig(config)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(
new PackageConfig()
.setParent(packageName)
.setController(controllerName)
.setEntity(entityName)
)
.execute(); // 执行生成
}
}
扫描二维码关注公众号,回复:
2622508 查看本文章
三、创建MyGeneratorR类(二选一)
1)MyGeneratorR 类在 resources 目录下创建 mapper 文件夹。
2)在 mapper 目录下创建 xxMapper.xml 配置文件。
3)将 java 目录下 mapper 文件夹 改名为 dao。
4)常用参数已提取,可直接修改使用。
/**
* @author Ray
* @date 2018/7/17 0017
* Mybaits-Plus 测试代码生成器
*/
public class MyGeneratorR {
// private static Logger logger = LoggerFactory.getLogger(MyGeneratorR.class.getName());
// 数据库配置
private String url = "jdbc:mysql://localhost:3306/mybatis-plus";
private String driver = "com.mysql.jdbc.Driver";
private String username = "root";
private String password = "root";
// 开发人员
private String author = "Ray";
// 生成文件的输出目录
private String javaHome = "F:\\codeGen\\java\\"; // java路径
private String resourcesHome = "F:\\codeGen\\resources\\mapper\\"; // resources路径
// 生成包名和类名
private String packageName = "com.ray"; // 生成的包名 如: com.ray
private String[] tables = {"sys_user"}; // 生成对应表的类名,可多个表
// 设置子包名 如: com.ray.controller
private String controllerName = "controller";
private String entityName = "entity";
private String mapperName = "dao";
/**
* 运行代码生成器
*/
@Test
public void generateCode() {
generateByTables(packageName, tables);
}
/**
* 代码生成器
* @param packageName 生成的包名
* @param tableNames 生成对应表名及类名
*/
private void generateByTables(String packageName, String... tableNames) {
/**
* 全局配置
*/
GlobalConfig config = new GlobalConfig();
config
.setActiveRecord(false) // 需要ActiveRecord特性的请改为true
.setAuthor(author)
.setOutputDir(javaHome)
.setFileOverride(true) // 覆盖已有文件
.setEnableCache(false) // 二级缓存配置
.setBaseColumnList(true) // XML columList
.setBaseResultMap(true) // XML ResultMap
// 自定义文件命名,注意 %s 会自动填充表实体属性!
.setServiceName("%sService")
.setMapperName("%sDao");
/**
* 数据库配置
*/
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig
.setDbType(DbType.MYSQL)
.setUrl(url)
.setUsername(username)
.setPassword(password)
.setDriverName(driver);
/**
* 策略配置项
*/
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig
.setCapitalMode(true)
.setEntityLombokModel(false) // 个人喜欢设为true,需添加Lombok依赖
.setDbColumnUnderline(true)
.setNaming(NamingStrategy.underline_to_camel) // 下划线转驼峰命名
.setInclude(tableNames); // 生成对应表的类名
/**
* 调整 xml 生成目录
*/
InjectionConfig injectionConfig = new InjectionConfig() {
@Override
public void initMap() {
}
};
List list = new ArrayList();
list.add(new FileOutConfig("/templates/mapper.xml.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
// 生成文件的输出目录
return resourcesHome + tableInfo.getEntityName() + "Mapper.xml";
}
});
injectionConfig.setFileOutConfigList(list);
// 关闭默认 xml 生成,调整生成 至 根目录
TemplateConfig templateConfig = new TemplateConfig();
// 去掉自定义模板
templateConfig.setXml(null);
/**
* 生成文件
*/
new AutoGenerator().setGlobalConfig(config)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(
new PackageConfig()
.setParent(packageName)
.setController(controllerName)
.setEntity(entityName)
.setMapper(mapperName)
)
.setCfg(injectionConfig)
.setTemplate(templateConfig)
.execute(); // 执行生成
}
}
四、运行结果
1)MyGeneratorJ类测试结果:
2)MyGeneratorR类测试结果: