您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在mybatisplus中正確的使用 in方法,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
步驟如下:
//查詢到list集合 List<User> userList = userService.selectById(id); //結果集 List<String> resultList = new ArrayList<>(); //遍歷集合取值 userList .forEach(item->{ resultList.add(item.getYouNeedId()); }); //條件構造器in上手使用 QueryWrapper<User> qw = new QueryWrapper<>(); qw.in("you_need_id", resultList); //這里有個分頁的查詢,你也可以不用分頁,用mybatisplus里面封裝的其他方法 IPage<User> userIPage = userMapper.selectPage(page, qw); //返回查詢結果,getRecords也是mybatisplus里面封裝的方法 return contractRecordIPage.getRecords();
補充知識:Mybatis plus中使用in查詢出錯是怎么回事
我的情況是這樣的,在使用mybatis plus提供的QueryWrapper方法里的in查詢時,我的參數為類似“1,2,3,4”這樣的字符串
//要查的參數 String masterIds = "81554,5654,55948,48945"; QueryWrapper<FpjyPauperInfo> pauperqw = new QueryWrapper<>(); pauperqw.in("user_id",masterIds); UserInfoService.list(pauperqw);
結果返回的數據與在數據庫查出來的數據不一樣(這是我的情況,不知道你們會不會這樣),我看了控制臺的sql代碼
==> Preparing:SELECT user_id,user_name,update_job_dt,group_name,create_dt,create_by, update_dt,update_by FROM fpjy_pauper_info WHERE (user_id IN (?)) ==> Parameters: 81554,5654,55948,48945(String) <== Total: 0
查詢錯誤原因
我就在網上早了一下發現,在使用mybatis plus提供的QueryWrapper方法時,你給它的參數是String類型時,在控制臺上看著是對的,但是他會默認在參數的前面和后面加上單引號,因為在mybatis plus里的xml配置文件里(類似于UserInfoMapper.xml的文件),給的參數是用 #{參數名} 的方式
//這段代碼只是舉個例子
SELECT * FROM userinfo WHERE (user_id IN (#{ids}))
解決方法
這只是我這種情況的解決方法哦
一、找到你要使用的對象的xml文件(類似于UserInfoMapper.xml的文件)在里面自定義sql語句代碼,給參數要用 ${參數名} 的方式,不會自定義sql語句可以去網上查查,網上有太多了,在這里我就不寫了。
//這段代碼只是舉個例子
SELECT * FROM userinfo WHERE (user_id IN (${ids}))
控制臺sql語句輸出結果
==> Preparing:SELECT * FROM fpjy_pauper_info WHERE (user_id IN (81554,5654,55948,48945)) ==> Parameters: <== Total: 4
二、QueryWrapper方法里的in查詢時,入參不能是字符串,改成一個數組
關于如何在mybatisplus中正確的使用 in方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。