【JPA】@queryパラメータが不確定なクエリーには適用されず、EntityManagerを使用
1359 ワード
最近のプロジェクトでは、Daoのコードを簡略化するためにJPAを使用してDaoを書き、Daoのインタフェースメソッドで@Queryコメントを使用して、実装クラス(Impl)をもう1つ書く必要はありません.例:
プロジェクトでは、パラメータが不確定な場合があります.例えば、Webページのあいまいなクエリーでは、「キーワード」が空である可能性があります.この場合、Daoで@queryを使うのは不便です.
解決方法:EntityManagerで
訂正します:2018-06-12 queryはEntityManagerで作成したQuery=em.createQuery(sql)であるべきです
public interface IUserDao extends JpaRepository,
JpaSpecificationExecutor {
// ID
@Query(value = "select t from User t where t.id = ?1 order by t.code")
List 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);
}
プロジェクトでは、パラメータが不確定な場合があります.例えば、Webページのあいまいなクエリーでは、「キーワード」が空である可能性があります.この場合、Daoで@queryを使うのは不便です.
解決方法:EntityManagerで
@PersistenceContext
private EntityManager em; // EntityManager
public List 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 list = query.getResultList();
return list;
}
訂正します:2018-06-12 queryはEntityManagerで作成したQuery=em.createQuery(sql)であるべきです