MyBatis傳入List集合查詢數(shù)據(jù)問題
MyBatis傳入List集合查詢數(shù)據(jù)
使用的是SSM框架,數(shù)據(jù)庫是MySQL,做查詢的時候傳入List集合,使用SQL語句的in方式查詢數(shù)據(jù)
主要有兩點問題
我的List集合是利用的另外一個語句查詢出來的,傳入?yún)?shù)是int類型,返回值是int類型的List集合:
List<Integer> select(Integer id);
<select id="select" resultType="java.util.List" ?? ?parameterType="java.lang.Integer"> ?? ?select id ?? ?from section ?? ?where status='A' ?? ?and unit_id=#{id,jdbcType=INTEGER} </select>
這是我第一次的時候使用的返回值類型(java.util.List),這種情況下在我執(zhí)行的時候會報錯:java.lang.UnsupportedOperationException
其實這里如果我們是要返回指定類型的集合直接寫java.lang.Integer(int類型)java.lang.String(字符串)等等就可以了,當然也可以自定義一個resultMap
<select id="select" resultType="java.lang.Integer" ?? ?parameterType="java.lang.Integer"> ?? ?select id ?? ?from section ?? ?where status='A' ?? ?and unit_id=#{id,jdbcType=INTEGER} </select>
上面是通過一個id查詢出List集合,下面是將查到的這個List集合放入查詢條件中:
List<Test> selectById(List<Integer> id);
<select id="selectById" parameterType="java.util.List" ?? ?resultMap="BaseResultMap"> ?? ?select * from test ?? ?where status = 'A' ?? ?and id in ?? ?<foreach collection="list" index="index" item="item" open="(" ?? ??? ?separator="," close=")"> ?? ??? ?#{item} ?? ?</foreach> </select>
上述的查詢語句可以整合在一個sql語句中,這里為了創(chuàng)造list數(shù)據(jù)所以分開了。
使用foreach 語句循環(huán)集合中的數(shù)據(jù),item就是循環(huán)到的數(shù)據(jù),如果你是一個復雜類型的數(shù)據(jù)做批量插入的話可以使用item.屬性名 的方式獲取對應值,類似于java的foreach循環(huán)語句,某些時候可能傳入的是Array數(shù)組,畢竟都說Array比List效率高,這種時候和上述方法類似,也是foreach語句。具體的分析后續(xù)更新。
MyBatis傳入List集合批量刪除
Model
public class FastDFSModel { ? ? private String pathId; ? ? private String modelId; ? ? private String csvpath; ? ? private String resultpath; ? ? private String updatetime; ? ? }
Dao
import org.apache.ibatis.annotations.Param; ?void deleteDateById(@Param("list") List<FastDFSModel> deleteList);
mapper
其中parameterType寫為list
foreach 中的collection寫為"list"
item 為遍歷的每一項,代表著model
在變量中用#{item.pathId}來獲取值
此業(yè)務為通過id進行刪除
其中open="(" separator="," close=")"為拼接的in查詢,把id用逗號拼接起來
?<delete id="deleteDateById" parameterType="java.util.List"> ? ? ? ? delete from T_FASTDFS_PATH t where t.path_id in ? ? ? ? <foreach item="item" collection="list" open="(" separator="," close=")"> ? ? ? ? ? ? #{item.pathId,jdbcType=VARCHAR} ? ? ? ? </foreach> ? ? </delete>
控制臺打印如下
delete from T_FASTDFS_PATH t where t.path_id in ( ? , ? , ? )
PreparedStatement - ==> Parameters: 2(String), 1(String), 3(String)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Springboot集成Elasticsearch的步驟與相關功能
ElasticSearch是開源搜索平臺領域的一個新成員,?ElasticSearch是一個基于Lucene構(gòu)建的開源,分布式,RESTful搜索引擎,這篇文章主要給大家介紹了關于Springboot集成Elasticsearch的相關資料,需要的朋友可以參考下2021-12-12Java微服務分布式調(diào)度Elastic-job環(huán)境搭建及配置
Elastic-Job在配置中提供了JobEventConfiguration,支持數(shù)據(jù)庫方式配置,會在數(shù)據(jù)庫中自動創(chuàng)建JOB_EXECUTION_LOG和JOB_STATUS_TRACE_LOG兩張表以及若干索引,來記錄作業(yè)的相關信息2023-02-02SpringBoot前后端分離項目之打包、部署到服務器詳細圖文流程
作為后臺開發(fā),項目打包部署是經(jīng)常性的操作,下面這篇文章主要給大家介紹了關于SpringBoot前后端分離項目之打包、部署到服務器的相關資料,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下2023-12-12spring-boot集成spring-security的oauth2實現(xiàn)github登錄網(wǎng)站的示例
本篇文章主要介紹了spring-boot集成spring-security的oauth2實現(xiàn)github登錄網(wǎng)站的示例,非常具有實用價值,需要的朋友可以參考下2017-10-10