Mybatis Plus代码生成器(时间管理大师)

网友投稿 268 2022-12-02


Mybatis Plus代码生成器(时间管理大师)

1. 前言

对于写Crud的老司机来说时间非常宝贵,一些样板代码写不但费时费力,而且枯燥无味。经常有小伙伴问我,胖哥你怎么天天那么有时间去搞新东西,透露一下秘诀呗。

好吧,今天就把Mybatis-plus的代码生成器分享出来,让你也成为一个优秀的时间管理大师。

2. 基本依赖

以Spring Boot和mysql为例,你需要下面这些依赖:

org.projectlombok

lombok

compile

com.zaxxer

HikariCP

mysql

mysql-connector-java

com.baomidou

mybatis-plus-boot-starter

com.baomidou

mybatis-plus-generator

compile

true

org.springframework.boot

spring-boot-starter-freemarker

compile

true

然后配置好你的数据库,确保数据库连接通讯畅通。

3. 定制代码生成器

这里我期望生成的目录结构是这样的:

于是我花了点时间定制了一些生成器的配置,代码如下,就是这么硬核!

paZUKQmUwFckage cn.felord.mybatis.util;

import com.baomidou.mybatisplus.annotation.DbType;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.core.toolkit.StringPool;

import com.baomidou.mybatisplus.generator.AutoGenerator;

import com.baomidou.mybatisplus.generator.InjectionConfig;

import com.baomidou.mybatisplus.generator.config.*;

import com.baomidou.mybatisplus.generator.config.po.TableInfo;

import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;

import java.util.List;

import java.util.Optional;

/**

* 代码生成器配置

*

* @author felord

* @since 10 :39 2018/9/9

*/

public class CodeGenerator {

private String dbUrl;

private String userName;

private String password;

private String dir;

private String xmlDir;

private String packageName;

private CodeGenerator() {

}

/**

* The type Config builder.

*/

public static class ConfigBuilder {

private String dbUrl;

private String userName;

private String password;

private String dir;

private String xmlDir;

private String packageName;

/**

* Db url config builder.

*

* @param dbUrl the db url

* @return the config builder

*/

public ConfigBuilder dbUrl(final String dbUrl) {

this.dbUrl = dbUrl;

return this;

}

/**

* User name config builder.

*

* @param userName the user name

* @return the config builder

*/

public ConfigBuilder userName(final String userName) {

this.userName = userName;

return this;

}

/**

* Password config builder.

*

* @param password the password

* @return the config builder

*/

public ConfigBuilder password(final String password) {

this.password = password;

return this;

}

/**

* Dir config builder.

*

* @param dir the dir

* @return the config builder

*/

public ConfigBuilder dir(final String dir) {

this.dir = dir;

return this;

}

/**

* Dir config builder.

*

* @param xmlDir the dir

* @return the config builder

*/

public ConfigBuilder xmlDir(final String xmlDir) {

this.xmlDir = xmlDir;

return this;

}

/**

* Package name config builder.

*

* @param packageName the package name

* @return the config builder

*/

public ConfigBuilder packageName(final String packageName) {

this.packageName = packageName;

return this;

}

/**

* Build code generator.

*

* @return the code generator

*/

public CodeGenerator build() {

CodeGenerator generator = new CodeGenerator();

generator.dbUrl = Optional.of(this.dbUrl).get();

generator.userName = Optional.of(this.userName).get();

generator.password = Optional.of(this.password).get();

generator.dir = Optional.of(this.dir).get();

generator.xmlDir = Optional.of(this.xmlDir).get();

generator.packageName = Optional.of(this.packageName).get();

return generator;

}

}

/**

* Code.

*

* @param tableNames the table names

*/

public void code(String... tableNames) {

codingMysql(true, false, true, this.dbUrl, this.userName, this.password, this.dir, this.xmlDir, this.packageName, tableNames);

}

/**

*

* 生成器核心部分

*

* @param serviceNameStartWithI 是否前缀I

* @param createController 是否生成controller

* @param useLombok 是否使用 lombok

* @param dbUrl 数据库连接

* @param username 用户名称

* @param password 密码

* @param outDir 输出目录

* @param xmlDir xml 文件目录

* @param packageName 包路径

* @param tableNames 表名称

*/

private static void codingMysql(boolean serviceNameStartWithI,

boolean createController,

boolean useLombok,

String dbUrl,

String username,

String password,

String outDir,

String xmlDir,

String packageName,

String... tableNames) {

GlobalConfig config = new GlobalConfig();

DataSourceConfig dataSourceConfig = new DataSourceConfig();

// 数据库类型 这里使用 mysql

dataSourceConfig.setDbType(DbType.MYSQL)

.setUrl(dbUrl)

.setUsername(username)

.setPassword(password)

// 驱动名称 这里使用mysql

.setDriverName("com.mysql.jdbc.Driver");

// 自定义xml输出路径

InjectionConfig cfg = new InjectionConfig() {

@Override

public void initMap() {

// to do nothing

}

};

List focList = new ArrayList<>();

// 你也可以定制 xml 的模板

focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {

@Override

public String outputFile(TableInfo tableInfo) {

// 自定义xml文件的路径

return xmlDir + "/mapper/" + tableInfo.getMapperName() + StringPool.DOT_XML;

}

});

cfg.setFileOutConfigList(focList);

// 策略配置项

StrategyConfig strategyConfig = new StrategyConfig();

strategyConfig

.setCapitalMode(false)

// 是否使用 lombok

.setEntityLombokModel(useLombok)

// 下划线转驼峰

.setNaming(NamingStrategy.underline_to_camel)

//修改替换成你需要的表名,多个表名传数组

.setInclude(tableNames);

// 使用 AR 模式

config.setActiveRecord(true)

// 设置头注释的 author

.setAuthor("system")

// 项目输出路径

.setOutputDir(outDir)

// 是否覆盖已经生成的同名文件

.setFileOverride(true)

// 雪花算法生成id

.setIdType(IdType.ASSIGN_ID)

// 是否使用缓存

.setEnableCache(false)

// 是否生成 xml 中的 基础 resultMap

.setBaseResultMap(true);

if (!serviceNameStartWithI) {

// Service 层的 通用格式后缀

config.setServiceName("%sService");

}

// 实体类包名

PackageConfig packageConfig = new PackageConfig().setParent(packageName).setEntity("entity");

TemplateConfig templateConfig = new TemplateConfig().setXml(null);

// 这里选择不生成 controller 实际上 生成的大多不符合我们需要 到服务层就行了

if (!createController) {

templateConfig.setController(null);

}

// 整合起来运行

new AutoGenerator()

.setGlobalConfig(config)

.setTemplateEngine(new FreemarkerTemplateEngine())

.setDataSource(dataSourceConfig)

.setStrategy(strategyConfig)

.setPackageInfo(packageConfig)

.setCfg(cfg)

.setTemplate(templateConfig)

.execute();

}

}

如果我生成的目录结构能够满足你的需要,那就巧了,直接拿去用;如果不满足需要,你可以按照注释的说明进行微调。18年搞的用了好几年,没出过什么乱子。

4. 代码生成器的使用

使用起来非常简单,确保数据库能够使用JDBC连接成功,写个main方法,配置一下,跑起来就是了:

/**

* @author felord.cn

* @since 11:34

**/

public class AutoCoding {

public static void main(String[] args) {

// maven 工程 main 包的全路径

final String mainDir = "C:\\IdeaProjects\\bc-recyling\\src\\main\\";

CodeGenerator.ConfigBuilder builder = new CodeGenerator.ConfigBuilder();

CodeGenerator codeGenerator = builder

// 数据库连接

.dbUrl("jdbc:mysql://localhost:3306/test")

// 账户

.userName("root")

// 密码

.password("123456")

// 生成类位置

.dir(mainDir + "java")

// 生成xml 位置

.xmlDir(mainDir + "resources")

// 包引用路径

.packageName("cn.felord.mybatis")

.build();

//根据表生成后台代码

codeGenerator.code("user_info");

}

}

然后代码就生成了,是不是非常的好用?恭喜你获得了 时间管理大师 荣誉称号。

切记不要炫耀,否则需求加倍。

5. 总结

虽然好用,但是建议新手不要使用,多手写一下代码。另外复杂的SQL还是建议自己写,多锻炼写SQL的能力。如果你在使用中有什么问题,可以私信我进行沟通。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ActiveMQ安装及部署教程图解
下一篇:java并发编程专题(八)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~