总结一篇批量操作吧,
在数据库操作中,大家免不了会有批量查询,批量更新/删除的操作,那么在JPA中,有几种方式操作呢?
第一种,当然是JPA的原生操作
ListfindAllById(Iterable ids); 批量id查询
void deleteInBatch(Iterable entities); 批量删除
大家只需传入对应的Iterable数据即可,但是这两种方法参数不够灵活,比如deleteInBatch,使用时需要把整个entityList传进去,如果我们只有id的话,这个方法使用起来就有点鸡肋,这时候就可以使用第二种方法了
第二种,JPA表达式
即按照JPA语法实现自定义操作,当然也包括in类型的操作,例如
相对第一种还是非常灵活的,只要按照JPA表达式的规范语法写,还是非常好用的。但是这种方式有一点不好是,条件如果过多的时候,方法名就会非常长,这时候我们编写sql就派上用场了。
第三种,JPQL方式
所谓JPQL就是在方法名上加个注解@Query,在注解里就可以自己写sql了。下面举个栗子
如果只是查询的话,就只需要加@Query一个注解,然后@Query第一个参数value写上自己的sql,参数按需传,sql中的占位下标是参数顺序(从1开始),第二个参数nativeQuery值设为true即可。一个查询的JPQL就写完了。
如果你要增/删/改的话,还需要添加其他两个注解,即@Transactional,@Modifying,这两个注解不加会报错的。
言归正传,JPQL中使用 in 查询,注意 sql 中的 in 后面不需要加括号了,直接写占位符即可,然后参数就传个List数组就好啦,快动手测试一下吧,有问题留言一起讨论