當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
mybatis if test 用法_SpringBoot整合Mybatis-Plus 实战之动态SQL,Mybatis拿得出手的功能之一...
生活随笔
收集整理的這篇文章主要介紹了
mybatis if test 用法_SpringBoot整合Mybatis-Plus 实战之动态SQL,Mybatis拿得出手的功能之一...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MyBatis的動態SQL是最令人喜歡的功能
在了解 動態SQL之前,你首先得知道一個表達式 OGNL,這個是基礎!
- 面試常問問題 : Mybatis 中$與#的區別?
- 是將傳入的值當做字符串的形式,select id,name,age from test where id =#{id},
當把id值傳入到后臺的時候,就相當于 select id,name,age from test where id =‘1’. - ""是將傳入的數據直接顯示生成sql語句,selectid,name,agefromtestwhereid="是將傳入的數據直接顯示生成sql語句,select id,name,age from test where id = "是將傳入的數據直接顯示生成sql語句,selectid,name,agefromtestwhereid={id},
當把id值1,傳入到后臺的時候,就相當于 select id,name,age from test where id = 1. - 使用#可以很大程度上防止sql注入。(語句的拼接)
if 標簽
- mapper
select from test where 1=1 and username like concat('%', #{username}, '%') and ip=#{ip} - 在mapper 接口中映射這個方法
List selectByTestSelective(Test example);
下面每個標簽都會有對應的方法,但下文沒有一一寫出,現參考如下
List<Test> selectByExample(TestExample example); List<Test> selectByTestSelective(Test example); List<Test> selectByIdOrUserName(Test example); List<Test> selectByTestSelectiveWhereTag(Test example); List<Test> selectByTestIdList(List<Integer> ids); int insertList(List<Test> students); int updateTestSetTag(Test example); int selectSelectiveTrim(Test example);- 測試
- 打印結果
- 也就是說,你傳什么值 它會根據你傳的值來拼接sql,不傳值則不拼接,這種相對來說比較簡單,易于理解。
【注意】 下文所有的請求都是通過postman發出的。
include標簽
- 一個非常好用的輔助性標簽,用于放一些公共的返回結果集,方便其他的查詢方法使用,比如在mapper中使用方式如下:
username, lastloginTime select from test where id = #{id,jdbcType=BIGINT}
choose標簽 ,配合when ,otherwise 標簽使用
choose when otherwise 標簽可以幫我們實現 if else 的邏輯。一個 choose 標簽至少有一個 when,最多一個otherwise。
- mapper
select from test where 1=1 and id=#{id} and username=#{username} and 1=2 - 打印結果
找不到 周 ,因為我只有周杰倫或者周杰 。 這個choose和 if 的功能有點類似,但是和if 不同的是choose 有點你有什么我就根據你給的查,而if 則是你傳了所有條件,我逐個判斷你的條件然后給你查。if 更多適用于表單查詢的時候用。而choose 更多的時候。。。其實這兩個達到的目的是一樣的,我更喜歡用choose.
where 標簽
- mapper
select from test and username like concat('%', #{username}, '%') and ip=#{ip} - 結果
- 我什么條件也沒傳,他在where中找不到匹配的條件就查找了全部給了我,這種其實和上面choose 中的最后那個條件有異曲同工之處,上變改成1=1 一樣的效果。
foreach 標簽
- mapper
select from test where id in #{id} - 代碼
- 結果
- 這個標簽太好用了,foreach 也可以用來批量插入數據,比如:
- mapper
insert into test(username, gender, ip) values ( #{test.username}, #{test.gender},#{test.ip} ) - 代碼
- 結果
- .........這里的mapper 每次修改都要重新啟動,很是麻煩。注意這里 #{test.username}, #{test.gender},#{test.ip} 最后不要有逗號,否則會報一個sql語法錯誤,原因是多了,。還有就是這里如果傳的值是list等非實體類的參數的時候,是不用聲明parameterType 的。
- foreach 的變量說明
collection: 必填, 集合/數組/Map的名稱. item: 變量名。即從迭代的對象中取出的每一個值 index: 索引的屬性名。當迭代的對象為 Map 時, 該值為 Map 中的 Key. open: 循環開頭的字符串 close: 循環結束的字符串 separator: 每次循環的分隔符
bind 標簽
- 使用 bind 來讓該 SQL 達到支持兩個數據庫的作用
- mapper
select from test where 1=1 <bind name="nameLike" value="'%'+username+'%'"/> and username like #{nameLike} </if> <if test="ip != null"> and ip=#{ip} </if> - 代碼
@RequestMapping(value = "/dongtaiSql") @ResponseBody public void dongtaiSql() { Test example = new Test(); example.setUsername("周"); List selectByTestSelective = testMapper.selectByTestSelective(example); for (Test test : selectByTestSelective) { System.out.println(test.getUsername()); } } - 結果
發現依然可以。 說明這個bind 就是綁定一些變量的 ,nameLike 就代表了username 的模糊搜索,就是如果別的地方用得到它的模糊搜索,拿來用即可。用法是 like 后面直接加上 #{nameLike }。
set 標簽
這個標簽常用于做修改語句,比如
- mapper
UPDATE Products username = #{username}, ip = #{ip}, id = #{id} - 代碼
@RequestMapping(value = "/dongtaiSql5") @ResponseBody public void dongtaiSql5() { Test example = new Test(); example.setUsername("周"); example.setIp("cium"); example.setId(27); int selectByTestSelective = testMapper.updateTestSetTag(example); System.out.println(selectByTestSelective);
} - 結果
- 這個set 說白了就是update語句的 set 時候的一個靈活操作。
trim 標簽
- mapper
select * from test AND username=#{username} AND ip=#{ip} - 【注意】
- 這里有很多坑,首先mybatis-plus 中不是 prefixoverride 而是prefixOverrides
- 然后"AND |OR" 必須有空格,原因如下圖
- 如果 ip 不是字符串就不能用length() 方法
trim標簽各參數的說明
prefix:在trim標簽內sql語句加上前綴。 suffix:在trim標簽內sql語句加上后綴。 prefixOverrides:指定去除多余的前綴內容 suffixOverrides:指定去除多余的后綴內容,如:suffixOverrides=",",去除trim標簽內sql語句多余的后綴","。 復制代碼然而我在配置的時候卻遇到了更坑的問題,遲遲得不到解決…歡迎有興趣的朋友一起交流下解決最后這個問題。
最后
感謝大家看到這里,文章有不足,歡迎大家指出;如果你覺得寫得不錯,那就給我一個贊吧。
作者:程序員麥冬
鏈接:https://juejin.cn/post/6901900140655673357
來源:掘金
總結
以上是生活随笔為你收集整理的mybatis if test 用法_SpringBoot整合Mybatis-Plus 实战之动态SQL,Mybatis拿得出手的功能之一...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mock模拟接口测试_Python接口测
- 下一篇: python 函数调用 不允许关键字参数