导入pom依赖
<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.0.5</version>
</dependency>
<!--连接池-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
<scope>runtime</scope>
</dependency>
新建一个MybatisPlusConfig.java文件
@EnableTransactionManagement // 事物管理 @Configuration public class MyBatisPlus { // 乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor(){ return new OptimisticLockerInterceptor(); } // 分页插件 @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); } // 逻辑删除配置 @Bean public ISqlInjector iSqlInjector(){ return new LogicSqlInjector(); } // sql 效率插件 @Bean @Profile({"dev","test"}) public PerformanceInterceptor performanceInterceptor(){ PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); performanceInterceptor.setMaxTime(1000); // ms 最大执行时间超过不执行 performanceInterceptor.setFormat(true); // 是否开启格式化支持 return performanceInterceptor; } }
在来点mybatis-plus的跟新策略
@Slf4j @Component public class MyMeteObject implements MetaObjectHandler { // 插入时的跟新策略 @Override public void insertFill(MetaObject metaObject) { log.info("stats info hander....."); this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } // 修改时的跟新策略 @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime", new Date(), metaObject); } }
在启动类中扫描resources下的mapper文件
在application.properties文件添加数据库和mybatis-plus配置
# mysql配置 mysql 8 版本需要配置时区 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/dome?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC # 配置当前版本 开发环境 #spring.profiles.active=dev # redis配置 #spring.redis.host=127.0.0.1 #spring.redis.port=6379 #数据库配置日志 使用控制台输出 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
关键来了,mybatis给我们提供的代码自动生成器。在test中新建一个MybatisGenertot文件,它可以帮助我们根据数据库自动生成controller,service.....等基本代码。
1. 先添加自动生成依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
2.新建一个带有main方法的类public class GeneratorCode
package com.dome.common.utils.generator;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @author auth
* @date 2020/11/25 10:52
* 生成代码
*/
public class GeneratorCode {
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入" + tip + ":");
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
AutoGenerator autoGenerator = new AutoGenerator();
//全局配置
GlobalConfig gc = new GlobalConfig();
//得到当前项目的路径
String oPath = System.getProperty("user.dir");
gc.setOutputDir(oPath + "/src/main/java");
//生成完成后不弹出文件框
gc.setOpen(false);
//文件覆盖
gc.setFileOverride(true);
// ActiveRecord特性
gc.setActiveRecord(false);
gc.setEnableCache(false);
gc.setBaseResultMap(true);
gc.setBaseColumnList(true);
// 作者
gc.setAuthor("auth");
gc.setSwagger2(true);
// 自定义文件命名,注意 %s 会自动填充表实体属性!
gc.setControllerName("%sController");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
autoGenerator.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("yourpass");
dsc.setUrl("jdbc:mysql://localhost:3306/sprin_security?useSSL=false&useUnicode=true&nullCatalogMeansCurrent=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");
autoGenerator.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
//父包路径
pc.setParent("com.dome.cm");
String s = "." + scanner("包名称");
pc.setController("controller" + s);
pc.setService("service" + s);
pc.setServiceImpl("service" + s);
pc.setMapper("mapper" + s);
pc.setXml("mapper" + s);
pc.setEntity("po" + s);
autoGenerator.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// 表名生成策略
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
// 需要生成的表
strategy.setInclude(scanner("表名称").split(","));
strategy.setSuperServiceClass(null);
strategy.setSuperServiceImplClass(null);
strategy.setSuperMapperClass(null);
//去除表前缀
strategy.setTablePrefix("sys_", "sw_");
//去除字段前缀
strategy.setFieldPrefix("");
// 填充策略
strategy.setLogicDeleteFieldName("del_flag");
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(createTime);
tableFills.add(updateTime);
strategy.setTableFillList(tableFills);
strategy.setVersionFieldName("version");
strategy.setRestControllerStyle(true);
autoGenerator.setStrategy(strategy);
// 执行生成
autoGenerator.execute();
}
}
3.执行main方法输入数据库表名 回车。