mybatis generator自动生成model、dao、mapper

maven项目加入mybatis generator依赖

<dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
</dependency>
generator.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>
    <!-- 配置文件 -->
    <properties resource="generator.properties"></properties>
    
    <!-- 数据库驱动包位置 -->
    <classPathEntry location="D:\software\lib\mysql-connector-java-5.1.21.jar" /> 

    <context id="MysqlContext" targetRuntime="MyBatis3" defaultModelType="flat">

        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 由于beginningDelimiter和endingDelimiter的默认值为双引号("),在Mysql中不能这么写,所以还要将这两个默认值改为`  -->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!-- 为生成的Java模型类添加序列化接口,并生成serialVersionUID字段 -->
        <plugin type="com.brh.core.plugin.SerializablePlugin">
            <property name="suppressJavaInterface" value="false"/>
        </plugin>

        <!-- 生成的代码去掉注释 -->
        <commentGenerator type="com.brh.core.plugin.CommentGenerator">
            <property name="suppressAllComments" value="true" />
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <!-- 数据库连接 -->
        <jdbcConnection driverClass="${generator.jdbc.driver}"
                        connectionURL="${generator.jdbc.url}"
                        userId="${generator.jdbc.username}"
                        password="root" />

        <!-- model生成 -->
        <javaModelGenerator targetPackage="com.brh.core.bean" targetProject="src/main/java" />

        <!-- MapperXML生成 -->
        <sqlMapGenerator targetPackage="com.brh.core.dao" targetProject="src/main/java" />

        <!-- Mapper接口生成 -->
        <javaClientGenerator targetPackage="com.brh.core.dao" targetProject="src/main/java" type="XMLMAPPER" />

        <!-- 需要映射的表 -->
        <table tableName="forward_record" 
               domainObjectName="ForwardRecord" 
               enableCountByExample="false" 
               enableUpdateByExample="false" 
               enableDeleteByExample="false"
               enableSelectByExample="false" 
               selectByExampleQueryId="false">
               <property name="useActualColumnNames" value="true"/>
               <generatedKey column="id" sqlStatement="MySql" identity="true" />
        </table>
        <table tableName="user_play_record" 
               domainObjectName="UserPlayRecord" 
               enableCountByExample="false" 
               enableUpdateByExample="false" 
               enableDeleteByExample="false"
               enableSelectByExample="false" 
               selectByExampleQueryId="false">
               <property name="useActualColumnNames" value="true"/>
               <generatedKey column="id" sqlStatement="MySql" identity="true" />
        </table>
        <table tableName="user_prize_record" 
               domainObjectName="UserPrizeRecord" 
               enableCountByExample="false" 
               enableUpdateByExample="false" 
               enableDeleteByExample="false"
               enableSelectByExample="false" 
               selectByExampleQueryId="false">
               <property name="useActualColumnNames" value="true"/>
               <generatedKey column="id" sqlStatement="MySql" identity="true" />
        </table>
     </context>
</generatorConfiguration>

1. 配置文件头

<?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" >

2. 根节点<generatorConfiguration>

generatorConfiguration节点没有任何属性,直接写节点即可,如下:

<generatorConfiguration>
    <!-- 具体配置内容 -->
</generatorConfiguration>
3. <generatorConfiguration>子元素

从这段开始,就是配置的主要内容,这些配置都是generatorConfiguration元素的子元素。

包含以下子元素(有严格的顺序):

1.  <properties> (0个或1个)
2.  <classPathEntry> (0个或多个)
3.  <context> (1个或多个)

3.1 <properties> 元素

这个元素用来指定外部的属性元素,不是必须的元素。

元素用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用 ${property}这种形式的引用,通过这种方式引用属性文件中的属性值。 对于后面需要配置的**jdbc信息**和targetProject属性会很有用。

这个属性可以通过resource或者url来指定属性文件的位置,这两个属性只能使用其中一个来指定,同时出现会报错。

*   resource:指定**classpath**下的属性文件,使用类似com/myproject/generatorConfig.properties这样的属性值。

*   url:可以指定文件系统上的特定位置,例如file:///C:/myfolder/generatorConfig.properties

3.2 <classPathEntry> 元素

这个元素可以0或多个,不受限制。

最常见的用法是通过这个属性指定驱动的路径,例如:

<classPathEntry location="D:\software\lib\mysql-connector-java-5.1.21.jar" />
3.3 <context> 元素

在MBG的配置中,至少需要有一个<context>元素。

<context>元素用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行MBG的时候还可以指定要运行的<context>。

该元素只有一个**必选属性**id,用来唯一确定一个<context>元素,该id属性可以在运行MBG的使用。

此外还有几个**可选属性**:

     *  defaultModelType:**这个属性很重要**,这个属性定义了MBG如何生成**实体类**。
        这个属性有以下可选值:

             *  conditional:*这是默认值*,这个模型和下面的hierarchical类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表                                  的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。

             *  flat:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。**这种模型最简单,推荐使用。**

             *  hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然                                   后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。

    *  targetRuntime:此属性用于指定生成的代码的运行时环境。该属性支持以下可选值:

             *  MyBatis3:*这是默认值*

             *  MyBatis3Simple

             *  Ibatis2Java2

             *  Ibatis2Java5   一般情况下使用默认值即可,有关这些值的具体作用以及区别请查看中文文档的详细内容。

一般情况下,我们使用如下的配置即可:

<context id="Mysql" defaultModelType="flat">
如果你希望不生成和Example查询有关的内容,那么可以按照如下进行配置:

<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
使用MyBatis3Simple可以避免在后面的<table>中逐个进行配置(后面会提到)。


MBG配置中的其他几个元素,基本上都是<context>的子元素,这些子元素(有严格的配置顺序)包括:

       *  <property> (0个或多个)

       *   <plugin> (0个或多个)

       *    <commentGenerator> (0个或1个)

       *    <jdbcConnection> (1个)

       *    <javaTypeResolver> (0个或1个)

       *    <javaModelGenerator> (1个)

       *    <sqlMapGenerator> (0个或1个)

       *    <javaClientGenerator> (0个或1个)

       *    <table> (1个或多个)

其中<property>属性比较特殊,后面讲解的时候都会和父元素一起进行讲解。在讲解<property>属性前,我们先看看**什么是分隔符?**。

这里通过一个例子说明。假设在MySQL数据库中有一个表名为user info,你没有看错,中间是一个空格,这种情况下如果写出select * from user info这样的语句,肯定是要报错的,在Mysql中的时候我们一般会写成如下的样子:

select * from `user info`
这里的使用的**反单引号(`)**就是**分隔符**,**分隔符**可以用于**表名**或者**列名**。

下面继续看<property>支持的属性:

       *   autoDelimitKeywords

       *   beginningDelimiter

       *   endingDelimiter

       *   javaFileEncoding

首先是autoDelimitKeywords,当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加**分隔符**。

然后这里继续上面的例子来讲beginningDelimiter和endingDelimiter属性。
由于beginningDelimiter和endingDelimiter的默认值为双引号("),在Mysql中不能这么写,所以还要将这两个默认值改为**反单引号(`)**,配置如下:

<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>  
属性javaFileEncoding设置要使用的Java文件的编码,默认使用当前平台的编码,只有当生产的编码需要特殊指定时才需要使用,一般用不到。

3.3.1 <plugin> 元素

该元素可以配置0个或者多个,不受限制。

<plugin>元素用来定义一个插件。插件用于扩展或修改通过MyBatis Generator (MBG)代码生成器生成的代码。
插件将按在配置中配置的顺序执行。

 <!-- 为生成的Java模型创建一个toString方法 -->
  <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
 <!-- Java模型生成equals和hashcode方法 -->
  <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>
3.3.2 <commentGenerator> 元素

该元素最多可以配置1个。

这个元素非常有用,相信很多人都有过这样的需求,就是希望MBG生成的代码中可以包含**注释信息**,具体就是生成表或字段的备注信息。

使用这个元素就能很简单的实现我们想要的功能。这里先介绍该元素,介绍完后会举例如何扩展实现该功能。

该元素有一个可选属性type,可以指定用户的实现类,该类需要实现org.mybatis.generator.api.CommentGenerator接口。

而且必有一个默认的构造方法。这个属性接收默认的特殊值DEFAULT,会使用默认的实现类org.mybatis.generator.internal.DefaultCommentGenerator。

默认的实现类中提供了两个可选属性,需要通过<property>属性进行配置。

    *    suppressAllComments:**阻止**生成注释,默认为false

    *    suppressDate:**阻止**生成的注释包含时间戳,默认为false

一般情况下由于MBG生成的注释信息没有任何价值,而且有时间戳的情况下每次生成的注释都不一样,使用**版本控制**的时候每次都会提交,因而一般情况下我们都会屏蔽注释信息,可以如下配置:

<commentGenerator>
    <property name="suppressAllComments" value="true"/>
    <property name="suppressDate" value="true"/>
</commentGenerator>
接下来我们简单举例实现生成包含表字段注释信息的注释

因为系统提供了一个默认的实现类,所以对我们来说,自己实现一个会很容易,最简单的方法就是复制默认实现类代码到一个新的文件中,修改类名如MyCommentGenerator,在你自己的实现类中,你可以选择是否继续支持上面的两个属性,你还可以增加对其他属性的支持。

@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
    if (introspectedColumn.getRemarks() != null && !introspectedColumn.getRemarks().equals("")) {
        field.addJavaDocLine("/**");
        field.addJavaDocLine(" * " + introspectedColumn.getRemarks());
        addJavadocTag(field, false);
        field.addJavaDocLine(" */");
    }
}
这个方法是给字段添加注释信息的,其中IntrospectedColumn包含了字段的完整信息,通过getRemarks方法可以获取字段的注释信息。上面这个方法修改起来还是很容易的。除了字段的注释外还有Getter和Setter,以及类的注释。

3.3.3 <jdbcConnection> 元素

<jdbcConnection>用于指定数据库连接信息,该元素必选,并且只能有一个。

配置该元素只需要注意如果JDBC驱动不在**classpath**下,就需要通过<classPathEntry>元素引入jar包,这里**推荐**将jar包放到**classpath**下。
该元素有两个必选属性:

   *   driverClass:访问数据库的JDBC驱动程序的完全限定类名

   *   connectionURL:访问数据库的JDBC连接URL

该元素还有两个可选属性:

   *   userId:访问数据库的用户ID

   *   password:访问数据库的密码

此外该元素还可以接受多个<property>子元素,这里配置的<property>属性都会添加到JDBC驱动的属性中。

这个元素配置起来最容易,这里举个简单例子:

 

<jdbcConnection driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/test"
                userId="root"
                password="">
</jdbcConnection>
3.3.4 <javaTypeResolver> 元素
 

这个元素的配置用来指定JDBC类型和Java类型如何转换。

可以配置的属性为forceBigDecimals,该属性可以控制是否强制DECIMAL和NUMERIC类型的字段转换为Java类型的java.math.BigDecimal,默认值为false,一般不需要配置。

<javaTypeResolver >
    <property name="forceBigDecimals" value="true" />
</javaTypeResolver>
3.3.5 <javaModelGenerator> 元素

该元素必须配置一个,并且最多一个。

该元素用来控制生成的实体类

该元素只有两个属性,都是必选的。

   *   targetPackage:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(<table>中会提到)。

   *   targetProject:指定目标项目路径,使用的是文件系统的绝对路径。

3.3.6 <sqlMapGenerator> 元素

该元素只有两个属性(和前面提过的<javaModelGenerator>的属性含义一样),都是必选的。

   *   targetPackage:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(<table>中会提到)。

   *   targetProject:指定目标项目路径,使用的是文件系统的绝对路径。

3.3.7 <javaClientGenerator> 元素

该元素可选,最多配置一个

如果不配置该元素,就不会生成Mapper接口。

该元素有3个必选属性:

type:该属性用于选择一个预定义的客户端代码(可以理解为Mapper接口)生成器,用户可以自定义实现,需要继承org.mybatis.generator.codegen.AbstractJavaClientGenerator类,必选有一个默认的构造方法。 该属性提供了以下预定的代码生成器,首先根据<context>的targetRuntime分成三类:

       *   MyBatis3:

            *   ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML映射文件

            *   MIXEDMAPPER:XML和注解的混合形式,(上面这种情况中的)SqlProvider注解方法会被XML替代。

            *   XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件。

       *   MyBatis3Simple:

            *   ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML映射文件

            *   XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件。

targetPackage:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(<table>中会提到)。

targetProject:指定目标项目路径,使用的是文件系统的绝对路径。

<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao"
              targetProject="E:\MyProject\src\main\java"/>
3.3.8 <table> 元素

该元素至少要配置一个,可以配置多个。

该元素用来配置要通过内省的表。只有配置的才会生成实体类和其他文件。

该元素有一个必选属性:

    *   tableName:指定要生成的表名,可以使用SQL通配符匹配多个表。

例如要生成全部的表,可以按如下配置:

<table tableName="%" />
该元素包含多个可选属性:

   *   schema:数据库的schema,可以使用SQL通配符匹配。如果设置了该值,生成SQL的表名会变成如schema.tableName的形式。

   *   domainObjectName:生成对象的基本名称。如果没有指定,MBG会自动根据表名来生成名称。

   *   enableXXX:XXX代表多种SQL方法,该属性用来指定是否生成对应的XXX语句。

   *   selectByExampleQueryId:该属性用来指定是否生成对应的selectByExampleQueryId语句。

下面对这4个元素进行详细讲解。

1. <generatedKey> 元素

这个元素最多可以配置一个。
这个元素用来指定自动生成主键的属性(identity字段或者sequences序列)。如果指定这个元素,MBG在生成insert的SQL映射文件中插入一个<selectKey>元素。 这个元素**非常重要**,这个元素包含下面两个必选属性:

     *   column:生成列的列名。

     *   sqlStatement:将返回新值的 SQL 语句。如果这是一个identity列,您可以使用其中一个预定义的的特殊值。预定义值如下:

                *   Cloudscape

                *   DB2

                *   DB2_MF

                *   Derby

                *   HSQLDB

                *   Informix

                *   MySql

                *   SqlServer

                *   SYBASE

                *   JDBC



这会配置MBG使用MyBatis3支持的JDBC标准的生成key来生成代码。 这是一个独立于数据库获取标识列中的值的方法。 重要: 只有当目标运行为MyBatis3时才会产生正确的代码。 如果与iBATIS2一起使用目标运行时会产生运行时错误的代码

      *   identity:当设置为true时,该列会被标记为identity列, 并且<selectKey>元素会被插入在insert后面。 当设置为false时,<selectKey>会插入到insert之前(通常是序列)

<property name="useActualColumnNames" value="true"/>

      *   使用列名作为属性名

MybatisGeneratorUtil.Java示例:

package com.brh.core.util;

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 MybatisGeneratorUtil{
	
	    public static void main(String[] args) {  
	        try {  
	            System.out.println("start generator ...");  
	            List<String> warnings = new ArrayList<String>();  
	            boolean overwrite = true;  
	            File configFile = new File(MybatisGeneratorUtil2.class.getResource("/generatorConfig.xml").getFile());
	            ConfigurationParser cp = new ConfigurationParser(warnings);  
	            Configuration config = cp.parseConfiguration(configFile);  
	            DefaultShellCallback callback = new DefaultShellCallback(overwrite);  
	            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);  
	            myBatisGenerator.generate(null);  
	            for (String warning : warnings) {
	    			System.out.println(warning);
	    		}
	            System.out.println("end generator!");  
	        } catch (IOException e) {  
	            e.printStackTrace();  
	        } catch (XMLParserException e) {  
	            e.printStackTrace();  
	        } catch (InvalidConfigurationException e) {  
	            e.printStackTrace();  
	        } catch (SQLException e) {  
	            e.printStackTrace();  
	        } catch (InterruptedException e) {  
	            e.printStackTrace();  
	        }  
	    }  
	      

}


java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
   *   直接使用mybatis-generator-core-1.3.2.jar也可以 指定数据库驱动包位置   -configfile  generator.xml配置文件   -overwrite  覆盖

是的,你可以直接删除之前生成的文件,然后重新运行 MyBatis Generator 自动生成。 以下是一个示例的 MyBatis Generator 配置文件(generatorConfig.xml)的内容: ```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="default" targetRuntime="MyBatis3"> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/your_database" userId="your_username" password="your_password"> </jdbcConnection> <!-- 配置生成的实体类 --> <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 配置生成的映射文件 --> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 配置生成的 DAO 接口 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.dao" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 配置要生成的表 --> <table tableName="your_table_name" domainObjectName="YourEntityName"/> </context> </generatorConfiguration> ``` 你可以根据自己的需求修改上述配置文件中的数据库连接信息、生成的实体类、映射文件和 DAO 接口的包名和输出路径,以及要生成的表名和对应的实体类名。 请注意,在运行 MyBatis Generator 时,你需要指定该配置文件的路径。例如,使用 Maven 插件执行生成命令可以这样写: ```shell mvn mybatis-generator:generate -Dmybatis.generator.configFile=path/to/generatorConfig.xml ``` 希望这能帮到你!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值