總結(jié)一篇批量操作吧,
在數(shù)據(jù)庫(kù)操作中挤悉,大家免不了會(huì)有批量查詢,批量更新/刪除的操作巫湘,那么在JPA中装悲,有幾種方式操作呢?
第一種尚氛,當(dāng)然是JPA的原生操作
ListfindAllById(Iterable ids); 批量id查詢
void deleteInBatch(Iterable entities); 批量刪除
大家只需傳入對(duì)應(yīng)的Iterable數(shù)據(jù)即可诀诊,但是這兩種方法參數(shù)不夠靈活,比如deleteInBatch阅嘶,使用時(shí)需要把整個(gè)entityList傳進(jìn)去属瓣,如果我們只有id的話,這個(gè)方法使用起來(lái)就有點(diǎn)雞肋讯柔,這時(shí)候就可以使用第二種方法了
第二種抡蛙,JPA表達(dá)式
即按照J(rèn)PA語(yǔ)法實(shí)現(xiàn)自定義操作,當(dāng)然也包括in類型的操作魂迄,例如
相對(duì)第一種還是非常靈活的粗截,只要按照J(rèn)PA表達(dá)式的規(guī)范語(yǔ)法寫,還是非常好用的捣炬。但是這種方式有一點(diǎn)不好是熊昌,條件如果過(guò)多的時(shí)候,方法名就會(huì)非常長(zhǎng)湿酸,這時(shí)候我們編寫sql就派上用場(chǎng)了婿屹。
第三種,JPQL方式
所謂JPQL就是在方法名上加個(gè)注解@Query推溃,在注解里就可以自己寫sql了昂利。下面舉個(gè)栗子
如果只是查詢的話,就只需要加@Query一個(gè)注解,然后@Query第一個(gè)參數(shù)value寫上自己的sql页眯,參數(shù)按需傳梯捕,sql中的占位下標(biāo)是參數(shù)順序(從1開始),第二個(gè)參數(shù)nativeQuery值設(shè)為true即可窝撵。一個(gè)查詢的JPQL就寫完了傀顾。
如果你要增/刪/改的話,還需要添加其他兩個(gè)注解碌奉,即@Transactional短曾,@Modifying,這兩個(gè)注解不加會(huì)報(bào)錯(cuò)的赐劣。
言歸正傳嫉拐,JPQL中使用 in 查詢,注意 sql 中的 in 后面不需要加括號(hào)了魁兼,直接寫占位符即可婉徘,然后參數(shù)就傳個(gè)List數(shù)組就好啦,快動(dòng)手測(cè)試一下吧咐汞,有問題留言一起討論