• Mybatis Generator(定制化)代码生成器


     1、使用Mapper专用的MyBatis Generator插件

      通用Mapper在1.0.0版本的时候增加了MyBatis Generator(以下简称MBG)插件,使用该插件可以很方便的生成实体类、Mapper接口以及对应的XML文件。

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

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

    2、使用通用Mapper插件

      插件代码在com.github.abel533.generator包下面,一共有如下两个类:

    • MapperCommentGenerator:该类用于生成数据库备注字段的注释,以及实体类字段的注解。
    • MapperPlugin:插件的实现类,该类默认使用上面这个注释生成器,插件屏蔽了一般的CRUD方法(保留了Example),插件可以生成实体的@Table注解。
    • Maven中添加依赖:  
    1 <dependency>
    2     <groupId>com.github.abel533</groupId>
    3     <artifactId>mapper</artifactId>
    4     <!-- 建议使用最新版本 -->
    5     <version>x.x.x</version>
    6 </dependency>

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

     2.1.  使用Java编码方式运行MBG

      使用这种方式,首先下载MBG的Jar包(本项目[taotao]测试代码中使用maven引入jar包,使用Java代码运行)。

      Java代码很容易,和文档中的一样:

    1 List<String> warnings = new ArrayList<String>();
    2 boolean overwrite = true;
    3 ConfigurationParser cp = new ConfigurationParser(warnings);
    4 Configuration config = cp.parseConfiguration(
    5         Generator.class.getResourceAsStream("/generator/generatorConfig.xml"));
    6 DefaultShellCallback callback = new DefaultShellCallback(overwrite);
    7 MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
    8 myBatisGenerator.generate(null);

      你只需要在你当前的项目中创建一个类,添加一个main方法,在main中写上上面的代码即可。

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

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

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE generatorConfiguration
     3         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     4         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
     5 
     6 <generatorConfiguration>
     7   <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
     8   
     9     <!-- 通用Mapper的插件com.github.abel533.generator.MapperPlugin,该插件有一个必选的<property>属性mappers,这里的mappers和通用Mapper中的mappers配置含义一样,就是我们使用的通用Mapper接口,多个通用Mapper接口可以用逗号隔开 -->
    10     <!-- 关于本插件,最重要的内容就是上面这个配置。下面要说的其他配置和普通的一致。 -->
    11     <plugin type="com.github.abel533.generator.MapperPlugin">
    12       <property name="mappers" value="com.github.abel533.mapper.Mapper"/>
    13     </plugin>
    14 
    15     <!-- 数据库配置信息,由于需要连接数据库,需要保证项目的classpath下面有数据库的JDBC驱动 -->
    16     <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    17                     connectionURL="jdbc:mysql://localhost:3306/test"
    18                     userId="root"
    19                     password="">
    20     </jdbcConnection>
    21 
    22     <!-- 生成实体类的配置,是一个必须配置的内容 -->
    23     <javaModelGenerator targetPackage="test.model" targetProject="G:MyProjectsrcmainjava"/>
    24 
    25     <!-- sqlMapGenerator是一个可选的配置,配置后可以生成Mapper接口对应的XML文件 -->
    26     <sqlMapGenerator targetPackage="mapper"  targetProject="G:MyProjectsrcmain
    esources"/>
    27 
    28     <!-- 通用Mapper接口的配置,配置javaClientGenerator后会生成对应的接口文件,该接口会自动继承前面配置的通用Mapper接口 -->
    29     <javaClientGenerator targetPackage="test.mapper" targetProject="G:MyProjectsrcmainjava" type="XMLMAPPER" />
    30 
    31     <!-- 最后一个配置table,这里使用SQL通配符%来匹配所有表。generatedKey意味着所有的表都有一个id自增的主键,在生成实体类的时候会根据该配置生成相应的注解 -->
    32     <table tableName="%" >
    33       <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
    34     </table>
    35   </context>
    36 </generatorConfiguration>

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

     2.2. 使用Maven执行MBG

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

      使用Maven插件的一个好处是可以将Maven中的属性使用${property}形式在generatorConfig.xml中引用。

      先看Maven的pom.xml文件(只显示有关的部分内容):

     1 <properties>
     2     <!--  MyBatis Generator  -->
     3     <!--  Java接口和实体类  -->
     4     <targetJavaProject>${basedir}/src/main/java</targetJavaProject>
     5     <targetMapperPackage>com.isea533.mybatis.mapper</targetMapperPackage>
     6     <targetModelPackage>com.isea533.mybatis.model</targetModelPackage>
     7     <!--  XML生成路径  -->
     8     <targetResourcesProject>${basedir}/src/main/resources</targetResourcesProject>
     9     <targetXMLPackage>mapper</targetXMLPackage>
    10     <!--  依赖版本  -->
    11     <mapper.version>1.0.0</mapper.version>
    12     <mysql.version>5.1.29</mysql.version>
    13 </properties>

      上面是pom.xml中properties配置的部分内容。这里配置了MBG配置文件中常用到的几个路径以及包名。还包含了通用Mapper的版本和数据库JDBC驱动的版本。

      下面是MBG的Maven插件配置:

     1 <plugin>
     2     <groupId>org.mybatis.generator</groupId>
     3     <artifactId>mybatis-generator-maven-plugin</artifactId>
     4     <version>1.3.2</version>
     5     <configuration>
     6         <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
     7         <overwrite>true</overwrite>
     8         <verbose>true</verbose>
     9     </configuration>
    10     <dependencies>
    11         <dependency>
    12         <groupId>mysql</groupId>
    13         <artifactId>mysql-connector-java</artifactId>
    14         <version>${mysql.version}</version>
    15         </dependency>
    16         <dependency>
    17         <groupId>com.github.abel533</groupId>
    18         <artifactId>mapper</artifactId>
    19         <version>${mapper.version}</version>
    20         </dependency>
    21     </dependencies>
    22 </plugin>

      这里配置了MBG插件,并且配置了generatorConfig.xml配置文件的路径。另外还有两个依赖,分别是JDBC驱动以及通用Mapper(提供了MBG插件)。

      下面我们在看看这个generatorConfig.xml配置文件:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE generatorConfiguration
     3         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     4         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
     5 
     6 <generatorConfiguration>
     7     <properties resource="config.properties"/>
     8 
     9     <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
    10         <property name="beginningDelimiter" value="`"/>
    11         <property name="endingDelimiter" value="`"/>
    12 
    13         <plugin type="${mapper.plugin}">
    14           <property name="mappers" value="${mapper.Mapper}"/>
    15         </plugin>
    16 
    17         <jdbcConnection driverClass="${jdbc.driverClass}"
    18                         connectionURL="${jdbc.url}"
    19                         userId="${jdbc.user}"
    20                         password="${jdbc.password}">
    21         </jdbcConnection>
    22 
    23         <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/>
    24 
    25         <sqlMapGenerator targetPackage="${targetXMLPackage}"  targetProject="${targetResourcesProject}"/>
    26 
    27         <javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}" type="XMLMAPPER" />
    28 
    29         <table tableName="%" >
    30           <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
    31         </table>
    32     </context>
    33 </generatorConfiguration>

      可以看到这个配置文件中的大多数属性都使用${}形式替代了。使用<properties resource="config.properties"/>引入了config.properties属性配置,该文件内容如下:

     1 # 数据库配置
     2 jdbc.driverClass = com.mysql.jdbc.Driver
     3 jdbc.url = jdbc:mysql://localhost:3306/test
     4 jdbc.user = root
     5 jdbc.password =
     6 
     7 #c3p0
     8 jdbc.maxPoolSize=50
     9 jdbc.minPoolSize=10
    10 jdbc.maxStatements=100
    11 jdbc.testConnection=true
    12 
    13 # 通用Mapper配置
    14 mapper.plugin = com.github.abel533.generator.MapperPlugin
    15 mapper.Mapper = com.github.abel533.mapper.Mapper

      使用配置文件的目的是因为系统多处地方使用了这种配置,因而使用一个属性文件可以方便的保持一致。

      除了引用配置文件中的属性外,部分还使用了pom.xml中的属性。这种方式使用起来更灵活。

    运行

      配置好之后如何运行呢?

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

    3、生成的代码

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

     3.1、实体类UserInfo

     1 package com.isea533.mybatis.model;
     2 
     3 import javax.persistence.*;
     4 
     5 @Table(name = "user_info")
     6 public class UserInfo {
     7     @Id
     8     @Column(name = "Id")
     9     @GeneratedValue(strategy = GenerationType.IDENTITY)
    10     private Integer id;
    11 
    12     /**
    13      * 用户名
    14      */
    15     private String username;
    16 
    17     /**
    18      * 密码
    19      */
    20     private String password;
    21 
    22     /**
    23      * @return Id
    24      */
    25     public Integer getId() {
    26         return id;
    27     }
    28 
    29     /**
    30      * @param id
    31      */
    32     public void setId(Integer id) {
    33         this.id = id;
    34     }
    35 
    36     /**
    37      * 获取用户名
    38      *
    39      * @return username - 用户名
    40      */
    41     public String getUsername() {
    42         return username;
    43     }
    44 
    45     /**
    46      * 设置用户名
    47      *
    48      * @param username 用户名
    49      */
    50     public void setUsername(String username) {
    51         this.username = username;
    52     }
    53 }

      代码过长,省略了一部分,完整查看:UserInfo

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

      这里还自动生成了几项注解的内容。

     3.2、Mapper接口UserInfoMapper

    1 package com.isea533.mybatis.mapper;
    2 
    3 import com.github.abel533.mapper.Mapper;
    4 import com.isea533.mybatis.model.UserInfo;
    5 
    6 public interface UserInfoMapper extends Mapper<UserInfo> {
    7 }

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

     3.3、Mapper.xml文件UserInfoMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
     3 <mapper namespace="com.isea533.mybatis.mapper.UserInfoMapper" >
     4     <resultMap id="BaseResultMap" type="com.isea533.mybatis.model.UserInfo" >
     5         <!--
     6             WARNING - @mbggenerated
     7         -->
     8         <id column="Id" property="id" jdbcType="INTEGER" />
     9         <result column="username" property="username" jdbcType="VARCHAR" />
    10         <result column="password" property="password" jdbcType="VARCHAR" />
    11         <result column="usertype" property="usertype" jdbcType="VARCHAR" />
    12         <result column="enabled" property="enabled" jdbcType="INTEGER" />
    13         <result column="realname" property="realname" jdbcType="VARCHAR" />
    14         <result column="qq" property="qq" jdbcType="VARCHAR" />
    15         <result column="email" property="email" jdbcType="VARCHAR" />
    16         <result column="tel" property="tel" jdbcType="VARCHAR" />
    17     </resultMap>
    18 </mapper>

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

  • 相关阅读:
    接口的多实现。
    接口的基本实现。
    构建MVC解决方案(包含哪些项目)
    书目记录
    Chrome浏览器修改user-agent,伪装其他浏览器,附带微信、支付宝user-agent
    [文件]学生信息的简单读入与输出
    scanf高级用法【至此丢弃gets用法 】
    数组,字符串
    [转载]终极解密输入网址按回车到底发生了什么
    typedef 和 #define 的区别
  • 原文地址:https://www.cnblogs.com/cb0327/p/5158178.html
Copyright © 2020-2023  润新知