下面是关于“Spring Boot基于Mybatis-Plus自动代码生成”的完整攻略:
1. 简介
Mybatis-Plus是Mybatis的一个开源插件,提供了许多功能,例如自动代码生成、通用CRUD操作、分页和逻辑删除等。通过Spring Boot和Mybatis-Plus的结合,我们可以快速构建高效的数据库操作应用程序。
2. 步骤
2.1 配置pom.xml
在pom.xml文件中添加如下依赖:
<!--Spring Boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--MyBatis-Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
或者可以在MyBatis-Plus官网下载代码生成器,添加依赖后,使用IDEA导入项目,执行代码生成。
2.2 配置application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
global-config:
db-config:
id-type: auto
table-prefix: t_
sql-injector: com.baomidou.mybatisplus.injector.LogicSqlInjector
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:/mapper/**/*.xml
配置DB连接和Mybatis-Plus属性。
2.3 代码生成器
在Mybatis-Plus中,我们可以使用代码生成器生成entity、mapper、service、controller等相关代码,大大提高我们的开发效率。
可以使用命令行生成:
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
gc.setAuthor("jhucbs");
gc.setOpen(false);
gc.setSwagger2(true);
generator.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mp?useUnicode=true&useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&useInformationSchema=true");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
generator.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(null);
pc.setParent("com.baomidou.mybatisplus.samples.generator");
generator.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输入文件名称
return System.getProperty("user.dir")
+ "/src/main/resources/mapper/"
+ tableInfo.getEntityName()
+ "Mapper"
+ StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
generator.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
generator.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 公共父类
// strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.BaseController");
// strategy.setSuperEntityClass("com.baomidou.mybatisplus.samples.generator.common.BaseEntity");
// 写于父类中的公共字段
// strategy.setSuperEntityColumns("id");
strategy.setInclude("user");
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix("mp_");
generator.setStrategy(strategy);
generator.execute();
}
}
或者使用界面操作,可以在Mybatis-Plus中启动图形化界面,在其中为每张表选择代码生成器的选项并进行代码生成。
3. 示例
我们这里提供两个示例:
3.1 示例1:生成单个表的Entity与Mapper
我们假设我们有一张名为student的数据表,其中包含了以下字段:
id bigint(20) 主键
name varchar(20) 学生姓名
age tinyint(4) 学生年龄
sex varchar(10) 学生性别
address varchar(100) 学生地址
我们可以按照如上步骤先配置好项目,然后在配置好了代码生成器后,执行以下代码:
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
gc.setAuthor("jhucbs");
gc.setOpen(false);
gc.setSwagger2(true);
generator.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
generator.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.demo");
pc.setEntity("entity");
pc.setMapper("mapper");
generator.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude("student");
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix("t_");
generator.setStrategy(strategy);
generator.execute();
}
}
执行此代码后,即可生成与student表对应的entity与mapper文件。
3.2 示例2:生成多张表的实体对象
假设我们有两张名为student和teacher的数据表,且均包含上面所示字段。那我们只需要在代码生成器的策略配置中添加后缀名为"_base"的名称即可同时生成这两个表对应的Entity对象。
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
gc.setAuthor("jhucbs");
gc.setOpen(false);
gc.setSwagger2(true);
generator.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
generator.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.demo");
pc.setEntity("entity");
pc.setMapper("mapper");
// 在此处添加要生成的表名
pc.setModuleName("student","teacher");
generator.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 在此处添加要生成的表名
strategy.setInclude("student","teacher");
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix("t_");
generator.setStrategy(strategy);
generator.execute();
}
}
执行此代码后,即可生成student和teacher表对应的Entity对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot基于Mybatis-Plus自动代码生成 - Python技术站