天天看點

mybatis 中标簽bool值類型為false判斷

對百度的某些文章深惡痛絕, 隻是ctrl+c和ctrl+v。并且還不能解決問題。

昨天實作一個功能,根據文章的id或者别名查找文章。

起初采用mybatis的Example進行查詢,對參數artName進行判斷,如果是純數字就byId查詢,否則就by别名。由于查詢文章的同時,需要關聯查詢文章分類标簽,是以選擇采用select語句映射的方式查詢,但又不想寫兩個查詢方法,就使用了mybatis中動态sql。

/**

* 查詢文章

* @param artName id 或 别名

* @param byId 如果是 true 則按照id查詢

* 否則 按照别名查詢

* @return

*/

public Article selectByArtName(@Param(value = "artName") String artName,

@Param(value = "byId") Boolean byId);

mapper中定義了一個方法,有artName和byId兩個參數,artName 表示id 或 别名,byId表示是否通過id查詢。

對byId Boolean值進行判斷時,出現false值無效的情況,在百度了一圈發現,普遍采用

<if test="byId != null">

a.id = #{artName}

</if>

這種方式,當byId=true時正常執行,但為false時不生效。後采用标簽

<choose>

<when test="byId">

a.id = #{artName}

</when>

<otherwise>

a.alias = #{artName}

</otherwise>

</choose>

byId本身是bool值,不用進行判斷。

注意: byId不用加#{},不然false也會無效,如果加了#{}, 在與其他值進行比較時,

如:#{byId} == true 會報空指針錯誤,如果寫成#{byId} == ‘true’ 會報Linkhashmap無法轉換成String類型錯誤。

————————————————

版權聲明:本文為「歐陽豐」的原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結及本聲明。

繼續閱讀