Live-Server-2-MyBatis-generator逆向生成Pojo、Mapper接口和XML

現在,任何一個互聯網產品都離不開數據,更離不開數據庫。在我還沒了解過Spring和MyBatis以前,作一個簡單的登陸Demo都要手動編寫,用戶類、數據庫操做類、JDBC註冊等,花費了許多時間在與數據庫的交互上。直到有一天,有個小夥伴告訴我:你能夠試一下MyBatis,而後經過MyBatis來管理與數據庫的交互以及實體類的生成。 因而我找到了MyBatis的資料,看到以下一段描述:php

MyBatis 本是Apache的一個開源項目iBatis, 2010年這個項目由Apache Software Foundation 遷移到了Google Code,而且更名爲MyBatis,實質上Mybatis對ibatis進行一些改進。
MyBatis是一個優秀的持久層框架,它對JDBC的操做數據庫的過程進行封裝,使開發者只須要關注 SQL 自己,而不須要花費精力去處理例如註冊驅動、建立Connection、建立Statement、手動設置參數、結果集檢索等JDBC繁雜的過程代碼。
MyBatis經過xml或註解的方式將要執行的各類Statement(Statement、PreparedStatement、CallableStatement)配置起來,並經過Java對象和Statement中的SQL進行映射生成最終執行的SQL語句,最後由MyBatis框架執行SQL並將結果映射成Java對象並返回。java

看到上面的描述,簡單點說就是MyBatis集成了JDBC,而後能夠經過定義Java對象和Statement中的Sql映射來執行SQL語言。心想:好像有點牛逼,可是仍是要本身寫實體類、寫SQL映射啊,有沒有簡單點的方式呢?我就喜歡在數據庫中建立各類主鍵、外鍵、索引,經過Java實體類來生成數據庫表,好像作不到吧??mysql

有一天,我偶然發現有一個叫作MyBatis-generator的逆向插件,能夠將數據庫中的表,直接生成實體POJO類、Dao層等。所以,我就開始了MyBatis-generator的逆向之路。sql

正文開始

項目中使用了MySQL數據庫、MyBatis持久層框架,經過MyBatis-generator生成POJO類、數據映射Mapper和Dao層。數據庫

1、引入MyBatis-generator插件

首先在pom.xml文件中添加以下配置:bash

<dependencies>
    ...
        <!-- 使用mybatis-generator逆向工程 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
</dependencies>

<build>
    <plugins>
      ...
      <!-- 使用mybatis-generator maven插件 -->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
      </plugins>
</build>
複製代碼

2、在MySQL中建立表

建表操做省略... mybatis

圖片.png

3、編寫generator配置文件

<?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>
    <!--數據庫驅動 -->
    <classPathEntry location=".m2\\repository\\mysql\\mysql-connector-java\\5.1.45\\mysql-connector-java-5.1.45.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--數據庫連接地址帳號密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/數據庫名字" userId="帳號" password="密碼">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!--生成Model類存放位置 -->
        <javaModelGenerator targetPackage="com.ljh.po" targetProject="src/main/java/">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!--生成映射文件存放位置 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources/">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!--生成Dao類存放位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.ljh.dao" targetProject="src/main/java/">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!--生成對應表及類名-->
        <table tableName="user" domainObjectName="User"/>
        <table tableName="permission" domainObjectName="Permission" />
        <table tableName="role" domainObjectName="Role" />
        <table tableName="role_permission" domainObjectName="RolePermission" />
    </context>
</generatorConfiguration>
複製代碼

看到上述的配置文件,其實不難理解app

  1. 文檔格式
  2. 數據庫驅動,選擇哪一個JDBC的Jar包
  3. 配置數據庫鏈接:地址、帳號、密碼
  4. 配置Model類的存放位置
  5. 配置映射文件的存放位置
  6. 配置Dao類的存放位置
  7. 本次逆向生成,須要用到的表,以及要生成的類名

4、配置MyBatis-generator的運行環境

MyBatis-generator運行環境.png
在Idea IDE中,選擇運行環境的配置,按照上圖,添加上述屬性便可運行,並生成POJO、Mapper、Dao層等。相對於從POJO、Mapper去建立數據庫表要簡單得多。

注意事項:

  1. 在一次逆向完成後,建議將步驟4中的逆向環境刪除,避免誤操做,從新逆向生成致使Mapper.xml中的映射會被從新複製,運行時報錯和POJO類從新建立,致使POJO中的其餘配置失效:
Result Maps collection already contains value for ***
複製代碼
  1. MyBatis-generator也能夠經過Java代碼來運行,能夠避免重複建立。
public static void main(String[] args) throws Exception {
    List<String> warnings = new ArrayList<String>();
    boolean overwrite = true;
    //指向逆向工程配置文件
    File configFile = new File("generatorConfig.xml"); 
    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);
}
複製代碼
相關文章
相關標籤/搜索