您的位置:首页 > 编程语言

mybatis入门到精通(九):mybatis 代码生成工具的使用

2014-02-24 11:45 661 查看
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:\Work\Java\eclipse\workspace\myBatisGenerator\WebContent\WEB-INF\lib\mysql-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 的配置也必须是绝对路径了。

代码下载:

 mybatis
代码生成工具

除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息