Mybatis--如何在註解式sql中寫入動態的SQL語句
阿新 • • 發佈:2018-12-10
突然需要用到動態SQL,應為之前我們用的是在Mapper層建立一個介面類,然後通過註解式來查詢資料庫的:如下
@Select("SELECT user_id " + " FROM sp_user_relation WHERE up_user_id=#{userId} OR user_id=#{user_id}") @Results({ @Result(property = "userId", column = "user_id") }) List<String> getId(String userId);
這樣子寫死後不之如何才能寫成動態,便去網上查詢,發現如下寫法:
但是發現這樣子太麻煩了,便找尋其他方式,功夫不負有心人,真被我找到了,話不多說,上程式碼:
@Select("<script>SELECT promo_user_id,promoed_name,promoed_phone " + " FROM sp_promo_his <if test=' name != null or phone!=null'>order by </if> " + " <if test='name!=null'> promoed_name </if> " + " <if test='phone!=null and name!=null'>,promoed_phone</if> " + " <if test='phone!=null and name==null'> promoed_phone</if></script>") @Results({ @Result(property = "userId", column = "promo_user_id"), @Result(property = "name", column = "promoed_name"), @Result(property = "phone", column = "promoed_phone") }) List<AbcdBean> getAbloud(@Param("name")String name,@Param("phone")String phone);
這段程式碼也是用了註解式SQL,在其中用script標籤包圍,然後像xml語法一樣書寫;
其中動態SQL處使用 If 標籤做判斷 <if test='判斷語句,true則執行標籤內語句'>
注:
@Param 標籤用於 傳入值 用 標籤括號裡的引數接收,然後在放入sql中運用
測試成功了,可是如果多條資料判斷則出現另一個問題,if內要判斷多次,並且多引數中的逗號不好確定,這是絕不可取的,然後我又找到一個標籤解決了:
程式碼如下
@Select("<script>SELECT promo_user_id,promoed_name,promoed_phone " + " FROM sp_promo_his <trim prefix='order by' prefixOverrides=','> " + " <if test='name!=null'> ,promoed_name </if><if test='phone!=null'> ,promoed_phone </if> </trim></script>") @Results({ @Result(property = "userId", column = "promo_user_id"), @Result(property = "name", column = "promoed_name"), @Result(property = "phone", column = "promoed_phone") }) List<AbcdBean> getAbloud(@Param("name")String name,@Param("phone")String phone);
這次使用了<trim>標籤,省去了之前很長的判斷,
<trim>節點標籤:
trim主要功能是可以在Trim包含的內容前加上某些字首(prefix),也可以在Trim包含的內容之後加上某些字尾(suffix)
還可以把Trim包含內容的首部的某些內容忽略掉(prefixOverrides) ,也可以把Trim包含的內容的尾部的某些內容忽略掉(suffixOverrides),
使用了這個標籤後,之前的問題變很輕鬆的解決了.
注:
<trim prefix='order by' prefixOverrides=','>xxxx</trim>
之前我在這段標籤前加一個 if 標籤包含這段代嗎,應為擔心 標籤中為空 但SQL 會加 order by 但經測試後發現標籤內容為空則presfix值不會自動新增