SpringBoot结合MyBatis Plus 自动生成代码

码农天地 -
SpringBoot结合MyBatis Plus 自动生成代码
SpringBoot结合MyBatis Plus 自动生成代码本来这一章要介绍Redis+AOP优化权限,可是发现还是需要先介绍一些MyBatis Plus自动生成代码MyBatis Plus简介MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis Plus特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作MyBatis Plus支持数据库任何能使用 mybatis 进行 crud, 并且支持标准 sql 的数据库框架结构

MyBatis Plus代码生成器AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。使用教程添加 代码生成器 依赖
`<!--lombok依赖-->`
 `<dependency>`
 `<groupId>org.projectlombok</groupId>`
 `<artifactId>lombok</artifactId>`
 `<optional>true</optional>`
 `</dependency>`
 `<!--集成druid连接池-->`
 `<dependency>`
 `<groupId>com.alibaba</groupId>`
 `<artifactId>druid-spring-boot-starter</artifactId>`
 `<version>1.1.10</version>`
 `</dependency>`
 `<!--Mysql数据库驱动-->`
 `<dependency>`
 `<groupId>mysql</groupId>`
 `<artifactId>mysql-connector-java</artifactId>`
 `<version>5.1.10</version>`
 `</dependency>`
 `<!--MyBatis Plus 依赖-->`
 `<dependency>`
 `<groupId>com.baomidou</groupId>`
 `<artifactId>mybatis-plus-boot-starter</artifactId>`
 `<version>3.3.2</version>`
 `</dependency>`
 `<!--MyBatis Plus 代码生成器-->`
 `<dependency>`
 `<groupId>com.baomidou</groupId>`
 `<artifactId>mybatis-plus-generator</artifactId>`
 `<version>3.3.2</version>`
 `</dependency>`
 `<!--Hutool Java工具包-->`
 `<dependency>`
 `<groupId>cn.hutool</groupId>`
 `<artifactId>hutool-all</artifactId>`
 `<version>4.5.7</version>`
 `</dependency>`
 `<!--Velocity模板引擎-->`
 `<dependency>`
 `<groupId>org.apache.velocity</groupId>`
 `<artifactId>velocity-engine-core</artifactId>`
 `<version>2.2</version>`
 `</dependency>`
 `<!--Swagger-UI API文档生产工具-->`
 `<dependency>`
 `<groupId>io.springfox</groupId>`
 `<artifactId>springfox-swagger2</artifactId>`
 `<version>2.7.0</version>`
 `</dependency>`
 `<dependency>`
 `<groupId>io.springfox</groupId>`
 `<artifactId>springfox-swagger-ui</artifactId>`
 `<version>2.7.0</version>`
 `</dependency>`
添加 模板引擎 依赖MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。本文使用默认依赖
`<dependency>`
 `<groupId>org.apache.velocity</groupId>`
 `<artifactId>velocity-engine-core</artifactId>`
 `<version>2.2</version>`
`</dependency>`
编写配置MyBatis-Plus 的代码生成器提供了大量的自定义参数供用户选择,能够满足绝大部分人的使用需求。配置GlobalConfig全局策略 globalConfig 配置

outputDir

生成文件的输出目录默认值:D 盘根目录

fileOverride

是否覆盖已有文件默认值:false

open

是否打开输出目录默认值:true

enableCache

是否在xml中添加二级缓存配置默认值:false

author

开发人员默认值:null

kotlin

开启 Kotlin 模式默认值:false

swagger2

开启 swagger2 模式默认值:false

activeRecord

开启 ActiveRecord 模式默认值:false

baseResultMap

开启 BaseResultMap默认值:false

baseColumnList

开启 baseColumnList默认值:false

dateType

时间类型对应策略默认值:TIME\_PACK

注意事项:

如下配置 %s 为占位符

entityName

实体命名方式默认值:null 例如:%sEntity 生成 UserEntity

mapperName

mapper 命名方式默认值:null 例如:%sDao 生成 UserDao

xmlName

Mapper xml 命名方式默认值:null 例如:%sDao 生成 UserDao.xml

serviceName

service 命名方式默认值:null 例如:%sBusiness 生成 UserBusiness

serviceImplName

service impl 命名方式默认值:null 例如:%sBusinessImpl 生成 UserBusinessImpl

controllerName

controller 命名方式默认值:null 例如:%sAction 生成 UserAction

idType

指定生成的主键的ID类型默认值:null
 `/**`
 `* 全局配置`
 `* @param projectPath`
 `* @return`
 `*/`
 `public static GlobalConfig initGlobal(String projectPath){`
 `GlobalConfig gc = new GlobalConfig();`
 `gc.setOutputDir(projectPath + "/src/main/java");`
 `gc.setAuthor("zbb");`
 `gc.setOpen(false);`
 `gc.setSwagger2(true);`
 `gc.setBaseResultMap(true);`
 `gc.setFileOverride(true);`
 `gc.setDateType(DateType.ONLY_DATE);`
 `gc.setEntityName("%s");`
 `gc.setMapperName("%sMapper");`
 `gc.setXmlName("%sMapper");`
 `gc.setServiceName("%sService");`
 `gc.setServiceImplName("%sServiceImpl");`
 `gc.setControllerName("%sController");`
 `return gc;`
 `}`
配置 DataSourceConfig

dbQuery

数据库信息查询类默认由 dbType 类型决定选择对应数据库内置实现实现 IDbQuery 接口自定义数据库查询 SQL 语句 定制化返回自己需要的内容

dbType

数据库类型该类内置了常用的数据库类型【必须】

schemaName

数据库 schema name例如 PostgreSQL 可指定为 publictypeConvert类型转换默认由 dbType 类型决定选择对应数据库内置实现 实现 ITypeConvert 接口自定义数据库 字段类型 转换为自己需要的 java 类型,内置转换类型无法满足可实现 IColumnType 接口自定义

url

驱动连接的URLdriverName驱动名称username数据库连接用户名password数据库连接密码
`/**`
 `*`
 `* 配置 DataSourceConfig`
 `* @return`
 `*/`
 `public  static DataSourceConfig initDataSource(){`
 `Props props = new Props("application.properties");`
 `DataSourceConfig dataSourceConfig = new DataSourceConfig();`
 `dataSourceConfig.setUrl(props.getStr("dataSource.url"));`
 `dataSourceConfig.setDriverName(props.getStr("dataSource.driverName"));`
 `dataSourceConfig.setUsername(props.getStr("dataSource.username"));`
 `dataSourceConfig.setPassword(props.getStr("dataSource.password"));`
 `return dataSourceConfig;`
 `}`
包配置包名配置

parent

父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名

moduleName

父包模块名

entity

Entity包名

service

Service包名

serviceImpl

Service Impl包名

mapper

Mapper包名

xml

Mapper XML包名

controller

Controller包名

pathInfo

路径配置信息
 `/**`
 `* 包配置`
 `* @param packname`
 `* @return`
 `*/`
 `public  static  PackageConfig initPackage(String packname){`
 `Props props = new Props("application.properties");`
 `PackageConfig packageConfig = new PackageConfig();`
 `packageConfig.setModuleName(packname);`
 `packageConfig.setParent(props.getStr("package.base"));`
 `packageConfig.setEntity("model");`
 `return packageConfig;`
 `}`
模板配置 TemplateConfig

entity

Java 实体类模板

entityKt

Kotin 实体类模板

service

Service 类模板

serviceImpl

Service impl 实现类模板

mapper

mapper 模板

xml

mapper xml 模板

controller

controller 控制器模板
`/**`
 `* 模板配置`
 `* @return`
 `*/`
 `public static TemplateConfig initTemplate() {`
 `TemplateConfig templateConfig = new TemplateConfig();`
 `//可以对controller、service、entity模板进行配置`
 `templateConfig.setXml(null);`
 `return templateConfig;`
 `}`
自定义属性注入 InjectionConfig

map

自定义返回配置 Map 对象该对象可以传递到模板引擎通过 cfg.xxx 引用

fileOutConfigList

自定义输出文件配置 FileOutConfig 指定模板文件、输出文件达到自定义文件生成目的

fileCreate

自定义判断是否创建文件实现 IFileCreate 接口该配置用于判断某个类是否需要覆盖创建,当然你可以自己实现差异算法 merge 文件

initMap

注入自定义 Map 对象(注意需要setMap放进去)
 `/**`
 `* 自定义属性注入`
 `*/`
 `public static InjectionConfig initInjection(String projectPath, String moduleName) {`
 `// 自定义配置`
 `InjectionConfig injectionConfig = new InjectionConfig() {`
 `@Override`
 `public void initMap() {`
 `// 可用于自定义属性`
 `}`
 `};`
 `// 模板引擎是Velocity`
 `String templatePath = "/templates/mapper.xml.vm";`
 `// 自定义输出配置`
 `List<FileOutConfig> focList = new ArrayList<>();`
 `// 自定义配置会被优先输出`
 `focList.add(new FileOutConfig(templatePath) {`
 `@Override`
 `public String outputFile(TableInfo tableInfo) {`
 `// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!`
 `return projectPath + "/src/main/resources/mapper/" + moduleName`
 `+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;`
 `}`
 `});`
 `injectionConfig.setFileOutConfigList(focList);`
 `return injectionConfig;`
 `}`
策略配置StrategyConfig
 `/**`
 `* 策略配置`
 `*/`
 `public static StrategyConfig initStrategy(String[] tableNames) {`
 `StrategyConfig strategyConfig = new StrategyConfig();`
 `strategyConfig.setNaming(NamingStrategy.underline_to_camel);`
 `strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);`
 `strategyConfig.setEntityLombokModel(true);`
 `strategyConfig.setRestControllerStyle(true);`
 `//当表名中带*号时可以启用通配符模式`
 `if (tableNames.length == 1 && tableNames[0].contains("*")) {`
 `String[] likeStr = tableNames[0].split("_");`
 `String likePrefix = likeStr[0] + "_";`
 `strategyConfig.setLikeTable(new LikeTable(likePrefix));`
 `} else {`
 `strategyConfig.setInclude(tableNames);`
 `}`
 `return strategyConfig;`
 `}`
代码生成器
 `public static void main(String[] args) {`
 `String projectPath = System.getProperty("user.dir");`
 `String moduleName = scanner("模块名");`
 `String[] tableNames = scanner("表名,多个英文逗号分割").split(",");`
 `// 代码生成器`
 `AutoGenerator autoGenerator = new AutoGenerator();`
 `autoGenerator.setGlobalConfig(initGlobal(projectPath));`
 `autoGenerator.setDataSource(initDataSource());`
 `autoGenerator.setPackageInfo(initPackage(moduleName));`
 `autoGenerator.setCfg(initInjection(projectPath, moduleName));`
 `autoGenerator.setTemplate(initTemplate());`
 `autoGenerator.setStrategy(initStrategy(tableNames));`
 `autoGenerator.setTemplateEngine(new VelocityTemplateEngine());`
 `autoGenerator.execute();`
 `}`
读取控制台内容
 `/**`
 `* <p>`
 `* 读取控制台内容`
 `* </p>`
 `*/`
 `public static String scanner(String tip) {`
 `Scanner scanner = new Scanner(System.in);`
 `StringBuilder help = new StringBuilder();`
 `help.append("请输入" + tip + ":");`
 `System.out.println(help.toString());`
 `if (scanner.hasNext()) {`
 `String ipt = scanner.next();`
 `if (StrUtil.isNotEmpty(ipt)) {`
 `return ipt;`
 `}`
 `}`
 `throw new MybatisPlusException("请输入正确的" + tip + "!");`
 `}`
配置application.properties
`dataSource.url=jdbc:mysql://db:3306/mymes?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai`
`dataSource.driverName=com.mysql.jdbc.Driver`
`dataSource.username=reader`
`dataSource.password=123456`
`package.base=com.springboot.mymes_demo.modules`
运行代码

注:

在输入表明的时候输入xx\_*表示xx前缀的所有表 若输入全名,则生成对于的表

公众号https://mp.weixin.qq.com/s/nf...

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

加个好友,技术交流

1628738909466805.jpg