[mybatis]逆向工程

前言

MyBatis逆向工程需要用到的就是MyBatis官方提供的MyBatis Generator(MBG)。MBG是MyBatis和iBATIS的代码生成器,它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。MBG对简单CRUD(增删改查)的大部分数据库操作产生重大影响。但是您仍然需要为连接查询或存储过程手动编写SQL和对象代码。

准备工作

本文中使用到的一些Jar

  1. log4j-1.2.16.jar
  2. mybatis-3.2.3.jar
  3. mybatis-generator-core-1.3.2.jar
  4. mysql-connector-java-5.1.28-bin.jar
  5. ojdbc14.jar

环境搭建

首先看下我的工程结构吧

1

需要修改的几个地方

  1. GeneratorSqlmap.java中的path(generatorConfig.xml的位置)
  2. generatorConfig.xml中的数据库连接

下面是我的文件详细配置

log4j.properties

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

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">
        <!--pojo生成toString-->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://192.168.211.133:3306/mydb"
                        userId="root"
                        password="root">
        </jdbcConnection>
        <!--
        <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
            connectionURL="jdbc:oracle:thin:@192.168.211.133:1521:mydb"
            userId="root"
            password="root">
        </jdbcConnection>
        -->

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

        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="com.mybatis.pojo"
                            targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- targetProject:mapper.xml映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- targetPackage:mapper.java接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.mybatis.mapper"
                             targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 指定数据库表,生成所有的方法 -->
        <!--
        <table schema="" tableName="car"></table>
        <table schema="" tableName="user"></table>
        -->

        <!--
            指定生成的表,这里只生成基本的CRUD方法
            tableName : 指定生成的表名, % 指生成所有的表
            domainObjectName : 对应的POJO名称 (在生成单个table时使用,tableName=%时勿用)
        -->
        <table tableName="%" enableSelectByExample="false" 
               enableDeleteByExample="false"
               enableCountByExample="false" enableUpdateByExample="false"
               selectByExampleQueryId="false">

            <!--
                1> false : 按照驼峰风格生成字段
            -->
            <property name="useActualColumnNames" value="false"/>

            <!--
                2> POJO是否继承BaseEntity,BaseEntity不会自动生成,需要自己代码生成
            -->
            <!--<property name="rootClass" value="com.mybatis.pojo.BaseEntity" />-->

            <!--
                3> 生成pojo、mapper.xml时不生成某些字段,column里指的是数据库表的字段
            -->
            <!--
            <ignoreColumn column="id"/>
            <ignoreColumn column="user_name"/>
            -->

            <!--
                4> 有些表的字段需要指定java类型
            -->
            <!--<columnOverride column="id" javaType="Long" />-->

            <!--
                5>
                该元素会在根据表中列名计算对象属性名之前先重命名列名,
                非常适合用于表中的列都有公用的前缀字符串的时候,
                比如列名为:SYS_ID,SYS_NAME,SYS_EMAIL,SYS_ADDRESS等;
                那么就可以设置searchString为"^SYS_",并使用空白替换,
                那么生成的Bean对象中的属性名称就不是sysId,sysName等,
                而是先被替换为ID,NAME,EMAIL,然后变成属性:id,name,email;

                注意:MBG是使用java.util.regex.Matcher.replaceAll
                    来替换searchString和replaceString的,
                    如果使用了columnOverride元素,该属性无效;
            -->
            <!--<columnRenamingRule searchString="^SYS_" replaceString=""/>-->

        </table>

    </context>
</generatorConfiguration>

GeneratorSqlmap.java

public class GeneratorSqlmap {

    public void generator() throws Exception{
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        String path ="E:\\java\\generatorSqlmapCustom\\src\\generatorConfig.xml";
        //指定逆向工程配置文件
        File configFile = new File(path); 
        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();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

运行GeneratorSqlmap.java的main方法即可~

猜你喜欢

转载自blog.csdn.net/Konaji/article/details/81487609
今日推荐