1. 程式人生 > >[mybatis]Example的用法

[mybatis]Example的用法

Example類是什麼?

Example類指定如何構建一個動態的where子句. 表中的每個non-BLOB列可以被包括在where子句中. 例子是展示此類用法的最好方式.

Example類可以用來生成一個幾乎無限的where子句.

Example類包含一個內部靜態類 Criteria 包含一個用 anded 組合在where子句中的條件列表. Example類包含一個 List 屬性,所有內部類Criteria中的子句會用 ored組合在一起. 使用不同屬性的 Criteria 類允許您生成無限型別的where子句.

建立 Criteria 物件 可以使用Example類中的 createCriteria() 或者 or() . 如果 Criteria 物件是用 createCriteria() 建立的,它會自動為 List 屬性新增一個 Criteria 物件 - 這使得它更容易寫一個簡單的where子句, 如果您不需要 or 或者其他幾個子句組合的話. 用 or(Criteria criteria) 方法建立 Criteria 物件, 方法裡的 criteria 物件會被新增進 Criteria 物件的列表中.

重要 我們推薦您只使用 or() 方法建立 Criteria 物件. 我們相信這種方法使程式碼更有可讀性.

如何生成Example類?

mybatis的的配置檔案可以使用mybatis-generator工具生成,它就可以幫我們生成example類。
根據 Mybatis 程式碼生成工具文件,需要一個配置檔案,這裡命名為:mbgConfiguration.xml放在 src 目錄下. 配置檔案內容如下:

    <?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>

      <!-- 配置mysql 驅動jar包路徑.用了絕對路徑 -->
      <classPathEntry location="D:\Work\Java\eclipse\workspace\myBatisGenerator\WebContent\WEB-INF\lib\mysql-connector-java-5.1.22-bin.jar" />

      <context id="yihaomen_mysql_tables" targetRuntime="MyBatis3">

        <!-- 為了防止生成的程式碼中有很多註釋,比較難看,加入下面的配置控制 -->
        <commentGenerator>
          <property name="suppressAllComments" value="true" />
          <property name="suppressDate" value="true" />
        </commentGenerator>
        <!-- 註釋控制完畢 -->

        <!-- 資料庫連線 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"
            userId="root"
            password="password">
        </jdbcConnection>

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

        <!-- 資料表對應的model 層  -->
        <javaModelGenerator targetPackage="com.yihaomen.model" targetProject="src">
          <property name="enableSubPackages" value="true" />
          <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- sql mapper 隱射配置檔案 -->
        <sqlMapGenerator targetPackage="com.yihaomen.mapper"  targetProject="src">
          <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 在ibatis2 中是dao層,但在mybatis3中,其實就是mapper介面 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.yihaomen.inter"  targetProject="src">
          <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- 要對那些資料表進行生成操作,必須要有一個. -->
        <table schema="mybatis" tableName="category" domainObjectName="Category" 
            enableCountByExample="false" enableUpdateByExample="false"
            enableDeleteByExample="false" enableSelectByExample="false"
            selectByExampleQueryId="false">     
        </table>

      </context>
    </generatorConfiguration>

當我們需要生成example類的時候,需要table裡面去掉

enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"

example如何使用?

簡單查詢

這個例子展示瞭如何用生成後的Example類去生成一個簡單的where子句:

TestTableExample example = new TestTableExample();

example.createCriteria().andField1EqualTo(5);
作為另一種選擇, 下面的方式也是可以的:

TestTableExample example = new TestTableExample();

example.or().andField1EqualTo(5);
在上面的例子中, 動態生成的where子句是:

where field1 = 5

下面的例子展示瞭如何用生成後的Example類去生成一個複雜的where子句 (用到了 JSE 5.0 的泛型):

TestTableExample example = new TestTableExample();

example.or()
.andField1EqualTo(5)
.andField2IsNull();

example.or()
.andField3NotEqualTo(9)
.andField4IsNotNull();

List field5Values = new ArrayList();
field5Values.add(8);
field5Values.add(11);
field5Values.add(14);
field5Values.add(22);

example.or()
.andField5In(field5Values);

example.or()
.andField6Between(3, 7);

在上面的例子中, 動態生成的where子句是:

where (field1 = 5 and field2 is null)
or (field3 <> 9 and field4 is not null)
or (field5 in (8, 11, 14, 22))
or (field6 between 3 and 7)
將會返回滿足這些條件的記錄結果.

去重複查詢
您可以在所有的Example類中呼叫 setDistinct(true) 方法進行強制去重複查詢.

Criteria類
Criteria 內部類的每個屬性都包含 andXXX 方法,以及如下的標準的SQL查詢方法:

IS NULL - 指相關的列必須為NULL
IS NOT NULL - 指相關的列必須不為NULL
= (equal) - 指相關的列必須等於方法引數中的值
<> (not equal) - 指相關的列必須不等於方法引數中的值

(greater than) - 指相關的列必須大於方法引數中的值
= (greater than or equal) - 指相關的列必須大於等於方法引數中的值
< (less than) - 指相關的列必須小於於方法引數中的值
<= (less than or equal) - 指相關的列必須小於等於方法引數中的值
LIKE - 指相關的列必須 “like” 方法引數中的值. 這個方法不用必須加入 ‘%’, 您必須設定方法引數中的值.
NOT LIKE - 指相關的列必須 “not like” 方法引數中的值. 這個方法不用必須加入 ‘%’, 您必須設定方法引數中的值.
BETWEEN - 指相關的列必須在 “between” 方法引數中的兩個值之間.
NOT BETWEEN - 指相關的列必須不在 “not between” 方法引數中的兩個值之間.
IN - 指相關的列必須在傳入的方法引數的list中.
NOT IN - 指相關的列必須不在傳入的方法引數的list中.