@Query(value = "select distinct product,batch,target_customer from tdevice where is_del=0 and (product like %?4%) limit ?2,?3", nativeQuery = true)还有别的方式写这个sql吗?
时间: 2023-12-07 18:05:38 浏览: 119
是的,可以使用JPA的Criteria API或者QueryDSL等方式编写这个查询语句,这些方式可以避免使用原生SQL语句,提高代码的可维护性和安全性。例如,使用JPA的Criteria API可以这样写:
```
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> query = cb.createTupleQuery();
Root<Tdevice> root = query.from(Tdevice.class);
query.multiselect(root.get("product"), root.get("batch"), root.get("target_customer"))
.distinct(true)
.where(cb.and(cb.equal(root.get("isDel"), 0), cb.like(root.get("product"), "%" + product + "%")));
TypedQuery<Tuple> typedQuery = entityManager.createQuery(query);
typedQuery.setFirstResult(start);
typedQuery.setMaxResults(limit);
List<Tuple> resultList = typedQuery.getResultList();
```
其中,entityManager是EntityManager对象,Tdevice是实体类,Tuple表示查询结果的元组类型。这样写可以避免手写SQL语句,提高代码的可读性和可维护性。
阅读全文