最近做的項目昌屉,為了簡化Dao的代碼钙蒙,使用了JPA來寫Dao,Dao的接口方法上使用@Query注釋间驮,不需要再寫一個實現(xiàn)類(Impl)躬厌。
例子:
public interface IUserDao extends JpaRepository<User, String>,
JpaSpecificationExecutor<User> {
//根據(jù)ID查詢
@Query(value = "select t from User t where t.id = ?1 order by t.code")
List<User> getListById(String id);
//根據(jù)ID更新NAME
@Modifying
@Query(value = "update User t set t.name= ?2 where t.id = ?1")
void updateNameById(String id , String name);
}
在項目中,遇到一種情況竞帽,就是參數(shù)不確定的扛施,例如網(wǎng)頁上的模糊查詢,“關(guān)鍵字”有可能是空的屹篓,這時候在Dao用@query就不方便了疙渣。
解決方法:用EntityManager
@PersistenceContext
private EntityManager em; //注入EntityManager
public List<User> getUserList(String keyword){
//構(gòu)建Query,注意用的是HQL語法
String sql = " from User t where 1=1 ";
if(StringUtil.isNotNull(keyword)){//判斷keyword是否為空
sql += " and t.name like ?1 "; //根據(jù)下標(biāo)
//sql += "and t.name like :name "; //根據(jù)屬性
}
//Query query = new Query(sql);
Query query = em.createQuery(sql);// 這里做個更正
query.setParameter(1,keyword); //根據(jù)下標(biāo)
//query.setParameter(name ,keyword); //根據(jù)屬性
//查詢
List<User > list = query.getResultList();
return list;
}
做個更正:
2018-06-12 query應(yīng)該是用EntityManager創(chuàng)建的 Query query = em.createQuery(sql)