mybatis逆向工程利用mybatis-generator-core自动生成代码

本文目标:介绍如何使用 mybatis-generator-core-1.3.2.jar 生成数据表的持久类(po)和映射类(mapper.java)和映射文件(mapper.xml)。因为当我们的数据表和字段都比较多的时候,如果让我们手动生成这些,会比较繁琐。所以我们不得不通过逆向工程来生成我们需要的东西,当然,过程也比较简单。

一、需要的文件

  • 生成代码需要的主jar包: mybatis-generator-core-1.3.2.jar
  • mybatis jar包: mybatis-3.4.4.jar
  • mysql连接: mysql-connector-java-5.1.41-bin.jar
  • 配置文件: generatorConfig.xml (下图没有显示,我是放在 D 盘根目录)
  • 运行文件:generatorConfig.java
如下图:总共必须5个文件 因为我们是给 SpringMVC_Mybatis 课程准备,所以这里也新建了 com.liuyanzhao.ssm 包 记得把 jar 包导入环境    

二、代码如下

1、GeneratorSqlmap.java   运行程序的作用 代码也可以参考这里:http://www.mybatis.org/generator/running/runningWithJava.html
  1. import org.mybatis.generator.api.MyBatisGenerator;
  2. import org.mybatis.generator.config.Configuration;
  3. import org.mybatis.generator.config.xml.ConfigurationParser;
  4. import org.mybatis.generator.internal.DefaultShellCallback;
  5. import java.io.File;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class GeneratorSqlmap {
  9.     public void generator() throws Exception{
  10.         List<String> warnings = new ArrayList<String>();
  11.         boolean overwrite = true;
  12.         //File configFile = new File("generatorConfig.xml");似乎无效
  13.         File configFile = new File("D:\\generatorConfig.xml");
  14.         ConfigurationParser cp = new ConfigurationParser(warnings);
  15.         Configuration config = cp.parseConfiguration(configFile);
  16.         DefaultShellCallback callback = new DefaultShellCallback(overwrite);
  17.         MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
  18.         myBatisGenerator.generate(null);
  19.     }
  20.     public static void main(String[] args) throws Exception {
  21.         try {
  22.             GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
  23.             generatorSqlmap.generator();
  24.         } catch (Exception e) {
  25.             e.printStackTrace();
  26.         }
  27.     }
  28. }
请注意第15行部分,不知道为什么 File 无法读取到相对路径的文件,很是纳闷。所以,我这里把 generatorConfig.xml 放到了 D 盘根目录   2、generatorConfig.xml 这个文件也可以参考:http://www.mybatis.org/generator/configreference/xmlconfig.html
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3.         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6.     <context id="testTables" targetRuntime="MyBatis3">
  7.         <commentGenerator>
  8.             <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  9.             <property name="suppressAllComments" value="true" />
  10.         </commentGenerator>
  11.         <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
  12.         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
  13.                         connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
  14.                         password="">
  15.         </jdbcConnection>
  16.         <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
  17.             connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
  18.             userId="yycg"
  19.             password="yycg">
  20.         </jdbcConnection> -->
  21.         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal -->
  22.         <javaTypeResolver>
  23.             <property name="forceBigDecimals" value="false" />
  24.         </javaTypeResolver>
  25.         <!-- targetProject:生成PO类的位置,重要!! -->
  26.         <javaModelGenerator targetPackage="com.liuyanzhao.ssm.po"
  27.                             targetProject="Mybatis_Generator/src">
  28.             <!-- enableSubPackages:是否让schema作为包的后缀 -->
  29.             <property name="enableSubPackages" value="false" />
  30.             <!-- 从数据库返回的值被清理前后的空格 -->
  31.             <property name="trimStrings" value="true" />
  32.         </javaModelGenerator>
  33.         <!-- targetProject:mapper映射文件生成的位置,重要!! -->
  34.         <sqlMapGenerator targetPackage="com.liuyanzhao.ssm.mapper"
  35.                          targetProject="Mybatis_Generator/src">
  36.             <property name="enableSubPackages" value="false" />
  37.         </sqlMapGenerator>
  38.         <!-- targetPackage:mapper接口生成的位置,重要!! -->
  39.         <javaClientGenerator type="XMLMAPPER"
  40.                              targetPackage="com.liuyanzhao.ssm.mapper"
  41.                              targetProject="Mybatis_Generator/src">
  42.             <property name="enableSubPackages" value="false" />
  43.         </javaClientGenerator>
  44.         <!-- 指定数据库表,要生成哪些表,就写哪些表,要和数据库中对应,不能写错! -->
  45.         <table tableName="items"></table>
  46.         <table tableName="orders"></table>
  47.         <table tableName="orderdetail"></table>
  48.         <table tableName="user"></table>
  49.     </context>
  50. </generatorConfiguration>
注意: 1、把 generatorConfig.xml 放到 D 盘根目录,以和 java 文件中的路径对应 2、targetPackage 是包名,Mybatis_Generator/src 是项目名+ src 目录。windows下这里可以写 .\src mac 下写 ./src  巨坑。 3、table 标签指定表名  

三、运行程序

运行方法很简单,直接运行 GeneratorSqlmap.java,正常情况下可以看到 Process finished with exit code 0 的回复,如果弄了日志,还可以看到执行过程 如果你的出现 java.io.FileNotFoundException: xxxxxxxxxxxx (系统找不到指定的文件。) 一定是 xml 文件的路径和 java 文件中指定的不一致 最终,我们的 mapper 和 po 包下都会自动生成下面文件 注意:只能点一次运行,如果多次运行会重现重复代码,导致报下列错误

Result Maps collection already contains value for com.liuyanzhao.ssm.mapper.Items的原因及解决办法

 

四、补充

我们最好专门新建一个项目用来生成这些代码,然后将他们复制我们正在开发的项目中。而不是在项目中,生成,自动生成的会把原来的给覆盖掉。 通常,我们的持久类是不修改的,而是新建它的扩展类(当然要继承持久类),因为当我们数据库修改字段或者添加字段后,又会重新生成代码,所以不建议动自动生成的持久类。 Mapper中的方法比较多,我们尽管拿来用就好,节省不少时间,同时也要扩展它。   本文链接:https://liuyanzhao.com/5927.html

发表评论

目前评论:2