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