讓前端的下拉框支援單選、多選及全選,後台MyBaits解決方案
一、解決思路
讓前端的下拉框支援單選、多選及全選,後台讓Mybatis使用** trim **標籤拼接動態SQL,實現
select * from order
where startDate = sysdate
and (name="A" or name="B" or name="C")
-----------------------------------------------
--當用戶全選時,捨棄掉最後的 and() 條件
select * from order
where startDate = sysdate
二、請求參數
入參說明
// 單選
{
"date":"2021-10-1",
"name":["A"]
}
// 多選
{
"date":"2021-10-1",
"name":["A","B","C"]
}
// 全選
{
"date":"2021-10-1",
"nameList":["all"]
}
三、後台相關程式碼
- 1、請求的入參對應的實體類
@Data
public SelectReq{
private String date;
private List<String> nameList;
}
* 2、Mybatis映射文件
<select id="selectByBeans" resultMap="BaseResultMap" parameterType="com.wg.demo.po.SelectReq">
select
*
from employee
where date = to_date(#{date},'yyyy-mm-dd')
<trim prefix="and (" suffix=")" suffixOverrides="and | or">
<foreach collection="nameList" item="item">
<if test='name != "all"'>
name=#{item} or
</if>
</foreach>
</trim>
</select>
四、Mybatis注意要點
- trim標籤一般用於去除sql語句中多餘的and關鍵字,逗號,或者給sql語句前拼接 「where「、「set「以及「values(「 等前綴,或者添加「)「等後綴
| prefix | 給sql語句拼接的前綴 |
|---|---|
| suffix | 給sql語句拼接的後綴 |
| prefixOverrides | 去除sql語句前面的關鍵字或者字元,該關鍵字或者字元由prefixOverrides屬性指定,假設該屬性指定為"AND",當sql語句的開頭為"AND",trim標籤將會去除該"AND" |
| suffixOverrides | 去除sql語句後面的關鍵字或者字元,該關鍵字或者字元由suffixOverrides屬性指定 |
- foreach表示循環操作,具體的參數含義如下:
| foreach | 元素的屬性主要有 item,index,collection,open,separator,close。 |
|---|---|
| item | 表示集合中每一個元素進行迭代時的別名 |
| index | 指定一個名字,用於表示在迭代過程中,每次迭代到的位置 |
| open | 表示該語句以什麼開始 |
| separator | 表示在每次進行迭代之間以什麼符號作為分隔符 |
| close | 表示以什麼結束 |
- if 標籤判斷字元串
<if test = 'sex == "Y"'>
這裡注意,外層用單引號,字元串用雙引號包裹

