前言
快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码
一、mybatis-plus是什么?
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
Mybatis-Plus 官网地址
二.代码生成器的作用
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
就是帮助我们快速生成代码,使我们更加便捷的开发项目
三.代码生成器的使用
3.1 引入依赖
<!-- swagger 可以帮助我们生成swagger文档 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!-- 引入 mybatis-plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!-- 引入 代码生成器 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
3.2 创建生成方法
创建创建测试类
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.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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
// 代码自己动生成器
//@SpringBootTest
public class proCode {
// @Test
public static void main(String[] args) {
// 需要构建一个 代码自动生成器 对象
AutoGenerator mpg = new AutoGenerator();
// 配置策略
// 1、全局配置
GlobalConfig gc = new GlobalConfig();
// 获取当前项目目录
String projectPath = System.getProperty("user.dir");
// 设置生成代码的位置
gc.setOutputDir(projectPath+"/src/main/java");
// 作者
gc.setAuthor("pro");
gc.setOpen(false); // 是否打开文件管理器
gc.setFileOverride(false); // 是否覆盖
gc.setServiceName("%sService"); // 去 service的 I 前缀
gc.setIdType(IdType.ID_WORKER); // id 默认是初始算法
gc.setDateType(DateType.ONLY_DATE); // 日期类型
gc.setSwagger2(true); // 是否生成swagger
mpg.setGlobalConfig(gc);
// 2、设置数据源
DataSourceConfig dsc= new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setDbType(DbType.MYSQL); // 数据库类型 mysql
mpg.setDataSource(dsc);
// 3、包的配置
PackageConfig pc = new PackageConfig();
// pc.setModuleName("blog"); // 生成到指定模块中
pc.setParent("cn.com");
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 4、策略配置
StrategyConfig strategy = new StrategyConfig();
// 设置要映射的表名(重要,需要修改的地方)
strategy.setInclude("sys_menu", "sys_role", "sys_role_menu", "sys_user", "sys_user_role");
strategy.setNaming(NamingStrategy.underline_to_camel); // 自动转换表名的驼峰命名法
strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 自动转换列名的驼峰命名法
strategy.setEntityLombokModel(true); // 是否使用lombox
strategy.setLogicDeleteFieldName("deleted"); // 配置逻辑删除字段
// 自动填充策略
TableFill gmtCreate = new TableFill("create", FieldFill.INSERT);
TableFill gmtModified = new TableFill("updated", FieldFill.INSERT);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(gmtCreate);
tableFills.add(gmtModified);
strategy.setTableFillList(tableFills);
// 乐观锁
strategy.setVersionFieldName("version");
mpg.setStrategy(strategy);
mpg.execute(); // 执行
}
}
3.3 执行方法,查询运行结果
目录生成前
目录生成后
我们随便打开一个文件查看,可以看到代码已经生成完成。
package cn.com.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author pro
* @since 2021-12-05
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="SysMenu对象", description="")
public class SysMenu implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "父菜单ID,一级菜单为0")
private Long parentId;
private String name;
@ApiModelProperty(value = "菜单URL")
private String path;
@ApiModelProperty(value = "授权(多个用逗号分隔,如:user:list,user:create)")
private String perms;
private String component;
@ApiModelProperty(value = "类型 0:目录 1:菜单 2:按钮")
private Integer type;
@ApiModelProperty(value = "菜单图标")
private String icon;
@ApiModelProperty(value = "排序")
@TableField("orderNum")
private Integer ordernum;
private Date created;
@TableField(fill = FieldFill.INSERT)
private Date updated;
private Integer statu;
}
4.总结
1.引入依赖
2.使用代码生成器
难点在于代码生成器的配置,如果要进一步学习,建议到官网查看详细文档
作者的java学习来自 狂神说 学习视频在blibli,有兴趣的小伙伴可以去学习