Java JPA 标准API使用

一.创建条件查询的步骤
  1. 第一步通过EntityManager接口实例调用getCriteriaBuilder()方法创建CriteriaBuilder接口的对象
EntityManager em = emf.createEntityManager();
CriteriaBuilder cb= em.getCriteriaBuilder();
  1. 第二步构造一个CriteriaQuery接口实例来创建一个查询对象
CriteriaQuery<StudentEntity> cq =cb.createQuery(StudentEntity.class);
  1. 第三步从CriteriaQuery对象方法调用来设置查询的根
Root<StudentEntity> rootStudent =cq.from(StudentEntity.class);
  1. 第四步调用CriteriaQuery对象的select()方法指定查询结果集类型
CriteriaQuery<StudentEntity> select =cq.select(rootStudent);
  1. 第五步创建Query接口实例指定访问数据库记录的方法类型
Query query=em.createQuery(select);
  1. 第六步通过查询接口的方法来控制查询的执行
List<StudentEntity> list= query.getResultList();
二.标准API查询子句的方法
字句Criteria API接口方法
SELECTCriteriaQueryselect()
FROMAbstractQueryfrom()
WHEREAbstractQuerywhere()
ORDER BYCriteriaQueryorderBy()
GROUP BYAbstractQuerygroupBy()
HAVINGAbstractQueryhaving()
三.举例说明查询代码实例
  • 查询学生名称列表(一个列名)
EntityManagerFactory emf =Persistence.createEntityManagerFactory("student");
EntityManager em= emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.select(stud.get("name"));
CriteriaQuery<StudentEntity> select = cq.select(stud);
TypedQuery<StudentEntity> query = em.createQuery(select);
List<StudentEntity> list = query.getResultList();
  • 查询名称,年龄,性别学生列表(多个列名)
EntityManagerFactory emf =Persistence.createEntityManagerFactory("student");
EntityManager em= emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);

cq.multiselect(stud.get("name"),stud.get("age"),stud.get("sex"));

CriteriaQuery<StudentEntity> select = cq.select(stud);
TypedQuery<StudentEntity> query = em.createQuery(select);
List<StudentEntity> list = query.getResultList();
  • 根据名称排序(升序)查询学生列表(orderBy)
EntityManagerFactory emf =Persistence.createEntityManagerFactory("student");
EntityManager em= emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);

cq.orderBy(cb.asc(stud.get("name"));

CriteriaQuery<StudentEntity> select = cq.select(stud);
TypedQuery<StudentEntity> query = em.createQuery(select);
List<StudentEntity> list = query.getResultList();
  • 根据学生名称模糊查询列表(like)
EntityManagerFactory emf =Persistence.createEntityManagerFactory("student");
EntityManager em= emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
AbstractQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);

cq.where(cb.like(stud.get("name"),"%");

CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> query = em.createQuery(select);
List<StudentEntity> list = query.getResultList();
  • 根据多个学生ID查询列表(in)
EntityManagerFactory emf =Persistence.createEntityManagerFactory("student");
EntityManager em= emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
AbstractQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);

cq.where(cb.in(stud.get("id")).value("1001").value("1002").value("1003");

CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> query = em.createQuery(select);
List<StudentEntity> list = query.getResultList();
  • 查询10到18岁的学生列表(between)
EntityManagerFactory emf =Persistence.createEntityManagerFactory("student");
EntityManager em= emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
AbstractQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);

cq.where(cb.between(stud.get("age"),10,18));

CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> query = em.createQuery(select);
List<StudentEntity> list = query.getResultList();
  • 统计每个年龄段的学生有多少个(groupBy)
EntityManagerFactory emf =Persistence.createEntityManagerFactory("student");
EntityManager em= emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();

CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);

cq.multiselect(stud.get("age"), cb.count(stud)).groupBy(stud.get("age"));

List<Object[]> list = em.createQuery(cq).getResultList();
  • 统计24岁年龄段的学生有多少个
EntityManagerFactory emf =Persistence.createEntityManagerFactory("student");
EntityManager em= emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();

CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);

cq.multiselect(stud.get("age"), cb.count(stud)).groupBy(stud.get("age"))
			.having(cb.ge(stud.get("age"), 24));

List<Object[]> list = em.createQuery(cq).getResultList();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值