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:\MyProject\src\main\java"/>
24 
25     <!-- sqlMapGenerator是一個可選的配置,配置后可以生成Mapper接口對應的XML文件 -->
26     <sqlMapGenerator targetPackage="mapper"  targetProject="G:\MyProject\src\main\resources"/>
27 
28     <!-- 通用Mapper接口的配置,配置javaClientGenerator后會生成對應的接口文件,該接口會自動繼承前面配置的通用Mapper接口 -->
29     <javaClientGenerator targetPackage="test.mapper" targetProject="G:\MyProject\src\main\java" 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映射配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM