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

最近做的项目,为了简化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)

    原文作者:iamsharleen
    原文地址: https://www.jianshu.com/p/5d3a70f03eb6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞