点击查看Mybatis-plus官方文档
前言:在学习的过程中,没有找到mp自动生成支持form和vo的,又费了点时间自己写了
目录
创建spring boot 项目
使用idea默认生成即可 ...
修改pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!--mybatis-plus自动生成代码-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.0</version>
</dependency>
<!-- velocity 模版引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
修改application.yml文件
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
username: root
password: admin
driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
mapperLocations: classpath*:mapper/*.xml
typeAliasesPackage: com.mybatis.plus.demo.model # mybatis 别名包扫描路径
global-config:
db-config:
logic-delete-value: 1 #逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#线上关闭sql日志打印
修改启动类
创建Mybatis-plus配置
新建文件MyBatisPlusConfiguration
注意:如果使用mp自带的控制逻辑删除和控制版本号还有分页功能,则需要添加这个配置
package com.plus.demo.util;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
@Configuration
public class MyBatisPlusConfiguration {
/**
* 控制逻辑删除
* @return
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
/**
* 控制版本号
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
编写自动生成工具类
注:直接把Controller/service/serviceImpl/dao/mapper/form/vo全部生成
此处使用默认velocity 模版引擎 则没有常用的crud方法,使用自己的模板则可以生成常用的crud方法
其中自定义模板中有工具类是公司自己的jar包,所以只推荐参考
拷贝mybatis-plus-generator jar包中的模板到自己项目resources下
工具类代码
package com.mybatis.plus.demo.util;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 代码生成器
*
*/
public class MabatisPlusGenerator {
private static String path = "E:\\idea\\springboot-mybatis-plus"; //文件路径
private static String table = "tm_user"; //table名字
public static void main(String[] args) {
//1. 全局配置
GlobalConfig config = new GlobalConfig();
config.setActiveRecord(false) // 是否支持AR模式
.setAuthor("GMaya") // 作者
.setSwagger2(true) // 使用Swagger
.setOutputDir(path + "/src/main/java") // 生成路径
.setFileOverride(true) // 文件覆盖
.setIdType(IdType.AUTO) // 主键策略
// 自定义文件命名,注意 %s 会自动填充表实体属性!
.setServiceName("%sService").setServiceImplName("%sServiceImpl")
.setControllerName("%sController").setMapperName("%sDao").setXmlName("%sMapper")
.setOpen(false) // 生成文件后 不打开文件夹
.setBaseResultMap(true) // XML ResultMap
.setBaseColumnList(true); // XML columList
//2. 数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
.setDriverName("com.mysql.jdbc.Driver")
.setUrl(
"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8")
.setUsername("root").setPassword("admin").setTypeConvert(new MySqlTypeConvert() {
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
if (fieldType.toLowerCase().contains("tinyint")) {
return DbColumnType.BOOLEAN;
}
//将数据库中datetime转换成date
if (fieldType.toLowerCase().contains("datetime")) {
return DbColumnType.DATE;
}
return super.processTypeConvert(globalConfig, fieldType);
}
});
//3. 策略配置
StrategyConfig stConfig = new StrategyConfig();
stConfig.setColumnNaming(NamingStrategy.underline_to_camel)
.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
.setEntityLombokModel(true) // 使用Lombok
.setVersionFieldName("version") // 数据库版本控制字段
.setLogicDeleteFieldName("status") // 数据库逻辑删除字段
.setRestControllerStyle(true)
.setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService")
.setInclude(new String[]{table}); // 生成的表
//4. 包名策略配置
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent("com.mybatis.plus.demo").setMapper("dao").setService("service")
.setServiceImpl("service.impl").setController("controller").setEntity("model");
//5.自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
String templatePath = "/templates/mapper.xml.vm"; // 如果模板引擎是 velocity
List<FileOutConfig> focList = new ArrayList<>(); // 自定义输出配置
focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
@Override
public String outputFile(TableInfo tableInfo) {
// mapper自定义输出文件名
return path + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper"
+ StringPool.DOT_XML;
}
});
// ------------form vo 使用默认模板请注释-begin-----------
templatePath = "/templates/entityForm.java.vm";
focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
@Override
public String outputFile(TableInfo tableInfo) {
// form自定义输出文件名
return path + "/src/main/java/com/mybatis/plus/demo/pojo/" + tableInfo.getEntityName() + "Form"
+ StringPool.DOT_JAVA;
}
});
templatePath = "/templates/entityVO.java.vm";
focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
@Override
public String outputFile(TableInfo tableInfo) {
// VO自定义输出文件名
return path + "/src/main/java/com/mybatis/plus/demo/pojo/" + tableInfo.getEntityName() + "VO"
+ StringPool.DOT_JAVA;
}
});
// ------------form vo 使用默认模板请注释-end-----------
cfg.setFileOutConfigList(focList);
// 6 配置模板 自定义模板/在resources/templates 可以编辑
TemplateConfig templateConfig = new TemplateConfig();
// 关闭默认 xml 生成,调整生成 至 根目录
templateConfig.setEntity("/templates/entity.java").setService("/templates/service.java")
.setController("/templates/controller.java").setMapper("/templates/mapper.java")
.setServiceImpl("/templates/serviceImpl.java").setXml(null);
//7. 整合配置
AutoGenerator ag = new AutoGenerator();
ag.setGlobalConfig(config).setDataSource(dsConfig).setStrategy(stConfig).setCfg(cfg)
.setPackageInfo(pkConfig).setTemplate(templateConfig);
//8. 执行
ag.execute();
}
}
注:如果是使用自定义模板,请注意修改模板中的form,vo引入包路径等
使用默认模板请注释代码中生成form/vo代码
第一次运行可能有以下错误,如果没有请忽略
问题1:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents
解决:set global time_zone='+8:00'
问题2:使用Lombok插件,Idea,Eclipse必须安装改插件,否则找不到get/set方法
解决:IDEA安装Lombok步骤
Eclipse的自行百度 /滑稽
修改文件路径表名之后运行
生成结构图如下
perfect ! ! !
下一篇 : 记录自己的Mybatis-plus之路02-mp自定义模板
自学的路上并不孤单