美文网首页
【JPA】@query不适用于参数不确定的查询,用EntityM

【JPA】@query不适用于参数不确定的查询,用EntityM

作者: iamsharleen | 来源:发表于2018-02-13 14:54 被阅读0次

    最近做的项目,为了简化Dao的代码,使用了JPA来写Dao,Dao的接口方法上使用@Query注释,不需要再写一个实现类(Impl)。
    例子:

    public interface IUserDao extends JpaRepository<User, String>,
      JpaSpecificationExecutor<User> {
      
      //根据ID查询
      @Query(value = "select t from User t where t.id = ?1  order by t.code")
      List<User> getListById(String id);
    
      //根据ID更新NAME
      @Modifying
      @Query(value = "update User t set t.name= ?2 where t.id = ?1")
      void updateNameById(String id , String name);
    }
    

    在项目中,遇到一种情况,就是参数不确定的,例如网页上的模糊查询,“关键字”有可能是空的,这时候在Dao用@query就不方便了。

    解决方法:用EntityManager

    @PersistenceContext
    private EntityManager em; //注入EntityManager 
    public List<User> getUserList(String keyword){
      //构建Query,注意用的是HQL语法
      String sql = " from User t where 1=1 "; 
      if(StringUtil.isNotNull(keyword)){//判断keyword是否为空
        sql += " and t.name like ?1 "; //根据下标
        //sql += "and t.name like :name "; //根据属性
      }
      //Query query = new Query(sql);
      Query query = em.createQuery(sql);// 这里做个更正
      query.setParameter(1,keyword); //根据下标
      //query.setParameter(name ,keyword); //根据属性
    
      //查询
      List<User > list = query.getResultList();
      return list;
    }
    

    做个更正:
    2018-06-12 query应该是用EntityManager创建的 Query query = em.createQuery(sql)

    相关文章

      网友评论

          本文标题:【JPA】@query不适用于参数不确定的查询,用EntityM

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