使用Java运行MyBatis Generator

使用Java运行MyBatis Generator

使用mybatis时经常要写与数据库表对应的匹配表结构的Java POJO(javabean)及SQL 映射 XML 文件(mapper),为了减少这种烦躁的工作,mybatis generator应运而生。下文记录了我从下载generator源码到生成一个mysql用下所有表的过程。


下载源码

下载地址:https://github.com/mybatis/generator
文档地址:http://www.mybatis.org/generator


建工程

下载后的文件结构如下图:
下载后的文件结构
1.打开eclipse,创建一个java工程,假设名字叫mgb-tools
2.复制core源码。把下载后的generator-master.zip解压,复制generator-master\core\mybatis-generator-core\src\main\java下的所有到自己的mgb-tools/src目录下,再把generator-master\core\mybatis-generator-core\src\main\resources下的资源文件复制到src对应的目录下。
3.源码复制完后结构如下:
源码复制完后结构
红色部分为资源文件。
org.mybatis.generator包就是核心core源码了


运行mybatis generator

1.在工程目录下建一个lib包,放入mysql驱动jar包
2.创建一个资源目录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-5.1.22.jar" />
    <context id="MySQLTables" targetRuntime="MyBatis3"
        defaultModelType="flat">

        <property name="beginningDelimiter" value="`" />
        <property name="endingDelimiter" value="`" />

        <commentGenerator>
            <property name="suppressDate" value="true" />
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&amp;characterEncoding=UTF-8"
            userId="root" password="123456">
        </jdbcConnection>


        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <javaModelGenerator targetPackage="com.syz.test.bean"
            targetProject="src">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="false" />
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="com.syz.test.mapper"
            targetProject="src">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <table tableName="%" enableCountByExample="false"
            enableUpdateByExample="false" enableDeleteByExample="false"
            enableSelectByExample="false" selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

3.创建一个com.syz.tool.GeneratorTool工具类,用来生成javabean和mapper

package com.syz.tool;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.api.ProgressCallback;
import org.mybatis.generator.api.VerboseProgressCallback;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

public class GeneratorTool {
    public static void main(String[] args) {
        shell();
    }

    private static void shell() {
        List<String> warnings = new ArrayList<String>();
        try {
            String configFilePath = System.getProperty("user.dir")
                    .concat("/resources/generatorConfig.xml");
            System.out.println("加载配置文件===" + configFilePath);
            boolean overwrite = true;
            File configFile = new File(configFilePath);
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
                    callback, warnings);
            ProgressCallback progressCallback = new VerboseProgressCallback();
            // myBatisGenerator.generate(null);
            myBatisGenerator.generate(progressCallback);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}

4.运行工具类
它会报一个错误

java.lang.RuntimeException: Cannot resolve classpath entry: mysql-connector-java-5.1.22.jar
    at org.mybatis.generator.internal.util.ClassloaderUtility.getCustomClassloader(ClassloaderUtility.java:52)
    at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:245)
    at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:139)
    at com.syz.tool.GeneratorTool.shell(GeneratorTool.java:34)
    at com.syz.tool.GeneratorTool.main(GeneratorTool.java:16)
意思是找不到mysql的驱动包,此时有两个方法解决这个问题:
1.使用绝对路径指定jar包
把generatorConfig.xml里的 <classPathEntry location="mysql-connector-java-5.1.22.jar" />改成 <classPathEntry location="D:\workspace\mgb-tools\lib\mysql-connector-java-5.1.22.jar" />之类的绝对路径。
2.修改源码中的用户自定义类加载器的classPathEntry地址
打到 org.mybatis.generator.internal.util.ClassloaderUtility类下的 getCustomClassloader(List entries)方法,加上以下语句:
classPathEntry = System.getProperty("user.dir").concat("/lib/").concat(classPathEntry);
。下图的红框部分为加上的语句:
加上以下语句

使用上面2的方法后,再运行,运行正常,生成了javabean及mapper,打印如下信息:
(注:mysql库中有表[a,aa,b,bb,student,subject,student_score])

加载配置文件===D:\workspace\mgb-tools/resources/generatorConfig.xml
加载MYSQL驱动======D:\workspace\mgb-tools/lib/mysql-connector-java-5.1.22.jar
Connecting to the Database
Introspecting table %
Generating Record class for table subject
Generating SQL Map for table subject
Generating Record class for table a
Generating SQL Map for table a
Generating Record class for table b
Generating SQL Map for table b
Generating Record class for table student_score
Generating SQL Map for table student_score
Generating Record class for table student
Generating SQL Map for table student
Generating Record class for table aa
Generating SQL Map for table aa
Generating Record class for table bb
Generating SQL Map for table bb
Saving file SubjectMapper.xml
Saving file AMapper.xml
Saving file BMapper.xml
Saving file StudentScoreMapper.xml
Saving file StudentMapper.xml
Saving file AaMapper.xml
Saving file BbMapper.xml
Saving file Subject.java
Saving file A.java
Saving file B.java
Saving file StudentScore.java
Saving file Student.java
Saving file Aa.java
Saving file Bb.java

5.生成文件结果
生成文件结果
6.打印信息与是否覆盖

myBatisGenerator.generate(null);

不会打印冗余信息
因为它会创建一个NullProgressCallback

if (callback == null) {
   callback = new NullProgressCallback();
}

想要看到冗余信息就要创建一个VerboseProgressCallback,它是NullProgressCallback的子类。
new DefaultShellCallback(overwrite)时,如果是false,第二次运行工具生成文件将不覆盖原文件,此处建议设置为true。


总结

使用起来很简单,主要是要有数据库驱动包,xml配置文件(至于怎么配置,网上有很多介绍,此处就不说了),及MyBatisGenerator的构建,然后用它的generate进行文件生成。
注:如果项目显示报错,是缺少apache-ant-1.8.2.jar,hamcrest-core-1.1.jar,junit.jar,log4j-1.2.17.jar这几个包导致的,但如果你不导这几个包,上面写的工具类照样是能运行的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值