IT培训网 - IT职场人学IT技术上IT培训网
解析Java持久层查询方式有哪些
时间:2017-10-17 18:05:48 来源:Java培训网 作者:IT培训网 已有:名学员访问该课程
Java持久层查询方式有哪些?Java JPA有三种查询方式,分别为JPQL、Criteria API、SQL,对于这些方法,对我们的工作帮助非常大。下面就一一列举详细分析。

三种Java持久层查询方式
一、JPQL查询
JPQL是基于字符串的查询语言,语法类似于SQL。因此学习JPQL相当容易,只要有一定的SQL基础。看下面的代码:
// 获得实体管理器
EntityManager em = ...
// 建立JPQL查询
String getByFirstName = "SELECT c FROM Contact c WHERE c.firstName = :firstName";
// 创建查询实例
TypedQuery query = em.createQuery(getByFirstName, Contact.class);
// 设置查询参数
query.setParameter("firstName", "John");
// 获取结果
List contacts = query.getResultList();
上面的例子告诉我们3件事:
1)创建的查询是类型安的,我们不必计算查询的结果;
2)JPQL查询字符串是易读、易于理解的;
3)创建的查询字符串在编译期间不会被验证。
JPQL对于静态查询是一个好办法。换句话说们,如果很多查询参数总是相同的,那么JPQL是我们的选。但是,JPQL实现动态查询就显得很繁琐了。
二、Criteria API
Criteria API用于解决对接第三方ORM框架时让JPQL标准化。它用于构建查询定义对象,此对象会被翻译成可执行的SQL查询。下面的代码说明了这个问题:
// 获得实体管理器
EntityManager em = ...
// 获得Criteria建立器
CriteriaBuilder cb = em.getCriteriaBuilder();
// 建立Criteria查询
CriteriaQuery query = cb.greateQuery(Contact.class);
// 创建查询Root
Root root = query.from(Contact.class);
// 创建firstName的查询条件,使用静态元模型
Predicate firstNameIs = cb.equal(root.get(Contact_.firstName, "John"));
// 指定查询的where条件
query.where(firstNameIs);
// 创建查询并获取结果
TypedQuery q = em.createQuery(query);
List contacts = q.getResultList();
上面的例子告诉我们3件事:
1)创建的查询是类型安的,不必计算查询的结果;
2)代码不如SQL或JPQL那么易读;
3)由于是使用Java API处理,Java编译器会确保查询的语法正确。
Criteria API对于创建动态查询是一个好的工具。它使得创建动态查询更简便,因为我们处理的是对象,而不是处理查询的字符串。缺点在于随着查询的复杂度的增加,,查询定义对象的创建也会变得很繁琐,代码会更难读。
三、本地SQL查询
SQL是标准化的查询语言,用于管理数据。下面的例子说明了怎样实现本地SQL查询:
// 获得实体管理器
EntityManager em = ...
// 建立SQL查询
String getByFirstName = "SELECT * FROM contacts c WHERE c.first_name = ?1";
// 创建查询实例
Query query = em.createNativeQuery(getByFirstName, Contact.class);
// 设置查询参数
query.setParameter(1, "John");
// 获取结果
List contacts = query.getResultList();
上面的例子告诉我们3件事:
1)用JPA建立查询,无需学习新的查询语言;
2)创建的查询没有类型安,在使用前必须计算查询结果;
3)在运行程序前必须验证查询的拼写或语法是否有错误。
而且SQL查询会指定数据库的模式,因此除非必要,我们都应该避免使用此方式。
每期开班座位有限.0元试听抢座开始!
温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。





Java5保姆级教学方式,你适
跳槽季节来啦,学Java的伙
你认为Java,Go和Python那个
你认为Java,Go和Python那个
说起Java编程这个功能简单
郑州哪家Java培训机构学
Java不常见的面试题你知道
作为程序员,跳槽就是最
一般学JAVA开发的能做得了
石家庄十大java培训机构排
Java程序员薪水高待遇好 难道jav
那些对java学习有用的经典书籍你
大数据发展势不可挡 南阳大数据
一分钟学会什么是Ajax及Ajax请求的
汇总Java程序员精选笔试题及答案
大数据常见数据类型有哪几种