用過 MyBatis Generator(以下簡稱MBG)插件的都知道,使用該插件可以很方便的生成實體類侧啼、Mapper接口以及對應的XML文件。
本文是基于SSM(Spring+SpringMVC+MyBatis)的webapp工程砰左,講解如何使用通用mapper歇由,加速開發(fā),解決原生MyBatis的不足瓮栗。
對通用mapper不熟的削罩,可以閱讀:http://www.reibang.com/p/5f84624e96bc
如果要使用MyBatis Generator(MBG)插件,需要在pom.xml中添加mybatis-generator-maven-plugin插件费奸,并引入插件依賴mybatis-generator-core弥激。
<!-- Mybatis Generator依賴 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<!--添加maven插件 (mybatis-generator)-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${mapper.version}</version>
</dependency>
</dependencies>
</plugin>
pom.xml中添加MBG插件
ssm-mapper工程的完整pom.xml見:https://github.com/ljheee/my-ssm-mapper/blob/master/pom.xml
可以看到mybatis-generator-maven-plugin插件中的<configuration>引用了一個generatorConfig.xml。
generatorConfig.xml也是MBG最重要的配置文件愿阐。
generatorConfig.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>
<!--generatorConfig.xml文件微服,命名必須是這個名字-->
<properties resource="jdbc.properties"/>
<!--MyBatis3Simple表示不生成Example,flat表示一張表生成一個POJO-->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!--引入通用mapper的支持-->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<property name="caseSensitive" value="true"/>
</plugin>
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection>
<!--java 代碼方式生成時换况,不能引用其他配置-->
<!--<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"-->
<!--connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true"-->
<!--userId="root"-->
<!--password="12345678">-->
<!--</jdbcConnection>-->
<javaModelGenerator targetPackage="com.ljheee.tk.model" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<javaClientGenerator targetPackage="com.ljheee.tk.mapper" targetProject="src/main/java"
type="XMLMAPPER"/>
<table tableName="user_info">
<generatedKey column="id" sqlStatement="JDBC"/>
</table>
</context>
</generatorConfiguration>
該generatorConfig.xml配置文件职辨,命名必須是這個名字盗蟆。
它的根節(jié)點<generatorConfiguration>戈二,包含以下子元素(有嚴格的順序):
1. <properties> (0個或1個)
2. <classPathEntry> (0個或多個)
3. <context> (1個或多個)
<properties resource="jdbc.properties"/>
引入數(shù)據(jù)庫連接的信息舒裤。
<classPathEntry location="E:\mysql\mysql-connector-java-5.1.29.jar"/>
這個元素的作用是將MBG運行時需要用到的jar包(或zip格式)添加到classpath下。
<context>是最重要的節(jié)點觉吭,它有幾個可選屬性:
-
defaultModelType:這個屬性很重要腾供,這個屬性定義了MBG如何生成實體類。這個屬性有以下可選值:
conditional:這是默認值,這個模型和下面的hierarchical類似鲜滩,除了如果那個單獨的類將只包含一個字段伴鳖,將不會生成一個單獨的類。 因此,如果一個表的主鍵只有一個字段,那么不會為該字段生成單獨的實體類,會將該字段合并到基本實體類中徙硅。
flat:該模型為每一張表只生成一個實體類榜聂。這個實體類包含表中的所有字段。這種模型最簡單嗓蘑,推薦使用须肆。
hierarchical:如果表有主鍵,那么該模型會產(chǎn)生一個單獨的主鍵實體類,如果表還有BLOB字段, 則會為表生成一個包含所有BLOB字段的單獨的實體類,然后為所有其他的字段生成一個單獨的實體類桩皿。 MBG會在所有生成的實體類之間維護一個繼承關(guān)系豌汇。
-
targetRuntime:此屬性用于指定生成的代碼的運行時環(huán)境。該屬性支持以下可選值:
MyBatis3:這是默認值
MyBatis3Simple
Ibatis2Java2
Ibatis2Java5 一般情況下使用默認值即可泄隔,有關(guān)這些值的具體作用以及區(qū)別請查看中文文檔的詳細內(nèi)容拒贱。
introspectedColumnImpl:該參數(shù)可以指定擴展org.mybatis.generator.api.IntrospectedColumn該類的實現(xiàn)類。該屬性的作用可以查看擴展MyBatis Generator佛嬉。
一般情況下逻澳,我們使用如下的配置即可:
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
MyBatis3Simple表示不生成Example,flat表示一張表生成一個POJO暖呕。
<context>下的子節(jié)點
javaModelGenerator指定POJO 生成后的存放路徑
<javaModelGenerator targetPackage="com.ljheee.tk.entity" targetProject="src/main/java"/>
sqlMapGenerator指定Mapper.xml存放路徑
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
javaClientGenerator指定 PojoMapper.java接口 存放路徑
<javaClientGenerator targetPackage="com.ljheee.tk.mapper" targetProject="src/main/java" type="XMLMAPPER"/>
table指定逆向工程赡盘,要從哪個數(shù)據(jù)庫表中生成,可有多個
<table tableName="user_info">
<generatedKey column="id" sqlStatement="JDBC"/>
</table>
執(zhí)行MBG缰揪,生成代碼
1陨享、Maven運行MBG
在pom.xml中完成MBG插件配置的,Maven插件列表就會出現(xiàn)mybatis-generator钝腺,點擊運行即可抛姑,如下圖:
除此之外,沒有添加MBG插件配置的艳狐,還可以使用Java編碼方式運行MBG定硝。
2、使用Java編碼方式運行MBG
Java代碼很容易毫目。這種方式蔬啡,一定確保pom.xml中加入了mybatis-generator-core依賴诲侮。
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(
Generator.class.getResourceAsStream("/generator/generatorConfig.xml"));
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
你只需要在你當前的項目中創(chuàng)建一個類,添加一個main方法箱蟆,在main中寫上上面的代碼即可沟绪。
3、使用Maven命令運行MBG
在pom.xml這一級目錄的命令行窗口執(zhí)行mvn mybatis-generator:generate即可(前提是配置了mvn)空猜。
完整工程:https://github.com/ljheee/my-ssm-mapper
Spring+SpringMVC+MyBatis+通用mapper
使用druid數(shù)據(jù)庫連接池绽慈。
極簡版-腳手架工程。