Query query = entityManager.createQuery("select s.name from Student s where s.age>10", String.class);
List<String> result = query.getResultList();
logger.info("result={}", result);
//查询多个字段 (?n 占位符:传统 ? 占位符的改良占位符,仅仅适应 JPQL 查询)
query = entityManager.createQuery("select s.name,s.homeAddress from Student s where s.age>?1 and s.name like ?2", Object[].class);
query.setParameter(1, 10);
query.setParameter(2, "%小%");
List<Object[]> result2 = query.getResultList();
for (Object[] arr : result2) {
String s = "";
for (Object o : arr) {
s += o.toString() + ",";
}
logger.info(s);
}
//查询对象 (:name 占位符:变量名形式的占位符,仅仅适应 JPQL 查询)
query = entityManager.createQuery("select s.name,s.homeAddress from Student s where s.age between :min and :max and s.name like '%小%' order by s.id", Student.class);
query.setParameter("min", 10);
query.setParameter("max", 40);
//设置结果的开始位置,最大记录条数,可用来实现分页
query.setFirstResult(0);
query.setMaxResults(10);
List<Student> result3 = query.getResultList();
logger.info("result3={}", result3);
//聚合操作
query = entityManager.createQuery("select max(s.age) from Student s");
类似 SQL:select age,count(*) from student group by age having age=10 order by age,name desc */ @Test public void criteria2() { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Student.class); Root root = criteriaQuery.from(Student.class); //Student 实体类需要有对应的构造方法 criteriaQuery.multiselect(root.get("id"), root.get("name"), root.get("age"), root.get("homeAddress")); criteriaQuery.where(criteriaBuilder.ge(root.get("age"), 10)); criteriaQuery.orderBy(criteriaBuilder.asc(root.get("age"))).orderBy(criteriaBuilder.desc(root.get("name"))); TypedQuery query = entityManager.createQuery(criteriaQuery); List list = query.getResultList(); logger.info(list.toString()); } /** * Criteria API * select age,count(*) from student group by age having age