ORM框架:SpringDataJPA 、Hibernate操作符 IN 的使用

Part1:SpringDataJPA IN操作

1. 问题:

SpringDataJPA是一个非常好用的ORM框架,项目中业务需要使用到 数据库集合关系操作符 IN,之前使用的比较少,在此记录一下。

2.1 操作符 IN 在 UPDATE 中使用

核心点:操作符IN对应的参数,应是一个List bpIds。SpringDataJPA底层会把其转换为原生SQL语句:
bp_id in ('ZAM001','ZAY001','AXM001','AXY001')

1>使用对象属性操作:

    @Query("update OrOrder oo set oo.state=?4 where oo.state=?1 and oo.policyETime<=?2 and oo.bpId IN ?3")
    public int updataExpiredOrderState(Integer state, Date nowDate, List bpIds, Integer updateState);

2> 使用原生的SQL语句:

    @Modifying
    @Query(value = "update or_order set state=?4 where state=?1 and policy_e_time<=?2 and bp_Id IN ?3", nativeQuery = true)
    public int updataExpiredOrderState(Integer state, Date nowDate, List bpIds, Integer updateState);

2.2 操作符 IN 在 SELECT 中使用

1> 使用对象属性操作;
2> 使用原生的SQL语句:

    @Query(value = "select * from or_order where state=?1 and policy_e_time<=?2 and bp_Id IN ?3", nativeQuery = true)
    public List findExpiredOrderState(Integer state, Date nowDate, List bpIds);

Part2:Hibernate IN操作

注意点:
1>通过setParameterList方法来设置IN操作,使用的List数据;
2>传入List的泛型,必须和使用的实体对象的属性是同类型,否则会引发转换错误。

/获取id集合
List menuIds =  this.getSession().createSQLQuery(concatSql).setParameter(0,userId).list();
//查询菜单对象
String hql = "from SystemMenu where id in (:menuIds) and enable=:enabled";
return this.getSession().createQuery(hql).setParameterList("menuIds", newIds).setParameter("enabled", Boolean.TRUE).list();

文章引用:
1.Spring-data-jpa 之Specification in的用法
2.Hibernate如何使用in关键字

你可能感兴趣的:(ORM框架:SpringDataJPA 、Hibernate操作符 IN 的使用)