讓前端的下拉框支持單選、多選及全選,后台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"'>
這里注意,外層用單引號,字符串用雙引號包裹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM