1. 程式人生 > >Mybatis-generator修改原始碼實現自定義方法,返回List物件(一)

Mybatis-generator修改原始碼實現自定義方法,返回List物件(一)

Mybatis-generator修改原始碼實現自定義方法,返回Lsit物件——第一篇

本文結合網上的諸多教程,詳細介紹通過修改Mybatis-generator的原始碼, 在自動生成dao層和XML檔案時,新增一個返回List的方法,資料庫使用Mysql
- 1、獲取Mybatis-generator原始碼,並建立專案
- 2、組合原始碼中的示例,實現Dao(Mapper)層新增一個方法
- 3、實現XML檔案新增Dao(Mapper)層的實現

目的:

  • 近期經常要搭建新專案,使用的SSM框架,而且經常要改資料庫結構,但是在用Mybatis-generator自動生成的時候,僅有幾個預設的方法,
  • 這裡寫圖片描述
    感覺不夠用,例如我需要下面這樣的方法:
 User user= new User();
 List<User> list=userMapper.selectByObject(user);

設定實體類user物件的任何屬性,根據屬性查詢出所有的資料,屬性為null則SQL語句中不新增這個條件
不設定任何屬性,則預設返回所有資料

1、 獲取Mybatis-generator原始碼,並建立專案

網上有非常多的教程,比如一些修改格式、註釋的教程,大家也可以去看看,那麼我們這裡先講講怎麼獲取原始碼。
首先我建一個maven專案,我用的是Myeclipse10,建好以後,在pom.xml中新增這個3個依賴:

    <dependency>
        <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2
.17</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.7</version> </dependency>

junit 的依賴必須還存在,把這些包下載下來以後,開啟org.mybatis.generator裡頭的隨便一個CLASS檔案,
這裡寫圖片描述

剛開始顯示找不到原始碼,過一會兒就會把原始碼下載下來,然後你去你的maven庫中找,比如這是我的路徑:H:\mavenjar\org\mybatis\generator\mybatis-generator-core\1.3.2
這裡寫圖片描述

帶-sources的就是原始碼的jar,
把它解壓,就可以得到.java的檔案
這裡寫圖片描述
開啟路勁可以看到這些資料夾,在專案中建立src/main/java目錄,然後建立 org.mybatis.generator 包,將截圖中的檔案全選複製到這個包下面,
然後在src/main/resources 資料夾下新增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>
    <classPathEntry
        location="H:\generator\mysql-connector-java-5.1.6-bin.jar" />
    <context id="mysqlTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/servermonitor"
            userId="root" password="123456">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

         <!-- 生成model模型,對應的包,存放位置可以指定具體的路徑,如/ProjectName/src,也可以使用MAVEN來自動生成 -->
        <javaModelGenerator targetPackage="com.servermonitor.entity"
            targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

         <!--對應的xml mapper檔案  -->
        <sqlMapGenerator targetPackage="mybatis" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 對應的dao介面 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.servermonitor.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

         <!-- 這裡是資料庫的表名table_user 以及 POJO類的名字User -->
 <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
    </context>

</generatorConfiguration>

我直接將Mysql的包放在 H:\generator\mysql-connector-java-5.1.6-bin.jar這裡,這個可以自己去改,
然後建立一個包,一個生成的類,
專案結構截圖
生成類的程式碼如下:

package org.mybatis.generator.extend;  

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import org.mybatis.generator.api.ShellRunner;  

public class MyTestRun {  

    public static void main(String[] args) {  
        String config = MyTestRun.class.getClassLoader().getResource("generatorConfig.xml").getFile();  

        try {
            config=URLDecoder.decode(config, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String[] arg = { "-configfile", config, "-overwrite" };  
        ShellRunner.main(arg);  
    }  
}  

我本身的工作空間資料夾名稱有空格,所以在獲取路徑的時候,會出現%20這種情況,所以需要轉碼,你們如果沒有這種的,是不需要decode的,就是try裡頭的程式碼;
把專案報錯的的地方改好,然後執行這個main方法,就會生成一系列的檔案,這裡就不介紹了,生成檔案的後,大家可以看到dao層的方法只有幾個預設的方法,前提是你已經連線好了資料庫,並且你的資料庫裡有個表
下一篇我們會找到生成它們的方法,並做修改