美文网首页DaoSpring框架学习
ORM框架:SpringDataJPA 、Hibernate操作

ORM框架:SpringDataJPA 、Hibernate操作

作者: ___TheOne___ | 来源:发表于2018-07-30 17:54 被阅读42次

    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关键字

    相关文章

      网友评论

        本文标题:ORM框架:SpringDataJPA 、Hibernate操作

        本文链接:https://www.haomeiwen.com/subject/llafvftx.html