通用 Mapper 专用代码生成器

通用 Mapper 专用代码生成器

使用该插件可以很方便的生成实体类、Mapper接口以及对应的XML文件。

本篇文档就是讲述如何在 MBG 中使用该插件。

首先对MBG不太了解的可以先阅读下面的文档

Mybatis Geneator 详解

http://blog.csdn.net/isea533/article/details/42102297

4.1.1 简单介绍

通用 Mapper 专用代码生成器生成的 Model 会在原有基础上增加 @Table,@Id,@Column 等注解,方便自动会数据库字段进行映射。

运行MBG有多种方法,这里只介绍两种比较常见的方法。并且有关的内容会针对这样的运行方式进行配置。

4.1.2 使用Java编码方式运行MBG

在 generatr 项目测试代码中包含这个例子。

https://github.com/abel533/Mapper/blob/master/generator/src/test/java/tk/mybatis/mapper/generator/Generator.java

使用这种方式,需要引入 MBG 的依赖,同时项目中应该已经有通用 Mapper 的依赖了。



    org.mybatis.generator
    mybatis-generator-core
    1.3.6




    tk.mybatis
    mapper
    4.0.0





    tk.mybatis
    mapper-generator
    1.0.0

Java代码很容易,和测试中的一样:

public static void main(String[] args) throws Exception {
        List warnings = new ArrayList();
        boolean overwrite = true;
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = 
                      cp.parseConfiguration(getResourceAsStream("generatorConfig.xml"));
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }

注意,测试中还有 startDB 等方法,这是因为测试中使用的 hsqldb 内存数据库。

这段代码容易,最主要的一个内容是"generatorConfig.xml",我们应该如何配置该类。

下面是一个generatorConfig.xml的例子:





    
        
        

        
            
            
            
            
            
        

        
        

        
        

        
        

和一般的配置相比,这里只是多了一个插件的配置:


    
    
    
    
    

这里最关键的参数就是 mappers,配置后生成的 Mapper 接口都会自动继承上改接口,如果你定义了一个自己的基础接口,例如:

package xxx.base;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

/**
 * 继承自己的MyMapper
 */
public interface MyMapper extends Mapper, MySqlMapper {
    //TODO
    //FIXME 特别注意,该接口不能被扫描到,否则会出错
}

在配置插件时,可以配置为:

其他参数的含义:

  • caseSensitive 是否区分大小写,默认值 false。如果数据库区分大小写,这里就需要配置为 true,这样当表名为 USER 时,会生成 @Table(name = "USER") 注解,否则使用小写 user 时会找不到表。
  • forceAnnotation 是否强制生成注解,默认 false,如果设置为 true,不管数据库名和字段名是否一致,都会生成注解(包含 @Table 和 @Column)。
  • beginningDelimiter 和 endingDelimiter 开始和结束分隔符,对于有关键字的情况下适用。
  • useMapperCommentGenerator 是否使用通用 Mapper 提供的注释工具,默认 true 使用,这样在生成代码时会包含字段的注释(目前只有 mysql 和 oracle 支持),设置 false 后会用默认的,或者你可以配置自己的注释插件。

在上面 的配置中是针对 MySql 这种自增数据库的,如果使用 ORACLE 序列方式,可以参考下面的配置:

 

SQL 中的 {1} 代表的是对应表的大写形式,{0} 是小写形式,这个配置生成的代码会像下面这样:

public class Country {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY,
            generator = "select SEQ_COUNTRY.nextval from dual")
    private Integer id;
    // 省略其他
}

这段配置介绍完了,之后运行前面的JAVA方法,就会生成对应的文件。该文件的样式在最后贴个例子。

4.1.3 使用 Maven 执行MBG

这里有一个完整的例子,MyBatis-Spring,下面讲解的内容出自这个例子。

Maven 中的插件配置如下:


  
    maven-compiler-plugin
    
      ${jdk.version}
      ${jdk.version}
    
  
  
    org.mybatis.generator
    mybatis-generator-maven-plugin
    1.3.6
    
      
        ${basedir}/src/main/resources/generator/generatorConfig.xml
      
      true
      true
    
    
      
        mysql
        mysql-connector-java
        5.1.29
      
      
        tk.mybatis
        mapper
        4.0.0
      
    
  

在插件中配置了配置文件的路径,覆盖和输出详细日志三个参数。

除此之外需要特别注意的是 ,MBG 配置中用到的所有外部代码都必须通过依赖方式配置在这里,否则运行时会提示找不到对应的类而报错。这里有两个必须的依赖,一个是 JDBC 驱动,另一个是 Mapper 的插件。

下面看配置文件generatorConfig.xml:




    

    
        
        

        
            
            
        

        
        

        

        

        

        
        

这里和之前相差不多,只是通过  引入了外部属性文件,在  配置时,使用的属性文件中的参数。

运行

在 pom.xml 这一级目录的命令行窗口执行 mvn mybatis-generator:generate即可(前提是配置了mvn)。

生成的代码

下面是自动生成的代码的例子,这些例子可以在Mybatis-Spring这里找到。

一、实体类Country

package com.isea533.mybatis.model;

import javax.persistence.*;

@Table(name = "country")
public class Country {
    /**
     * 主键
     */
    @Id
    @Column(name = "Id")
    @GeneratedValue(generator = "JDBC")
    private Integer id;

    /**
     * 名称
     */
    private String countryname;

    /**
     * 代码
     */
    private String countrycode;

    /**
     * 获取主键
     *
     * @return Id - 主键
     */
    public Integer getId() {
        return id;
    }

    /**
     * 设置主键
     *
     * @param id 主键
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取名称
     *
     * @return countryname - 名称
     */
    public String getCountryname() {
        return countryname;
    }

    /**
     * 设置名称
     *
     * @param countryname 名称
     */
    public void setCountryname(String countryname) {
        this.countryname = countryname;
    }

    /**
     * 获取代码
     *
     * @return countrycode - 代码
     */
    public String getCountrycode() {
        return countrycode;
    }

    /**
     * 设置代码
     *
     * @param countrycode 代码
     */
    public void setCountrycode(String countrycode) {
        this.countrycode = countrycode;
    }
}

可以看到这里生成的注释是有意义的内容,注释来源于数据库表字段的注释。

二、Mapper接口CountryMapper

package com.isea533.mybatis.mapper;

import com.isea533.mybatis.model.Country;
import tk.mybatis.mapper.common.Mapper;

public interface CountryMapper extends Mapper {
}

接口自动继承配置的通用Mapper接口,自动包含泛型实体。

三、Mapper.xml文件CountryMapper.xml




  
    
    
    
    
  

xml文件只包含了实体的resultMap映射配置。

 

你可能感兴趣的:(java,后端)