
良好的java基础, 熟悉SpringBoot框架,熟悉Mybatis框架
教学目标了解并掌握MyBatis-Plus代码生成器的实现
视频教程MyBatisPlus实战教程与开发建议
概念代码生成器,顾名思义就是通过程序生成想要的代码。其原理非常简单,可以简单理解为:模板 + 数据 = 输出。
比如:
模板--Mapper.ftl
package ${basepackage}.mapper;
import com.baomidou.mybatisplus.core.mapper.baseMapper;
import ${basepackage}.${domain};
public interface ${domain}Mapper extends baseMapper<${domain}> {
}
数据
{
basepackage:"com.langfeiyes.mp",
domain:"Department"
}
输入:数据 + 模板
将模板中${占位符} 替换成数据,并将渲染好的结果输出到DepartmentMapper.java文件中
package com.langfeiyes.mp.mapper; import com.baomidou.mybatisplus.core.mapper.baseMapper; import com.langfeiyes.mp.domain.Department; public interface DepartmentMapper extends baseMapper{ }
那么此时的DepartmentMapper.java类就编写好了,后续如果将Department替换成Employee,那么EmployeeMapper.xml也就能快速编写成功。
package com.langfeiyes.mp.mapper; import com.baomidou.mybatisplus.core.mapper.baseMapper; import com.langfeiyes.mp.domainEmployee; public interface EmployeeMapper extends baseMapper{ }
MyBatis-Plus 也提供一套代码生成器-AutoGenerator,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
旧版旧版代码生成器指的是mybatis-plus-generator 3.5.1 以下版本
以User用户为例子
步骤1:创建User数据表
CREATE TABLE `mybatis-plus`.`user` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(255) NULL COMMENT '用户名', `password` varchar(255) NULL COMMENT '密码', PRIMARY KEY (`id`) );
步骤2:导入相关依赖
com.baomidou mybatis-plus-generator3.5.0 org.freemarker freemarker2.3.31 com.ibeetl beetl3.9.3.RELEASE org.apache.velocity velocity-engine-core2.3
注意上面3个模板只需要导入一个即可,默认是Velocity
步骤3:编写代码生成器
package com.langfeiyes.mp.generator;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Component
public class MyCodeGenerator {
@Autowired
private DataSource dataSource;
//获取数据源-如果没有springboot环境,可以直接调用
private DataSource getDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
druidDataSource.setUrl("jdbc:mysql://localhost:3306/mybatis-plus?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
druidDataSource.setUsername("root");
druidDataSource.setPassword("admin");
return druidDataSource;
}
//获取全局配置
private GlobalConfig getGlobalConfig(){
String projectPath = System.getProperty("user.dir");
GlobalConfig gc = new GlobalConfig.Builder()
.outputDir(projectPath + "/src/main/java") //输出目录
.author("dafei") //作者
.openDir(true) //是否打开目录
//.enableSwagger() //是否开启swagger模式
//.fileOverride() //如果文件已经存在则覆盖
.build();
return gc;
}
//获取包配置
private PackageConfig getPageConfig(){
PackageConfig packageConfig = new PackageConfig.Builder()
.parent("com.langfeiyes") //父包名,根包
.moduleName("mp") //模块名
.entity("entity") //指定实体对象包名,默认:entity
.service("service") //指定服务接口包名,默认:service
.serviceImpl("service.impl") //指定服务接口实现类包名,默认:service.impl
.mapper("mapper") //指定映射接口包名,默认:mapper
.xml("xml") //指定映射xml文件包名,默认:mapper.xml
.controller("controller") //指定controller包名,默认:controller
.build(); //构建
return packageConfig;
}
//获取模板配置
private TemplateConfig getTemplateConfig(){
TemplateConfig templateConfig = new TemplateConfig.Builder()
//.entity("entity") //指定实体对象模板路径
//.service("service", //指定服务接口模板路径
// "serviceImpl") //指定服务接口模板路径
//.mapper("mapper") //指定映射接口模板路径
//.mapperXml("xml") //指定映射xml文件模板路径
//.controller("controller") //指定controller模板路径
.build();
//注意,处理自定义模板,一般使用默认的
return templateConfig;
}
//策略配置
//配置数据库与数据表相关的
public StrategyConfig getStrategy(){
StrategyConfig config = new StrategyConfig.Builder()
//.addFieldPrefix("字段前缀")
//.addExclude("排除哪些表")
//.addInclude("指定哪些表")
.addInclude("user")
//.addTablePrefix("添加表前缀")
.build();
return config;
}
public void excute() {
// 代码生成器
AutoGenerator mpg = new AutoGenerator(new DataSourceConfig.Builder(dataSource).build())
// 全局配置
.global(getGlobalConfig())
// 包配置
.packageInfo(getPageConfig())
//模板配置
.template(getTemplateConfig())
//策略配置
.strategy(getStrategy())
//注入配置
.injection(null);
//mpg.execute(new BeetlTemplateEngine());
mpg.execute(new FreemarkerTemplateEngine());
//mpg.execute(new VelocityTemplateEngine());
}
}
步骤4:测试
@SpringBootTest
public class CodeBuilderTest {
@Autowired
MyCodeGenerator myCodeGenerator;
@Test
public void testCode() throws SQLException {
myCodeGenerator.excute();
}
}
注意:如果是低版本的druid,会包错误:SQLFeatureNotSupportedException
主要是druid数据源中dataSource.getConnection().getSchema() 没有实现,直接丢异常,换新版本即可
新版com.alibaba druid-spring-boot-starter1.2.8
新版代码生成器指的是mybatis-plus-generator 3.5.1 以上版本, *** 作最大的变化是使用了lambda语法
以User用户为例子
前面 *** 作 *** 作步骤都一样
步骤1:创建user用户表
步骤2:导入相关依赖
com.baomidou mybatis-plus-generator3.5.1
步骤3:编写代码生成器代码
package com.langfeiyes.mp.generator;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Component
public class MyCodeGenerator {
@Autowired
private DataSource dataSource;
public void excute() {
FastAutoGenerator.create(new DataSourceConfig.Builder(dataSource))
.globalConfig(builder -> builder
.outputDir(System.getProperty("user.dir") + "/src/main/java") //输出目录
.author("dafei") //作者
//.enableSwagger() //是否开启swagger模式
//.fileOverride() //如果文件已经存在则覆盖
)
.packageConfig(builder -> builder
.parent("com.langfeiyes") //父包名,根包
.moduleName("mp") //模块名
.entity("domain") //指定实体对象包名,默认:entity
.service("service") //指定服务接口包名,默认:service
.serviceImpl("service.impl") //指定服务接口实现类包名,默认:service.impl
.mapper("mapper") //指定映射接口包名,默认:mapper
.xml("xml") //指定映射xml文件包名,默认:mapper.xml
.controller("controller") //指定controller包名,默认:controller
)
.strategyConfig(builder -> builder
//.addFieldPrefix("字段前缀")
//.addExclude("排除哪些表")
//.addInclude("指定哪些表")
.addInclude("user")
//.addTablePrefix("添加表前缀")
)
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
步骤4:测试
@SpringBootTest
public class CodeBuilderTest {
@Autowired
MyCodeGenerator myCodeGenerator;
@Test
public void testCode() throws SQLException {
myCodeGenerator.excute();
}
}
最终结果
总结从代码简化程度来说还可以,如果有可能,更建议大家手写一个
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)