Mybatis重置Criteria的正確姿勢

2021-08-25 19:26:42 字數 954 閱讀 9599

開發中遇到mybatis生成的example通過呼叫createcriteria()來建立criteria並設定查詢條件的情況。

但是需要換乙個查詢條件再次查詢時發現再次呼叫該方法「無效果"。

看到大多數的做法是通過new乙個新的example來查詢,考慮到可能不是最好的或者最合理的做法,對此進行了簡單研究。

發現問題原因如下,我們看下生成的exmaple的原始碼:

public criteria createcriteria() 

return criteria;

}protected criteria createcriteriainternal()

發現呼叫createcriteria(),雖然每次建立乙個新的criteria物件但是只有 

protected listoredcriteria
這個列表長度為0時才會新增,進去。

檢視對映的xml檔案時發現,查詢條件正是取自於oredcriteria。

只有呼叫or時才新增到該集合中

public void or(criteria criteria)
那麼我們想重置查詢條件怎麼辦?

兩種方法:

一種是只清空example的oredcriteria屬性。

那麼可以通過example類中的getoredcriteria() 函式獲取該列表後通過clear方法清空。

public listgetoredcriteria()
另外一種更徹底的方法,直接呼叫example的clear() 方法,將exmple物件「重置」為初始狀態。

public void clear()
得出乙個結論:遇到問題,多看原始碼,多看官方文件。

重置mysql 密碼 mysql重置密碼

ubuntu下重置mysql的root密碼 sudo vi etc mysql my.cnf,在 mysqld 段中加入一行 skip grant tables sudo service mysql restart,重啟mysql服務 sudo mysql u root p mysql,用空密碼進入...

mysql id重置密碼 mysql 重置密碼

mysql 重置密碼 版本5.7之前 1 修改mysql配置檔案 vi etc my.cnf 注 windows下修改的是my.ini 在 mysqld 後面任意一行新增 skip grant tables 用來跳過密碼驗證的過程。重啟mysql 2 進入mysql root localhost m...

mysql 重置密碼 mysql 重置密碼

mysql 重置密碼 版本5.7之前 1 修改mysql配置檔案 vi etc my.cnf 注 windows下修改的是my.ini 在 mysqld 後面任意一行新增 skip grant tables 用來跳過密碼驗證的過程。重啟mysql 2 進入mysql root localhost m...