1. 前言
本文章首次是在csdn
上写的,本次发布到自己的博客中,增添一点色彩。
点击查看Mybatis-plus官方文档
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
2. 创建spring boot 项目
使用idea
默认生成即可 …
3. 修改pom文件
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.projectlombok
lombok
true
com.baomidou
mybatis-plus-boot-starter
3.1.0
com.baomidou
mybatis-plus-generator
3.1.0
org.apache.velocity
velocity-engine-core
2.0
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
1.16.16
org.springframework.boot
spring-boot-configuration-processor
true
io.springfox
springfox-swagger2
2.9.2
io.springfox
springfox-swagger-ui
2.9.2
4. 修改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日志打印
5. 修改启动类
6. 创建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();
};
};
7. 编写自动生成工具类
注 : 直接把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 ! ! !