1、mybatis-generator
官方文档:MyBatis Generator Core – Introduction to MyBatis Generator
mybatis的依赖。记得要自己看要选什么版本
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.2</version>
</dependency>
<plugins>
<!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.2</version>
</plugin>
</plugins>
在resources创建一个generator的xml配置文件,内容大致如下,参考官方文档
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<properties resource="config.properties"/>
<!--
targetRuntime: 执行生成的逆向工程的版本
MyBatis3Simple: 生成基本的CRUD(清新简洁版)
-->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 数据库的连接信息 -->
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.url}"
userId="${jdbc.user}"
password="${jdbc.password}">
</jdbcConnection>
<!-- javaBean的生成策略-->
<javaModelGenerator targetPackage="${package.name}.entities" targetProject="src/main/java"/>
<!-- SQL映射文件的生成策略 -->
<sqlMapGenerator targetPackage="${package.name}.mapper" targetProject="src/main/java"/>
<!-- Mapper接口的生成策略 -->
<javaClientGenerator targetPackage="${package.name}.mapper"
targetProject="src/main/java" type="XMLMAPPER"/>
<!-- 逆向分析的表 -->
<!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
<!-- domainObjectName属性指定生成出来的实体类的类名 -->
<table tableName="t_pay" domainObjectName="Pay">
<generatedKey column="id" sqlStatement="JDBC"/>
</table>
</context>
</generatorConfiguration>
2、mybatis-plus-generator
依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.5</version>
</dependency>
创建个执行类,mybaisplus有两种生成方法,快速生成和交互式生成,这里的是快速生成
// 数据库连接字段配置
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true";
private static final String JDBC_USER_NAME = "root";
private static final String JDBC_PASSWORD = "root";
// 包名和模块名
private static final String PACKAGE_NAME = "org.example";
private static final String MODULE_NAME = "livestock";
// 表名,多个表使用英文逗号分割
private static final String[] TBL_NAMES = {"t_pay"};
// 表名的前缀,从表生成代码时会去掉前缀
private static final String TABLE_PREFIX = "";
/**
* 执行 run
*/
public static void main(String[] args) throws SQLException {
//获取当前工程路径(这里无需修改)
String projectPath = System.getProperty("user.dir");
/**
* 1.数据库配置(设置数据源)
配置数据库连接以及需要使用的字段
这里配置的是PG数据库,如果是MySQL需要修改
*/
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME,
JDBC_PASSWORD)
.dbQuery(new PostgreSqlQuery())
.typeConvert(new PostgreSqlTypeConvert())
.keyWordsHandler(new PostgreSqlKeyWordsHandler());
FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);
/**
* 2.全局配置
*/
fastAutoGenerator.globalConfig(
globalConfigBuilder -> globalConfigBuilder
//.fileOverride() // 覆盖已生成文件,已被弃用
.disableOpenDir() // 不打开生成文件目录
.outputDir(projectPath + "/src/main/java") // 指定输出目录,注意斜杠的表示
.author("hanbo") // 设置注释的作者
.commentDate("yyyy-MM-dd HH:mm:ss") // 设置注释的日期格式
.dateType(DateType.TIME_PACK) // 使用java8新的时间类型
//.enableSwagger() // 开启swagger文档
);
/**
日期类型 DateType
DateType.ONLY_DATE 使用 java.util.date包下的 Date
DateType.SQL_PACK 使用 java.sql包下的 Date
DateType.TIME_PACK 因为会使用 java.time.LocalDateTime jdk1.8以上才支持 (推荐使用)
*/
/**
* 3.包配置
*/
fastAutoGenerator.packageConfig(
packageConfigBuilder -> packageConfigBuilder
.parent(PACKAGE_NAME) // 设置父包名
// .moduleName(MODULE_NAME) // 设置父包模块名
.entity("entity") // 设置MVC下各个模块的包名
.mapper("mapper")
.service("service")
.serviceImpl("service.impl")
.controller("controller")
.xml( "\\src\\main\\resources\\mapper") // 设置XML资源文件的目录
.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "\\src\\main\\resources\\mapper"))// 设置XML资源文件的目录
);
/**
* 4.策略配置
*/
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder
.enableCapitalMode() // 开启大写命名
.enableSkipView() // 开启跳过视图
.disableSqlFilter() // 禁用sql过滤
.addInclude(TBL_NAMES) // 设置需要生成的表名
.addTablePrefix(TABLE_PREFIX) // 设置过滤表前缀
);
/**
* 4.1 Entity策略配置
*/
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
.enableTableFieldAnnotation() // 生成实体时生成字段的注解,包括@TableId注解等---
.naming(NamingStrategy.underline_to_camel) // 数据库表和字段映射到实体的命名策略,为下划线转驼峰
.columnNaming(NamingStrategy.underline_to_camel)
// .idType(IdType.AUTO) // 全局主键类型为AUTO(自增)
.enableLombok() // 支持lombok开启注解
.logicDeleteColumnName("deleted") // 逻辑删除字段名(数据库)
.logicDeletePropertyName("deleted") // 逻辑删除属性名(实体)
// .addTableFills(new Column("create_time", FieldFill.INSERT)) // 自动填充配置 create_time update_time 两种方式
// .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
.versionColumnName("version") // 开启乐观锁
.disableSerialVersionUID() // 禁用生成 serialVersionUID,默认值:true
.enableChainModel() // 开启实体类链式编程
.formatFileName("%sEntity") // 实体名称格式化为XXXEntity formatFileName("%sEntity")
.enableTableFieldAnnotation()
.enableFileOverride()
);
/**
* 4.2 Controller策略配置
*/
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder()
.enableRestStyle() // 开启生成@RestController控制器
.enableHyphenStyle() // 开启驼峰转连字符 localhost:8080/hello_id_2
);
/**
* 4.3 Service策略配置
格式化service接口和实现类的文件名称,去掉默认的ServiceName前面的I ----
*/
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder()
.formatServiceFileName("I%sService")
.formatServiceImplFileName("%sServiceImpl"));
/**
* 4.4 Mapper策略配置
格式化 mapper文件名,格式化xml实现类文件名称
*/
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder()
.enableMapperAnnotation() // 开启 @Mapper 注解
.formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper"));
/** 5.生成代码
*
*/
// fastAutoGenerator.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
fastAutoGenerator.execute();
}
不懂看官网!!!!!!