今天来记录下mybatis-generator插件自动生成xml mapper和model还有dao接口,这样我们就可以把精力放在业务代码上,而不需要关心数据库的具体操作。
这里我使用eclipse作为开发工具,采用maven来构建项目。
[color=red][b]1. 编写pom.xml文件[/b][/color]
这里只有3个jar文件,数据库使用mysql

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.jacksoft.mybatis</groupId>  
  <artifactId>mybatis-generator</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  

  <properties>  
        <mybatis-generator.version>1.3.1</mybatis-generator.version>  
        <mysql.version>5.1.13</mysql.version>  
        <mybatis.version>3.0.3</mybatis.version>  
    </properties>  

  <dependencies>  

        <dependency>  
            <groupId>mysql</groupId>  
            <artifactId>mysql-connector-java</artifactId>  
            <version>${mysql.version}</version>  
        </dependency>  

        <dependency>  
            <groupId>org.mybatis.generator</groupId>  
            <artifactId>mybatis-generator-core</artifactId>  
            <version>${mybatis-generator.version}</version>  
        </dependency>  

        <dependency>  
            <groupId>org.mybatis</groupId>  
            <artifactId>mybatis</artifactId>  
            <version>${mybatis.version}</version>  
        </dependency>  
    </dependencies>  

    <build>  
        <finalName>mybatis-generator</finalName>  
    <plugins>  
        <plugin>  
            <groupId>org.mybatis.generator</groupId>  
            <artifactId>mybatis-generator-maven-plugin</artifactId>  
            <version>${mybatis-generator.version}</version>  
            <dependencies>  
            <!-- 数据库驱动  -->  
                <dependency>  
                    <groupId>mysql</groupId>  
                    <artifactId>mysql-connector-java</artifactId>  
                    <version>${mysql.version}</version>  
                </dependency>  

            </dependencies>  
            <!-- 自动生成 -->  
            <executions>  
                <execution>  
                    <id>Generate MyBatis Artifacts</id>  
                    <goals>  
                        <goal>generate</goal>  
                    </goals>  
                    <configuration>  
                        <configurationFile>src/main/resources/config/mysqlGeneratorConfig.xml</configurationFile>  
                        <overwrite>true</overwrite>  
                        <jdbcDriver>com.mysql.jdbc.Driver</jdbcDriver>  
                        <jdbcURL>jdbc:mysql://localhost:3306/demo</jdbcURL>  
                        <jdbcUserId>root</jdbcUserId>  
                        <jdbcPassword>hwroot</jdbcPassword>  
                    </configuration>  
                </execution>  
            </executions>  
        </plugin>  

        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <configuration>  
                <source>1.5</source>  
                <target>1.5</target>  
                <encoding>UTF-8</encoding>  
            </configuration>  
        </plugin>  

        </plugins>  
    </build>  
</project>


我这里通过配置插件,让maven在执行install的时候,自动重新生成代码,因为生成的代码中包含mybatis包中的类,所以也需要引入该包。


[color=red][b]2.创建mysqlGeneratorConfig.xml文件[/b][/color]


在src/main/resources/config目录下面创建mysqlGeneratorConfig.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>   

    <context id="mysqlTables" targetRuntime="MyBatis3">  
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/demo"  
         userId="root" password="hwroot"/>  

        <!-- 指定生成的类型为java类型,避免数据库中number等类型字段 -->  
        <javaTypeResolver>  
            <property name="forceBigDecimals" value="false"/>  
        </javaTypeResolver>  

        <!-- 生成model模型,对应的包,存放位置可以指定具体的路径,如/ProjectName/src,也可以使用MAVEN来自动生成 -->  
        <javaModelGenerator targetPackage="com.jacksoft.mybatis.generator.model" targetProject="MAVEN">  
            <property name="enableSubPackages" value="true"/>  
        </javaModelGenerator>  

        <!--对应的xml mapper文件  -->  
        <sqlMapGenerator targetPackage="com.jacksoft.mybatis.generator.dao" targetProject="MAVEN">  
            <property name="enableSubPackages" value="true"/>  
        </sqlMapGenerator>  

        <!-- 对应的dao接口 -->  
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.jacksoft.mybatis.generator.dao" targetProject="MAVEN">  
            <property name="enableSubPackages" value="true"/>  
        </javaClientGenerator>  


        <table tableName="user" domainObjectName="User"/>  
    </context>  
</generatorConfiguration>


[color=red][b]3. 生成代码[/b][/color]



到这里就差不多了,保存为该文件后,实际上就已经开始生成代码了,但是在source code界面,还是看不到代码,我们通过刷新或者 右键项目-->Maven-->Update Project Configuration


这样就把生成的代码找到了,具体如下图:


[img]http://dl.iteye.com/upload/attachment/0084/5430/859fccd1-570b-33b2-82b1-e0e06e0136b8.png[/img]



对应的mapper,xml,model,example都生成好了,是不是很方便啊?


但是该插件默认不带分页功能,分页插件将在下一次记录。




对于自己写的插件无法初始化的问题,可以参照:


[url]http://code.google.com/p/mybatis/issues/detail?id=343[/url]


也就是需要将自己的插件在配置plugin的时候加入,如:


<plugin>  
                <groupId>org.mybatis.generator</groupId>  
                <artifactId>mybatis-generator-maven-plugin</artifactId>  
                <version>${mybatis-generator.version}</version>  
                <dependencies>  
                    <dependency>  
                        <groupId>mysql</groupId>  
                        <artifactId>mysql-connector-java</artifactId>  
                        <version>${mysql.version}</version>  
                    </dependency>  
                    <dependency>  
                         <groupId>com.jacksoft</groupId>  
                          <artifactId>mybatis-plugins-paging</artifactId>  
                          <version>${mybatis.paging.version}</version>  
                    </dependency>  
                </dependencies>