• mybatis实战教程(mybatis in action)之九:mybatis 代码生成工具的使用


    mybatis 应用程序,需要大量的配置文件,对于一个成百上千的数据库表来说,完全手工配置,这是一个很恐怖的工作量. 所以mybatis 官方也推出了一个mybatis代码生成工具的jar包. 今天花了一点时间,按照 mybatis generator 的doc 文档参考,初步配置出了一个可以使用的版本,我把源代码也提供下载,mybatis 代码生成工具,主要有一下功能:
    1.生成pojo 与 数据库结构对应
    2.如果有主键,能匹配主键
    3.如果没有主键,可以用其他字段去匹配
    4.动态select,update,delete 方法
    5.自动生成接口(也就是以前的dao层)
    6.自动生成sql mapper,增删改查各种语句配置,包括动态where语句配置
    7.生成Example 例子供参考

    下面介绍下详细过程

    1. 创建测试工程,并配置mybatis代码生成jar包
    下载地址:http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DGenerator
    mysql 驱动下载:http://dev.mysql.com/downloads/connector/j/
    这些jar包,我也会包含在源代码里面,可以在文章末尾处,下载源代码,参考。

    用 eclipse 建立一个dynamic web project。
    解压下载后的 mybatis-generator-core-1.3.2-bundle.zip 文件,其中有两个目录:一个目录是文档目录docs,主要介绍这个代码生成工具如何使用,另一个是lib目录,里面的内容主要是jar 包,这里我们需要 mybatis-generator-core-1.3.2.jar,这个 jar 包. 将它拷贝到我们刚刚创建的 web工程的 WebContent/WEB-INF/lib  目录下.在这个目录下也放入 mysql 驱动jar包.因为用 mysql  做测试的.

    2.在数据库中创建测试表 
    在mybatis数据库中创建 用来测试的category表(如果没有mybatis这个数据库,要创建,这是基于前面这个系列文章而写的,已经有了mybatis 这个数据库)
    程序代码 程序代码

    Drop TABLE IF EXISTS `category`;
    Create TABLE `category` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `catname` varchar(50) NOT NULL,
      `catdescription` varchar(200) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    3. 配置mybatis 代码生成工具的配置文件  
    在创建的web工程中,创建相应的package 比如 :
    com.yihaomen.inter 用来存放mybatis 接口对象.
    com.yihaomen.mapper用来存放sql mapper对应的映射,sql语句等.
    com.yihaomen.model 用来存放与数据库对应的model 。
    在用mybatis 代码生成工具之前,这些目录必须先创建好,作为一个好的应用程序,这些目录的创建也是有规律的。

    根据mybatis代码生成工具文档,需要一个配置文件,这里命名为:mbgConfiguration.xml 放在src 目录下. 配置文件内容如下:
    程序代码 程序代码

    <?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>
      
      <!-- 配置mysql 驱动jar包路径.用了绝对路径 -->
      <classPathEntry location="D:WorkJavaeclipseworkspacemyBatisGeneratorWebContentWEB-INFlibmysql-connector-java-5.1.22-bin.jar" />

      <context id="yihaomen_mysql_tables" targetRuntime="MyBatis3">
      
        <!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
        <commentGenerator>
          <property name="suppressAllComments" value="true" />
          <property name="suppressDate" value="true" />
        </commentGenerator>
        <!-- 注释控制完毕 -->
      
        <!-- 数据库连接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"
            userId="root"
            password="password">
        </jdbcConnection>

        <javaTypeResolver >
          <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        
        <!-- 数据表对应的model 层  -->
        <javaModelGenerator targetPackage="com.yihaomen.model" targetProject="src">
          <property name="enableSubPackages" value="true" />
          <property name="trimStrings" value="true" />
        </javaModelGenerator>
        
        <!-- sql mapper 隐射配置文件 -->
        <sqlMapGenerator targetPackage="com.yihaomen.mapper"  targetProject="src">
          <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        
        <!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.yihaomen.inter"  targetProject="src">
          <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        
        <!-- 要对那些数据表进行生成操作,必须要有一个. -->
        <table schema="mybatis" tableName="category" domainObjectName="Category" 
            enableCountByExample="false" enableUpdateByExample="false"
            enableDeleteByExample="false" enableSelectByExample="false"
            selectByExampleQueryId="false">     
        </table>

      </context>
    </generatorConfiguration>

    用一个main 方法来测试能否用mybatis 成生成刚刚创建的`category`表对应的model,sql mapper等内容.
    创建一个com.yihaomen.test 的package ,并在此package 下面建立一个测试的类GenMain:
    程序代码 程序代码

    package com.yihaomen.test;

    import java.io.File;
    import java.io.IOException;
    import java.sql.SQLException;
    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.exception.InvalidConfigurationException;
    import org.mybatis.generator.exception.XMLParserException;
    import org.mybatis.generator.internal.DefaultShellCallback;

    public class GenMain {
        public static void main(String[] args) {
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            String genCfg = "/mbgConfiguration.xml";
            File configFile = new File(GenMain.class.getResource(genCfg).getFile());
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = null;
            try {
                config = cp.parseConfiguration(configFile);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XMLParserException e) {
                e.printStackTrace();
            }
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = null;
            try {
                myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            } catch (InvalidConfigurationException e) {
                e.printStackTrace();
            }
            try {
                myBatisGenerator.generate(null);
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }


    到此为止,eclipse项目工程图应该如下:


    4.运行测试的main 方法,生成mybatis 相关代码 
    运行GenMain类里的main方法,并刷新 工程,你会发现 各自package 目录下已经响应生成了对应的文件,完全符合mybatis 规则,效果图如下:


    5.注意事项 
    如果你想生成example 之类的东西,需要在<table></table>里面去掉
    程序代码 程序代码

    enableCountByExample="false" enableUpdateByExample="false"
    enableDeleteByExample="false" enableSelectByExample="false"
    selectByExampleQueryId="false"

    这部分配置,这是生成Example而用的,一般来说对项目没有用.

    另外生成的sql mapper 等,只是对单表的增删改查,如果你有多表join操作,你就可以手动配置,如果调用存储过程,你也需要手工配置. 这时工作量已经少很多了。

    如果你想用命令行方式处理,也是可以的.
    程序代码 程序代码

    比如:
    java -jar mybatis-generator-core-1.3.2.jar -mbgConfiguration.xm -overwrite

    这时,要用绝对路径才行. 另外mbgConfiguration.xml  配置文件中targetProject 的配置也必须是绝对路径了。





  • 相关阅读:
    git clone 解决Permission Denied (publickey)问题
    json-server 的基本使用
    存储过程的基本使用(1)
    Linux中的yum是什么?如何配置?如何使用?
    搭建博客园皮肤
    PSCP和SCP区别和用法
    Linux 磁盘分区和挂载
    win10产生文件的哈希值
    linux下刻录iso到U盘
    jquery鼠标移入移出
  • 原文地址:https://www.cnblogs.com/jeffen/p/6243887.html
Copyright © 2020-2023  润新知