1.简介
在mybatis的项目中,最繁琐的就是制作映射文件,还有一个就是要为数据库中数据表手动做一个实体类。有一个简便方法就是让mybatis根据数据库连接自动生成映射文件和实体类,这就是mybatis逆向工程。
2.应用场景
通常逆向工程单独作为一个项目,把所需的映射文件和实体类自动生成后再复制到项目中,而且自动生成的映射文件往往还需要再根据真实的项目需求进行修改。
3.博主的个人理解
通俗的理解就是通过mybatis配置文件来自动生成数据库中数据表对应的实体类和配置文件。
试想一下,若某一个数据表中的字段特别的多,那么创建其对应的实体类和映射文件将特别的繁琐,所以此时若通过mybatis的逆向工程来自动生成实体类和映射文件将大大减少程序员的工作量
应用实例:已有数据库studentsdb,里面有数据表students,通过逆向工程自动生成映射文件和实体类。
需要用到的数据库和数据表
create database studentsdb;
use studentsdb;
drop table students;
create table students(
s_id int primary key,
s_class varchar(20),
s_name varchar(30),
s_sex varchar(5),
s_age int,
s_mobile int,
s_address varchar(30)
)
select * from students;
项目目录结构图
Test.java
package com.xiaochen.test;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
public class Test {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 指定逆向工程配置文件
File confingFile = new File("src/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(confingFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator mg = new MyBatisGenerator(config, callback, warnings);
mg.generate(null);
}
public static void main(String[] args) throws Exception {
try {
Test test = new Test();
test.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
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>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/studentsdb" userId="root"
password="123abc">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
和 NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成实体类的位置 -->
<javaModelGenerator targetPackage="com.xiaoche.entity"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.xiaochen.dao"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.xiaochen.dao" targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<!-- <table schema="" tableName="emp"></table> -->
<!-- 要对那些数据表进行生成操作,必须要有一个. -->
<table schema="mybatis" tableName="students" domainObjectName="Students"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"> </table>
<!-- <table schema="mybatis" tableName="dept" domainObjectName="Dept"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"> </table> -->
</context>
</generatorConfiguration>
运行结果图
运行前
运行后,刷新项目目录结构图
可以发现,通过运行Test类可以自动生成数据表students对应的实体类和mapper配置文件,这样一来只需稍微做一些修改就可以得到自己需要得实体类和mapper配置文件