使用Java运行MyBatis Generator

    xiaoxiao2021-12-14  21

    使用Java运行MyBatis Generator 下载源码建工程运行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&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这几个包导致的,但如果你不导这几个包,上面写的工具类照样是能运行的。

    转载请注明原文地址: https://ju.6miu.com/read-962922.html

    最新回复(0)