什么是逆向工程

MyBatis逆向工程可以方便的从数据库中将表自动映射到JAVA POJO类,并同时生成Mapper.xml和Mapper接口,方便实用。
MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po…)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。

jar包

需要使用逆向工程jar: mybatis-generator-core-1.3.2.jar
mybatis 的jar:mybatis-3.4.5.jar
数据库驱动jar:mysql-connector-java-5.1.7-bin.jar


案例

1)新建java project 为mybatisGenerator

使用逆向工程,我们最好是新建一个Java Project,而不要直接在项目工程中进行,以免自动生成的文件名冲突而造成覆盖。在新建的项目中生成代码,然后拷贝即可。

2)导入jar包

在项目下新建lib,把jar拷贝进去

java逆向工程是什么 逆向工程生成代码_逆向工程

build path:

java逆向工程是什么 逆向工程生成代码_java_02

3)新建一个GerenatorConfig.xml配置文件

新建配置文件,主要配置以下信息:

1、连接数据库,这是必须的,要不然怎么根据数据库的表生成代码呢?
2、指定要生成代码的位置,要生成的代码包括po类,mapper.xml和mapper.java
3、指定数据库中想要生成哪些表

<?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="MybatisGenerator" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释,true是,false否 -->
            <property name="supressAllComments" value="true" />
        </commentGenerator>

        <!-- 数据库连接信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/mybatis"
            userId="root" password="123456">
        </jdbcConnection>

       <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- 生成的po实体类的存放位置 -->
        <javaModelGenerator targetPackage="com.oak.po"
            targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- 生成的mapper映射文件(XML文件)的存放位置 -->
        <sqlMapGenerator targetPackage="com.oak.mapper" targetProject=".\src">
        	<!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <!-- 生成的mapper接口(JAVA文件)的存放位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.oak.mapper" targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 指定数据库表 -->
        <table tableName="student" />
        <table tableName="grade" />
      
        <!-- 有些表的字段需要指定java类型
         <table schema="" tableName="">
            <columnOverride column="" javaType="" />
        </table> -->

    </context>
</generatorConfiguration>

4)新建一个class为MyGenerator.java

此类主要是用来加载配置文件,执行生成代码:

public class MyGenerator {
	 public void generate() throws Exception {
	        List<String> warnings = new ArrayList<String>();
	        boolean overwrite = true;
	        File configFile = new File("GerenatorConfig.xml");
	        ConfigurationParser cp = new ConfigurationParser(warnings);
	        Configuration config = cp.parseConfiguration(configFile);
	        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
	        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
	        myBatisGenerator.generate(null);
	    }

	    public static void main(String[] args) throws Exception {
	        try {
	            MyGenerator myGenerator = new MyGenerator();
	            myGenerator.generate();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }
}
5)执行java类,查看结果

java逆向工程是什么 逆向工程生成代码_jar_03

6)不要忘了刷新项目!!!