我们都知道,人在学会走路后,就想要跑,会跑了之后想要更快或者更省力,于是便有单车,汽车,动车等应运而生,今天,又是周三自习时间,所以就给大家整理一下程序猿的小单车---mybatis-generator(MBG)和小电瓶车---mybatis-plus-generator,至于更加高级的jeecg-boot和若依的代码生成器(我简称为汽车),等下周三有时间了我再整理,如果感兴趣的也可以去他们的官网看看,至于更高级别的“动车”框架,目前还没接触到,等以后用到了再整理
“汽车”官网:
JEECG官方网站 - 基于BPM的低代码开发平台
RuoYi 若依官方网站
前提说明:
使用“单车”的前提是要具有一定SSM整合基础,使用“电瓶车”则最好是要具备springboot整合SSM的基础,因为不可能走都没走稳就学踩单车吧,另外以下的内容是基于自己平常的练习和开发环境整理的,用的可能不是最新版本,但也足够了,如果想了解最新版本的使用的话,我下面提供了官网链接,可以自行进去查看使用最新版本,使用过程大同小异,我就不多做介绍了
mybatis-generator(MBG)
官网地址:MyBatis Generator Core – Introduction to MyBatis Generator
数据库表准备:
环境准备:
1)Free Mybatis Plugin插件
2)搭建maven项目环境
3)配置pom文件
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.leixiaoqiao</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<!--mybatis代码自动生成插件-->
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<!--配置插件运行时需要的依赖-->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<configuration>
<!--允许移动生成的文件 -->
<verbose>true</verbose>
<!-- 是否覆盖 -->
<overwrite>true</overwrite>
<!-- 代码生成器的配置文件地址 -->
<configurationFile>
src/main/resources/mybatis-generator.xml
</configurationFile>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>
</project>
若导入下面这段代码,右侧maven的plugin报红,则换成下面另外的格式,效果一样
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
4)配置db.properties(数据源相关属性)
---mydb是需要生成单表crud映射文件的数据库表的mysql的数据库名,可自行更改
jdbc.driverClass=com.mysql.jdbc.Driver
#在xml配置文件中,url中的&符号需要转义成&
jdbc.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=
5)配置mybatis-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="db.properties" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<!--是否在生成的注释中包括生成时间戳,默认false,值为true表示不会将时间戳添加到生成的注释中-->
<property name="suppressDate" value="true"/>
<!--默认会将数据库表的字段注释生成-->
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成实体的包名和位置-->
<javaModelGenerator targetPackage="com.leixiaoqiao.entity" targetProject="src/main/java">
<!--开启子包-->
<property name="enableSubPackages" value="true"/>
<!--去除生成java文件名称的首尾空白-->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成mapper映射文件的包名和位置-->
<sqlMapGenerator targetPackage="com.leixiaoqiao.mapper.xml" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成mapper接口的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.leixiaoqiao.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<!--需要逆向生成几张表就配置几个table标签-->
<table tableName="customer" domainObjectName="Customer" ></table>
<!--<table tableName="*"/>-->
</context>
</generatorConfiguration>
启动插件:
运行效果:
错误处理:
如果如图所示位置报错,请点击Alt+Enter将项目语言水平升至6以上
mybatis-plus-generator
官网地址:代码生成器(历史版本) | MyBatis-Plus (baomidou.com)
看了上面我整理的运行效果就知道,MBG只能生成xml映射文件和实体类,并没有生成controller,service功能代码,所以我为什么会说mbg是小单车,而plus是小电瓶车
数据库准备:同上
环境准备:
1)创建maven项目环境
2)配置pom文件
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.leixiaoqiao</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!-- 添加 模板引擎 依赖 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.13</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.13</version>
</dependency>
</dependencies>
</project>
3)配置代码生成类
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
import java.util.List;
// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
// 获取当前系统目录
final String projectPath = System.getProperty("user.dir");
// 拼接出代码最终输出的目录
gc.setOutputDir(projectPath + "/src/main/java");
// 配置开发者信息(可选)(需要修改)
gc.setAuthor("云桥之上");
// 配置是否打开目录,false 为不打开(可选)
gc.setOpen(false);
// 通用查询结果列(映射文件中的<sql>)
gc.setBaseColumnList(true);
// 通用查询结果映射(映射文件中的<BaseResultMap>)
gc.setBaseResultMap(true);
// 实体属性 Swagger2 注解,添加 Swagger 依赖,开启 Swagger2 模式(可选)
//gc.setSwagger2(true);//生成api文档,后期项目中使用
// 重新生成文件时是否覆盖,false 表示不覆盖(可选)
gc.setFileOverride(false);
// 配置主键生成策略,此处为 ASSIGN_ID(可选)
gc.setIdType(IdType.ASSIGN_ID);
// 配置日期类型,此处为 ONLY_DATE(可选)
gc.setDateType(DateType.ONLY_DATE);
// 默认生成的 service 会有 I 前缀(不建议修改)
// gc.setServiceName("%sService");//去除前缀I
mpg.setGlobalConfig(gc);//将全局配置对象注册到代码生成器中
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
// dsc.setSchemaName("public");// 可以直接在 url 中指定数据库名
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
// 配置父包名(需要修改)
pc.setParent("com.leixiaoqiao");
// 配置模块名(需要修改)
//pc.setModuleName("mbg");
// 配置 entity 包名
pc.setEntity("entity");
// 配置 mapper 包名
pc.setMapper("mapper");
// 配置 service 包名
pc.setService("service");
// 配置 controller 包名
pc.setController("controller");
mpg.setPackageInfo(pc);
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
// String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/java/com/leixiaoqiao/mapper/xml/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置(数据库表配置)
StrategyConfig strategy = new StrategyConfig();
// 指定表名(可以同时操作多个表,使用 , 隔开)(需要修改)
// strategy.setInclude("table1","table2","table3"....);
strategy.setInclude("customer");
// 配置数据表与实体类名之间映射的策略(不修改)
strategy.setNaming(NamingStrategy.underline_to_camel);
// 配置数据表的字段与实体类的属性名之间映射的策略(不修改)
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 配置 lombok 模式
strategy.setEntityLombokModel(true);
// 配置 rest 风格的控制器(@RestController),默认是非rest风格(@Controller)
strategy.setRestControllerStyle(true);
// 配置驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
// 配置表前缀,生成实体时去除表前缀
// 此处的表名为 t_user,模块名为 t,去除前缀后剩下为 user。
//可以配置多个
//strategy.setTablePrefix("t_","tb_");
mpg.setStrategy(strategy);
// 执行代码生成操作
mpg.execute();
}
}
运行代码生成器:
运行效果:
错误处理:
控制台报这个,不用管他,不影响代码生成
最后:
以上就是如何配置并使用代码生成器的全部内容,至于mybatis-plus-generator生成的代码,他service和mapper接口里面都是继承父类封装好的接口,所以你看不到他的xml文件以及service方法,因此使用时,需要点进去他的父接口中,自行学习使用其父接口中封装的方法,最后,整理不易,望喜欢
L.X.Q.