提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
mybatis-plus-AutoGenerator
使用步骤
1.引入依赖
代码如下(示例):
<!-- mybatisPlus 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<!-- mybatisPlus Velocity 模版引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<!-- mybatisPlus Freemarker 模版引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!-- springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- mybatis-plus启动器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!--mybatis-plus扩展包-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.2</version>
</dependency>
2.application.yml配置
代码如下(示例):
# 应用名称
spring.application.name=springboot-mybatis-plus
# 应用服务 WEB 访问端口
server.port=8090
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/chen?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123
mybatis-plus.type-aliases-package=com.entity
#日志输出(控制台打印)
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
3.mybaitsconfig(配置分页插件,乐观锁)
代码如下(示例):
package com.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@MapperScan("com.mapper")
@EnableTransactionManagement
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
// 注册乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
4.MetaObjectHandler(配置自动填充处理)
代码如下(示例):
package com.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
// update的时候使用,更新的时候强制进行填充
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
5.自动生成代码(新的)
<!-- 代码生成所需依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
<scope>provided</scope>
</dependency>
代码如下(示例):
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@SpringBootTest
class GmallApplicationTests {
@Value("${spring.datasource.url}")
public String url;
@Value("${spring.datasource.username}")
public String username;
@Value("${spring.datasource.password}")
public String password;
@Test
void contextLoads() {
String parentDir = System.getProperty("user.dir");
String thisClassFullName = this.getClass().getCanonicalName();
//拼接代码生成路径
String codeGenerateDir = parentDir + "/src/main/java";
String mapperGenerateDir = parentDir + "/src/main/resources/mapper";
String pageName = thisClassFullName.substring(0, thisClassFullName.lastIndexOf("."));
// 设置过滤表前缀
List<String> skipTablePrefix = Arrays.asList("oms_", "pms_", "sms_", "sys_", "ums_", "wms_");
FastAutoGenerator.create(url, username, password)
.globalConfig(builder -> {
builder.author("chen") // 设置作者
.enableSwagger() // 开启 swagger 模式
.disableOpenDir()
.outputDir(codeGenerateDir); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent(pageName) // 设置父包名
//.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, mapperGenerateDir)); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("ums_member") // 设置需要生成的表名
.addTablePrefix(skipTablePrefix);// 设置过滤表前缀
//entity设置
builder.entityBuilder()
.enableLombok() // 开启lombok
.enableChainModel() // 开启链式模式
.enableFileOverride(); // 覆盖已生成文件
//controller设置
builder.controllerBuilder().enableFileOverride();
//mapper设置
builder.mapperBuilder().enableFileOverride();
//service设置
builder.serviceBuilder().enableFileOverride();
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
6.JacksonConfig(解决雪花算法精度丢失问题)
代码如下(示例):
package com.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
// 全局配置序列化返回 JSON 处理
SimpleModule simpleModule = new SimpleModule();
//JSON Long ==> String
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}
7.Oracle序列自增策略
用于解决Oracle主键是number,且太短,不能使用雪花算法时
yml配置文件添加:
#id生成策略(oracle序列)
mybatis-plus:
global-config:
db-config:
id-type: input
实体类上面添加:
@KeySequence("Oracle数据里面的序列名字")
public class Vip implements Serializable {
@ApiModelProperty(value = "用户编号")
@TableId(value = "VID", type = IdType.INPUT)
private Long vid;
***********************************省略代码
}
注册一个bean:
//序列生成器
@Bean
public OracleKeyGenerator oracleKeyGenerator(){
return new OracleKeyGenerator();
}
补充:通过注解声明该字段不是一个数据库表里面的字段
@TableField(exist = false)
private String status;
总结
一只勤奋的菜鸡