Mybatis反向工程的使用

为什么要使用反向工程,因为,快啊。运行一下就可以自动生成,实现,一堆表的增删查改,等于多了个人帮忙工作,为什么不呢 ?

        但与别的工具一样,自动生成的东西总是有方便的地方,也会有麻烦的地方。所以,使用前要留点心眼。要不工具变负累,对个人还好 对团队就变*了。

        因此,下面的教程除了说如何使用,还会说 一个比较重要的技巧和心得,如果有更好的方法,或我说的有什么不对,请直接指出。谢谢

如有问题可以在下面留言,但我不一定有时间回复。

 

首先,用eclipse 建一个maven 项目:

Mybatis反向工程的使用建一个maven 项目

   

Mybatis反向工程的使用打好勾点next

 

Mybatis反向工程的使用填好点finish

 

Mybatis反向工程的使用

这时我们的项目结构是这个样子的

 

打开pom.xml 文件

把如下内容复制进去:

<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>cc.com</groupId>

  <artifactId>autoMybatis</artifactId>

  <version>0.0.1-SNAPSHOT</version>

   <dependencies>

  <!-- mybatis依赖 -->

      <dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.5</version>

</dependency>

<!-- 反向工程支持包 -->

         <dependency>

             <groupId>org.mybatis.generator</groupId>

             <artifactId>mybatis-generator-core</artifactId>

             <version>1.3.2</version>

         </dependency>

       <!-- mysql 驱动 -->

        <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>5.1.38</version>

    </dependency>

  </dependencies>

</project>

 

然后新建如下包:

Mybatis反向工程的使用

mybatis.dao     (用于放mapper 的java 接口)

mybatis.entity  (用于放实体对象)

 

在src/main/resources 下新建目录mybatis及它的子目录mapper

                                    新建baseInfoGeneratorConfig.xml文件

                                    新建jdbc.properties文件

Mybatis反向工程的使用

       拷贝如下内容进jdbc.properties 要改为正确地址,用户名, 密码

    

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/base_info?useSSL=false

jdbc.username=root

jdbc.password=自已改密码

    拷如下内容进入baseInfoGeneratorConfig.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="jdbc.properties" />      

    <context id="sqlserverTables" targetRuntime="MyBatis3">    

        <!-- 生成的pojo,将implements Serializable-->    

        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>    

        <commentGenerator>    

            <!-- 是否去除自动生成的注释 true:是 : false:否 -->    

            <property name="suppressAllComments" value="true" />    

        </commentGenerator>    

    

        <!-- 数据库链接URL、用户名、密码 -->    

        <jdbcConnection driverClass="${jdbc.driver}"    

                        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>    

    

        <!--     

        生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,    

        也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下    

        -->    

        <!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN">-->    

        <javaModelGenerator targetPackage="mybatis.entity" targetProject="./src/main/java">    

            <property name="enableSubPackages" value="true"/>    

            <!-- 从数据库返回的值被清理前后的空格  -->    

            <property name="trimStrings" value="true" />    

        </javaModelGenerator>    

    

        <!--对应的mapper.xml文件  -->    

        <sqlMapGenerator targetPackage="mybatis.mapper" targetProject="./src/main/resources">    

            <property name="enableSubPackages" value="true"/>

        </sqlMapGenerator>    

    

        <!-- 对应的Mapper接口类文件 -->    

        <javaClientGenerator type="XMLMAPPER" targetPackage="mybatis.dao" targetProject="./src/main/java">

            <property name="enableSubPackages" value="true"/>    

        </javaClientGenerator>    

    

    

        <!--  你可以改成一张数据库中真正存在的表

         schema 指的是schema,在mysql 中我发现填错也能跑。tableName 是表名 ObjectName 是对象名-->

        <table schema="base_info" tableName="user_info" domainObjectName="userInfo"    

               enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"    

               enableSelectByExample="false" selectByExampleQueryId="false" >    

            <property name="useActualColumnNames" value="false"/>    

        </table>    

    </context>    

</generatorConfiguration>  

 

上面的都搞好 

现在要写一下代码了

在根目录下建一个 GeneratorSqlmap.java 的JAVA 类

Mybatis反向工程的使用

 

然后把以下内容覆盖 GeneratorSqlmap.java 文件

 

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 GeneratorSqlmap {

public void generator(String generatorConfigFilePath) throws Exception{

List<String> warnings = new ArrayList<String>();

boolean overwrite = true;

Class.forName("com.mysql.jdbc.Driver");

//指定 ****配置文件

File configFile = new File(generatorConfigFilePath); 

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 {

GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();

//这里要填对配置文件路径

generatorSqlmap.generator("src/main/resources/baseInfoGeneratorConfig.xml");

} catch (Exception e) {

e.printStackTrace();

}

System.exit(0);

}

 

}

 

 

最后运行,GeneratorSqlmap.java ,然后刷新一下项目,就可以得到非常漂亮的,表的entity,mapper interface,mapper xml

 

 

Mybatis反向工程的使用

 

 

      以上的代码可以在下面的github 链接https://github.com/asdf101221/spring-boot-mybatis-demo/tree/master/automybatis

中找到

 

现在我们分享一个,能让自动生成和手工修改和平共存的方法。

为什么要和平共存,因为,在数据库表中要加或减一个字段,重复自动生成有可能覆盖掉原来的。

 

这里有个经过实验的方案,首先在我们生成完第一次没有问题后,把

baseInfoGeneratorConfig.xml 中的

生成pojo(entity 你爱叫什么叫什么)

 <!--     

        生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,    

        也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下    

        -->    

        <!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN">-->    

        <javaModelGenerator targetPackage="mybatis.entity" targetProject="./src/main/java">    

            <property name="enableSubPackages" value="true"/>    

            <!-- 从数据库返回的值被清理前后的空格  -->    

            <property name="trimStrings" value="true" />    

        </javaModelGenerator>    

还有生成接口的

<!-- 对应的Mapper接口类文件 -->    

        <javaClientGenerator type="XMLMAPPER" targetPackage="mybatis.dao" targetProject="./src/main/java">

            <property name="enableSubPackages" value="true"/>    

        </javaClientGenerator>    

的注掉

然后,不要修改系统自动生成的 mapper.xml

Mybatis反向工程的使用

 

(可以为配置文件中改个特别一点的名字(例如带上sys),跟团队的成员说一下就可以了。

然后,别外写一个XML  mapper 用于开发 。

Mybatis反向工程的使用

 

只要namespace 是相同的,还是会在对应的接口中生成

例如,我们在新的xml文件中这样写Mybatis反向工程的使用

 

只需要在系统生成的JAVA接口中增加:

Mybatis反向工程的使用

 

这样一来,如果数据库需要增加字段。只需简单的三步就可以。

一,把系统生成的配置文件删了。

二,运行自动生成。

三,把新加的字段在对应的pojo(或叫entity 中增加)

就可以,很好的把自动生成和手工修改做出分离。同时也会减少很多不应该出现的错误。