下面我将详细讲解如何配合最新的MySQL 8.0.11使用MyBatis Generator,并解决可能会遇到的一些坑。具体步骤如下:
1. 准备工作
在开始之前,我们需要准备一些必要的工具和环境:
- MySQL 8.0.11及以上版本,这里以MySQL 8.0.26为例。
- JDK 8及以上版本。
- MyBatis Generator,这里以版本1.4.0为例。
2. 配置pom.xml
首先,在项目的pom.xml文件中添加如下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
这样就将MySQL驱动和MyBatis Generator的依赖添加到了项目中。
3. 编写generatorConfig.xml
在resources目录下新建generatorConfig.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>
<!-- 数据库驱动 -->
<classPathEntry location="mysql-connector-java-8.0.26.jar" />
<context id="mysql" targetRuntime="MyBatis3">
<!-- 自动识别数据库关键字,默认false,如果设置为true,
根据SqlReservedWords中定义的关键字列表;一般保留默认值,遇到数据库关键字(Java关键字一般不会),
使用自定义类型名来解决 -->
<property name="autoDelimitKeywords" value="true" />
<!-- 数据库连接驱动配置 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=
true&characterEncoding=utf-8"
userId="root"
password="123456"/>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<property name="forceBigDecimals" value="false" />
<!-- 是否创建生成的Java模型对象的链式(setter)方法,返回值是当前对象 -->
<property name="chainModelMethods" value="false" />
<!-- 是否使用BigDecimal,通常不需要 -->
<property name="useBigDecimal" value="false" />
<!-- 实体类中日期类型采用哪种类型,默认情况下是java.util.Date,
但是java.util.Date在序列化后显示的时间是不对的,
解决方法是使用java.time.LocalDateTime -->
<property name="useJSR310Types" value="true" />
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="utf-8" />
<!-- 需要生成的表,%通配任意多个字符,如et_% -->
<table tableName="student" />
</context>
</generatorConfiguration>
此时我们需要注意的是:
标签中的connectionURL需要根据自己的实际情况修改,其中serverTimezone指定时区,useUnicode和characterEncoding指定字符编码。 - 在
标签中,可以根据需要修改自动识别数据库关键字、日期类型、模型方法等相关配置。
4. 运行MyBatis Generator
完成以上步骤后,就可以运行MyBatis Generator生成代码了。
在命令行中输入如下命令:
java -jar mybatis-generator-core-1.4.0.jar -configfile generatorConfig.xml -overwrite
其中-generator-core-1.4.0.jar是MyBatis Generator的jar包名称,-configfile指定generatorConfig.xml文件的路径,-overwrite表示如果已经生成过代码则覆盖。
此时,我们就成功地生成了与student表对应的Java代码。
示例一
假设我们有一个名为student的表,表结构如下:
CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL COMMENT '姓名',
`age` int NOT NULL COMMENT '年龄',
`gender` enum('男','女') DEFAULT '男' COMMENT '性别',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
使用上述配置和命令后,我们可以得到如下Java类:
public class Student {
private Integer id;
private String name;
private Integer age;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender == null ? null : gender.trim();
}
}
示例二
如果我们的表结构中含有自增主键,我们需要在生成Java类时指定主键生成策略。我们可以在generatorConfig.xml文件中加入以下配置:
<generatorConfiguration>
<context id="mysql" targetRuntime="MyBatis3">
<!-- ... -->
<table tableName="student">
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
</table>
</context>
</generatorConfiguration>
这样,在生成Java类时就会自动为表的主键字段添加@GeneratedValue注解:
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
// 其他字段同上
// ...
}
这样就可以顺利地与MySQL 8.0.11配合使用MyBatis Generator了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解mybatis.generator配上最新的mysql 8.0.11的一些坑 - Python技术站