在Java开发中,你一定也想找一个将mysql数据库表自动生成Java实体类,特别是使用了MybatisPlus的框架时,不仅想生成Java实体类,还想自动生成Service类及Mapper接口和Mapper xml文件。Mybatis Plus团队为我们提供了这样一个方便的工具:mybatis-plus-generator,它只要放在maven项目的test目录里,运行main方法即可。
网上有很多不同的版本,由于版本更新快,版本之间可能不一致,有些差异,我当前使用的版本是3.5.3的,目前算是最新的。
第一步:在项目中引入依赖
<!-- 代码自动生成依赖 begin -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
<scope>test</scope>
</dependency>
<!-- velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
<!-- 这里使用test模式,这样引用此工具类的项目不会加入这个依赖包了,打包的时候也不会被打包进去 -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>23.0.0</version>
<scope>test</scope>
</dependency>
<!-- 代码自动生成依赖 end-->
这里只引入了mybatis plus generator工具需要的依赖,实际开发的mybatis 及mybatis plus的依赖根据自己的项目实际情况引入。
第二步: 添加使用mybatis plus generator代码
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.Arrays;
import java.util.List;
/**
* @author 王广帅
* @since 2022/8/19 0:13
*/
public class MyBatisPlusGenerator {
public static void main(String[] args) {
// 要生成的数据库表名
List<String> tableNames = Arrays.asList("account", "admin_account");
// 创建代码生成工具类
FastAutoGenerator generator = create(tableNames);
// 执行生成代码
generator.execute();
}
private static FastAutoGenerator create(List<String> tableNames) {
// 数据库连接地址,
String url = "jdbc:mysql://localhost:3306/virtual-merchant?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC";
// 数据库用户名
String name = "root";
// 数据库密码
String password = "123456";
FastAutoGenerator generator = FastAutoGenerator.create(url, name, password)
// 全局配置
.globalConfig(builder -> {
// 获取生成的代码路径,这里没有写死,是运行时获取的,这样可以防止不同的开发人员来回修改生成路径的问题。
String outputDir = System.getProperty("user.dir") + "/project-dao/src/main/java";
builder.outputDir(outputDir)
.dateType(DateType.ONLY_DATE)
// 生成的类注释中的作者名称,为了统一表示,这里写死了
.author("Auto Generator");
})
// 生成的代码包路径配置
.packageConfig(builder -> {
// 生成的代包公共路径
builder.parent("com.xinyue.dao");
// 生成的mapper xml的存放目录,是在parent路径下面的
builder.xml("mapper")
// 生成的实例类目录
.entity("entity")
// 生成的service目录
.service("service")
// 生成的ampper目录
.mapper("mapper");
}).strategyConfig(builder -> {
// 添加要生成的的数据库表
builder.addInclude(tableNames)
// 启用大写模式
.enableCapitalMode();
// 配置生成的实体类策略,不生成serialVersionID
builder.entityBuilder().disableSerialVersionUID()
// 如果数据库表名带下划线,按驼峰命名法
.columnNaming(NamingStrategy.underline_to_camel)
// 使用lombok
.enableLombok()
// 标记实例类的主键生成方式,如果插入时没有指定,刚自动分配一个,默认是雪花算法
.idType(IdType.ASSIGN_ID)
// 实例类每次生成的时候,覆盖旧的实体类
.enableFileOverride()
// 指定生成的实体类名称
.convertFileName(entityName -> entityName + "Entity")
// 指定生成的service接口名称
.serviceBuilder().convertServiceFileName(entityName -> "IDao" + entityName + "Service")
// 指定生成的serviceImpl的名称
.convertServiceImplFileName(entityName -> "Dao" + entityName + "Service");
}).templateConfig(builder -> {
// 不生成Controller
builder.disable(TemplateType.CONTROLLER);
});
return generator;
}
}
把这个类放在test目录下,需要的时候执行就可以了:
生成的类如下所示:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.sql.Timestamp;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 账户表
* </p>
*
* @author Auto Generator
* @since 2022-08-19
*/
@Getter
@Setter
@TableName("account")
public class AccountEntity {
@TableId(value = "user_id", type = IdType.ASSIGN_ID)
private String userId;
private String accountName;
private String accountPassword;
/**
* 昵称
*/
private String nickname;
/**
* 邮箱
*/
private String email;
/**
* 手机号
*/
private String telephone;
/**
* 用户真实姓名
*/
private String realName;
/**
* 0, 女,1,男
*/
private Byte gender;
/**
* 用户头像,记录是url后面的路径值,不包括域名
*/
private String headIcon;
/**
* 活跃状态:0, 正常,1, 忙碌中
*/
private Byte activeStatus;
/**
* 绑定的微信openId
*/
private String wxOpenId;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
private String street;
/**
* 所属第一行业
*/
private String firstIndustry;
/**
* 所属第二行业
*/
private String secondIndustry;
/**
* 创建时间
*/
private Timestamp createTime;
}