ORM框架:SpringDataJPA 、Hibernate操作
2018-07-30 本文已影响42人
___TheOne___
Part1:SpringDataJPA IN操作
1. 问题:
SpringDataJPA是一个非常好用的ORM框架,项目中业务需要使用到 数据库集合关系操作符 IN,之前使用的比较少,在此记录一下。
2.1 操作符 IN 在 UPDATE 中使用
核心点:操作符IN对应的参数,应是一个List<String> 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<String> 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<String> 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<OrOrder> findExpiredOrderState(Integer state, Date nowDate, List<String> bpIds);
Part2:Hibernate IN操作
注意点:
1>通过setParameterList方法来设置IN操作,使用的List数据;
2>传入List的泛型,必须和使用的实体对象的属性是同类型,否则会引发转换错误。
/获取id集合
List<Integer> 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关键字