序号 | 类型 | 地址 |
1 | MySQL | MySQL操作之概念、SQL约束(一) |
2 | MySQL | MySQL操作之数据定义语言(DDL)(二) |
3 | MySQL | MySQL操作之数据操作语言(DML)(三) |
4 | MySQL | MySQL操作之数据查询语言:(DQL)(四-1)(单表操作) |
5 | MySQL | MySQL操作之数据查询语言:(DQL)(四-2)(多表查询) |
6 | MySQL | MySQL操作之数据控制语言:(DC)(五) |
7 | MySQL | MySQL操作之数据库函数 |
8 | MySQL | MySQL管理之数据类型 |
9 | MySQL | MySQL管理之索引 |
10 | MySQL | MySQL管理之事务管理 |
11 | MySQL | MySQL管理之存储过程 |
12 | MySQL | MySQL管理之视图 |
13 | MySQL | MySQL管理之数据备份与还原 |
14 | MySQL | Linux(centos 7.5)服务器安装MySQL |
15 | MyBatis | MyBatis从入门到多表关联 |
16 | MyBatis | MyBatis常用方法 |
17 | MyBatis | Mybatis逆向工程的使用(附文件地址) |
18 | MyBatis | spring boot连接Mybatis数据库的配置文件(MySql、SQLserver、Oracle) |
19 | MyBatis-Plus | Mybatis-Plus使用案例(包括初始化以及常用插件) |
20 | MyBatis-Plus | Mybatis-Plus(Service CRUD 接口) |
21 | MyBatis-Plus | Mybatis-plus 4种条件构造器方式 |
22 | MyBatis-Plus | Mybatis-Plus 执行自定义SQL |
23 | MyBatis-Plus | MyBatis-plus配置自定义SQL(执行用户传入SQL) |
24 | MyBatis-Plus | Mybatis-Plus(连接Hive) |
25 | MyBatis-Plus | Mybatis-Plus 代码生成器 |
一、新版代码生成器
1、项目案例
https://download.csdn.net/download/weixin_44624117/68253214
2、需要更新位置
2.1 数据库连接信息
<1> 数据库连接信息 ====================================== String url = "jdbc:mysql://127.0.0.1:3306/test"; String username = "lydms"; String password = "test01";
2.2 代码生成位置
<2> 代码生成位置 ============================================== .outputDir("D://generator/test"); // 指定输出目录
2.3包名、项目名、mapper路径
<3> 包名、项目名、mapper路径 ============================================== builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名 .moduleName("system") // 设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://generator/test/mapper")); // 设置mapperXml生成路径
2.4 生成的表名
<4> 生成的表名 ====================================================== builder.addInclude("lydms_test") // 设置需要生成的表名
3、项目目录结构
- 数据库配置(DataSourceConfig)
- 全局配置(GlobalConfig)
- 包配置(PackageConfig)
- 模板配置(TemplateConfig)
- 注入配置(InjectionConfig)
- 策略配置(StrategyConfig)
6.1 Entity 策略配置
6.2 Controller 策略配置
6.3 Service 策略配置
6.4 Mapper 策略配置
4、完整代码
package com.baomidou.mybatisplus.generator.samples; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.sql.SQLException; import java.util.Collections; /** * 快速生成 * * @author lydsm * @since 2021-12-21 */ public class FastAutoGeneratorTest { /** * 执行 run */ public static void main(String[] args) throws SQLException { // <1> 数据库连接信息 ============================================== String url = "jdbc:mysql://127.0.0.1:3306/test"; String username = "lydms"; String password = "test01"; FastAutoGenerator.create(url, username, password) // 1.全局配置 .globalConfig(builder -> { builder .author("lydms") // 设置作者 // .enableSwagger() // 开启 swagger 模式 .fileOverride() // 覆盖已生成文件 // <2> 代码生成位置 ============================================== .outputDir("/Users/mlamp/IdeaProjects/generator/auto-mybatis-new/src/main/java/com/baomidou/mybatisplus/generator/test"); // 指定输出目录 }) // 2.包配置(PackageConfig) .packageConfig(builder -> { // <3> 包名、项目名、mapper路径 ============================================== builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名 .moduleName("system") // 设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "/Users/mlamp/IdeaProjects/generator/auto-mybatis-new/src/main/resources/mapper")); // 设置mapperXml生成路径 }) // 3.模板配置(TemplateConfig) .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 // 4.注入配置(InjectionConfig) // .injectionConfig( // builder -> { // builder.customMap(Collections.singletonMap("test", "baomidou")); // } // ) // 5.策略配置(StrategyConfig) .strategyConfig(builder -> { // <4> 生成的表名 ====================================================== builder.addInclude("lydms_test") // 设置需要生成的表名 // 5.1 Entity 策略配置 .entityBuilder() .enableLombok() //开启 lombok 模型 .enableTableFieldAnnotation() //开启生成实体时生成字段注解 .naming(NamingStrategy.underline_to_camel) //数据库表映射到实体的命名策略 .columnNaming(NamingStrategy.underline_to_camel) //数据库表字段映射到实体的命名策略 // 5.2 Controller 策略配置 .controllerBuilder() .enableRestStyle() //开启生成@RestController 控制器 // 5.3 Service 策略配置 .serviceBuilder() // 5.4 Mapper 策略配置 .mapperBuilder() .enableBaseResultMap(); //启用 BaseResultMap 生成 // .enableBaseColumnList(); //启用 BaseColumnList }) .execute(); } }
二、新版自定义模板生成(从代码角度指定生成样例)
1、项目案例
https://download.csdn.net/download/weixin_44624117/68977723
2、原理
其生成是取的resource中的模板进行生成的。
指定enableLombok() 模型生成的注解的类型
生成的文件
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("lydms_test_conf") public class LydmsTestConf { @TableId(value = "id", type = IdType.AUTO) private String id; @TableField("conf_id") private String confId; @TableField("conf_value") private String confValue; @TableField("create_time") private String createTime; @TableField("update_time") private String updateTime; }
三、旧版代码生成器
1、pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.lydms</groupId> <artifactId>auto-mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>auto-mybatis</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--mybatis-plus的springboot支持--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、执行文件代码
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringUtils; 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.Scanner; public class MysqlGenerator { /** * 读取控制台内容 * * @param tip * @return */ 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 (StringUtils.isNotEmpty(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } /** * RUN THIS * * @param args */ public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 1、代码路径(setAuthor、setOutputDir) GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/auto-mybatis/src/main/java"); gc.setAuthor("lydms"); gc.setOpen(false); mpg.setGlobalConfig(gc); // 数据源配置 2、数据库连接信息 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://10.128.99.02:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("root"); mpg.setDataSource(dsc); // 包配置 3、模块名 PackageConfig pc = new PackageConfig(); pc.setModuleName(scanner("模块名")); pc.setParent("com.lydms.automybatis"); mpg.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; List<FileOutConfig> focList = new ArrayList<>(); focList.add(new FileOutConfig("/templates/mapper.xml.ftl") { @Override public String outputFile(TableInfo tableInfo) { // 自定义输入文件名称 return projectPath + "/auto-mybatis/src/main/resources/mapper/" + pc.getModuleName() + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); mpg.setTemplate(new TemplateConfig().setXml(null)); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); //strategy.setSuperEntityClass("com.baomidou.mybatisplus.samples.generator.common.BaseE ntity"); strategy.setEntityLombokModel(true); //strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.B aseController"); strategy.setInclude(scanner("表名")); strategy.setSuperEntityColumns("id"); strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有! mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } }
3、需要修改的位置
一共需要修改三个位置。
- 代码路径
// 全局配置 1、代码路径(setAuthor、setOutputDir) GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/auto-mybatis/src/main/java"); gc.setAuthor("lydms"); gc.setOpen(false); mpg.setGlobalConfig(gc);
- 数据库连接信息(数据库连接地址和账号密码)
// 数据源配置 2、数据库连接信息 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://10.128.99.02:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("root"); mpg.setDataSource(dsc);
- 模块名称
// 包配置 3、模块名 PackageConfig pc = new PackageConfig(); pc.setModuleName(scanner("模块名")); pc.setParent("com.lydms.automybatis"); mpg.setPackageInfo(pc);
4、各配置与项目位置关系
5、测试
启动之前项目目录结构:
需要输入模块名和数据库表名:
请输入模块名: test 请输入表名: account 15:01:53.868 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...==========================
生成的文件结果:
6、项目源码包
https://download.csdn.net/download/weixin_44624117/20450700
四、IDEA代码生成器
1、快速使用
生成文件
2、参数解析
- Comment
- toString/hashCode/equals
- Lombok
- Actual Column
- Actual Column Annotation
- JSR310: Date API
- Model
- Model
是否添加Model文件
- Comment
未添加:
/** * @TableName my_user */ @TableName(value ="my_user") public class MyUser implements Serializable { private Integer id; private String name; }
添加后:
/** * 用户表 * @TableName my_user */ @TableName(value ="my_user") public class MyUser implements Serializable { /** * ID */ private Integer id; /** * 名称 */ private String name; }
- toString/hashCode/equals
- Lombok
增加Lombok
相关配置
- Actual Column
<resultMap id="BaseResultMap" type="generator.domain.MyUser"> <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/> <result property="update_time" column="update_time" jdbcType="TIMESTAMP"/> </resultMap>
public class MyUser implements Serializable { /** * 创建时间 */ private Date create_time; /** * 更新时间 */ private Date update_time; }
- Actual Column Annotation
<resultMap id="BaseResultMap" type="generator.domain.MyUser"> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> </resultMap>
public class MyUser implements Serializable { /** * 创建时间 */ @TableField(value = "create_time") private Date createTime; /** * 更新时间 */ @TableField(value = "update_time") private Date updateTime; }
- JSR310: Date API
Date
转为LocalDateTime
:
/** * 创建时间 */ @TableField(value = "create_time") private LocalDateTime createTime; /** * 更新时间 */ @TableField(value = "update_time") private LocalDateTime updateTime;