一、引入依赖
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
版本信息:
<properties>
<mybatis-plus.version>3.4.0</mybatis-plus.version>
<velocity.version>2.2</velocity.version>
</properties>
依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- MybatisConfig-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--mybatis-plus的代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--默认模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
二、在配置文件增加mysql连接与mybayis-plus配置
spring:
datasource:
#com.mysql.cj.jdbc.Driver 、 com.p6spy.engine.spy.P6SpyDriver(sql打印)
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://106.52.164.253:3306/oauth?characterEncoding=utf8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai
username: admin
password: lin123456
mybatis-plus:
# 映射文件所在路径
mapper-locations: classpath:mappers/*.xml
# pojo类所在包路径
type-aliases-package: com.um.oatuh.entity
configuration:
use-generated-keys: false
map-underscore-to-camel-case: true
三、分页插件配置
package com.unionman.doorbell.config.mybatis;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
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;
/**
* @Description: mybatis-plus分页插件
* @Author:junlin.ru
* @Date:2020/9/17 11:33
**/
@Configuration
@MapperScan(value = {"com.unionman.doorbell.mapper","com.unionman.doorbell.app.mapper"})
public class MybatisConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
}
分页工具类:
package com.unionman.doorbell.common.util;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @Description: 分页工具类
* @Author:junlin.ru
* @Date:2020/9/18 11:39
**/
public class PageUtils {
/**
* 获取分页IPage<T>
* @param pageIndex 页面
* @param pageSize 页数
* @param classz 返回class类型
* @param <T> 泛型
* @return
*/
public static <T> IPage<T> getIPage(Integer pageIndex, Integer pageSize,Class<T> classz){
IPage<T> page = new Page<T>(pageIndex, pageSize);
return page;
}
}
四、代码生成模板
package com.unionman.doorbell.mybatis;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
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.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
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 org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description: 代码生成器配置
* @Author:junlin.ru
* @Date:2020/9/17 11:55
**/
@SpringBootTest
public class Code {
/**
* 数据源配置
*/
String data_driver = "com.mysql.cj.jdbc.Driver";
String data_url = "jdbc:mysql://192.168.133.64:3307/doorbell?characterEncoding=utf8&allowMultiQueries=true&useSSL=false";
String data_username = "admin";
String data_password = "lin123456";
//表前缀
String table_prefix = "um_";
//需要生成表
String[] tables = {"um_reply"};
//基础包目录
String parent_package = "com.unionman.doorbell.app";
//mapper
String mapper_package = "mapper";
//service
String service_package = "service";
//entity
String entity_package = "entity";
//作者
String author = "junlin.ru";
@Test
public void code(){
String projectPath = System.getProperty("user.dir");
// 自定义需要填充的字段
List<TableFill> tableFillList = new ArrayList<TableFill>();
//如 每张表都有一个创建时间、修改时间
//而且这基本上就是通用的了,新增时,创建时间和修改时间同时修改
//修改时,修改时间会修改,
//虽然像Mysql数据库有自动更新几只,但像ORACLE的数据库就没有了,
//使用公共字段填充功能,就可以实现,自动按场景更新了。
//如下是配置
TableFill sysCreateTime = new TableFill("create_time", FieldFill.INSERT);
TableFill sysUpdateTime = new TableFill("update_time", FieldFill.UPDATE);
// TableFill sysCreateBy = new TableFill("create_user", FieldFill.INSERT);
// TableFill sysUpdateBy = new TableFill("update_user", FieldFill.UPDATE);
tableFillList.add(sysCreateTime);
tableFillList.add(sysUpdateTime);
// tableFillList.add(sysCreateBy);
// tableFillList.add(sysUpdateBy);
// 1. 全局配置
GlobalConfig config = new GlobalConfig();
// 是否支持AR模式
config.setActiveRecord(true)
// 作者
.setAuthor(author)
// 生成路径
.setOutputDir(projectPath + "/src/main/java/")
// 文件覆盖
.setFileOverride(true)
// 主键策略
.setIdType(IdType.AUTO)
// 设置生成的service接口的名字的首字母是否为I,例如IEmployeeService
.setServiceName("%sService")
// XML 二级缓存
.setEnableCache(false)
//生成基本的resultMap
.setBaseResultMap(true)
//生成基本的SQL片段
.setBaseColumnList(true)
//生成后打开文件夹
.setOpen(false).setDateType(DateType.ONLY_DATE);
// 2. 数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
// 设置数据库类型
dsConfig.setDbType(DbType.MYSQL)
.setDriverName(data_driver)
.setUrl(data_url)
.setUsername(data_username)
.setPassword(data_password)
.setTypeConvert(new MySqlTypeConvert() {
// 自定义数据库表字段类型转换【可选】
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
System.out.println("转换类型:" + fieldType);
if (fieldType.toLowerCase().contains("tinyint")) {
return DbColumnType.INTEGER;
}
return super.processTypeConvert(globalConfig, fieldType);
}
});
// 3. 策略配置globalConfiguration中
StrategyConfig stConfig = new StrategyConfig();
// 全局大写命名
stConfig.setCapitalMode(true)
// 指定表名 字段名是否使用下划线
// .setDbColumnUnderline(true)
// 数据库表映射到实体的命名策略
.setNaming(NamingStrategy.underline_to_camel)
.setTablePrefix(table_prefix)
// 生成的表
.setInclude(tables)
.setEntityBooleanColumnRemoveIsPrefix(false)
// 自定义实体,公共字段
.setTableFillList(tableFillList);
// 4. 包名策略配置
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent(parent_package)
//dao
.setMapper(mapper_package)
//servcie
.setService(service_package)
.setEntity(entity_package);
// 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
Map<String, Object> map = new HashMap<>();
map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
this.setMap(map);
}
};
// 自定义输出文件目录
List<FileOutConfig> focList = new ArrayList<>();
// 调整xml生成目录演示
focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/resources/mappers/" + tableInfo.getEntityName() + "Mapper.xml";
}
});
cfg.setFileOutConfigList(focList);
// 关闭默认生成,如果设置空 OR Null 将不生成该模块。
TemplateConfig tc = new TemplateConfig();
tc.setController(null);
tc.setXml(null);
// 5. 整合配置
AutoGenerator ag = new AutoGenerator();
ag.setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(pkConfig)
.setCfg(cfg)
.setTemplate(tc);
// 6. 执行
ag.execute();
}
}