轉自:https://blog.csdn.net/zhemeban/article/details/71901759java
Example類指定如何構建一個動態的where子句. 表中的每一個non-BLOB列能夠被包括在where子句中. 例子是展現此類用法的最好方式.mysql
Example類能夠用來生成一個幾乎無限的where子句.sql
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 對象的列表中.mybatis
重要 咱們推薦您只使用 or() 方法建立 Criteria 對象. 咱們相信這種方法使代碼更有可讀性.app
mybatis的的配置文件可使用mybatis-generator工具生成,它就能夠幫咱們生成example類。
根據 Mybatis 代碼生成工具文檔,須要一個配置文件,這裏命名爲:mbgConfiguration.xml放在 src 目錄下. 配置文件內容以下:less
<?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裏面去掉dom
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"
這個例子展現瞭如何用生成後的Example類去生成一個簡單的where子句:eclipse
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中.