北大青鸟

网站首页 > 常见IT技术问题 > Java开发 >

站内公告

Java持久层的三种查询方式

责任编辑:宏鹏来源:武汉北大青鸟鲁广校区时间:2013-05-07 14:41:53
导读:如何查询Java持久层,Java持久层的三种查询方式。

Java JPA有三种查询方式:

1)JPQL

2)Criteria API

3)SQL

下面一一详解。

一、本地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查询会指定数据库的模式,因此除非必要,我们都应该避免使用此方式。

二、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对于创建动态查询是一个好的工具。它使得创建动态查询更简便,因为我们处理的是对象,而不是处理查询的字符串。缺点在于随着查询的复杂度的增加,,查询定义对象的创建也会变得很繁琐,代码会更难读。

本文标题:Java持久层的三种查询方式,责任编辑:宏鹏,来源:武汉北大青鸟鲁广校区栏目,于2013-05-07 14:41:53发布于北大青鸟鲁广校区。如何查询Java持久层,Java持久层的三种查询方式。

专业老师指导

赵老师

赵老师

从事IT教育培训十年有余,致力于帮助广大学子找到适合自己的专业

立即在线咨询

培训咨询客服

陈老师

陈老师

IT培训专业客服,用自己的真诚解决了无数学子的困惑

立即在线咨询

本文地址:https://m.027hpedu.com/wenda/java/2603.html

文章标题:Java持久层的三种查询方式

上一篇:Java应用程序常见异常类解析与实用建议

下一篇:Java开发教程 文章中单词出现次数的算法

热点关注

推荐Java开发

热门Java开发

预约你的精彩未来

预约将免费领取7天课程体验卡

-------请选择试预约课程-------

JAVA
WEB前端
PHP
UI设计
Python
电子商务
视频剪辑
大数据工程师
平面设计

83345人已领取

全国百余家校区

只为您方便就学

北大青鸟鲁广校区

北大青鸟鲁广校区

武汉市洪山区珞喻路724号(地铁二号线光谷广场站F口出)

预约到校
领取学习大礼包

首页

热门课程

视频网课

新闻资讯

关于学校

联系学校

预约选课申请

  • 预约时间

    请选择预约时间

  • 预约课程

    请选择预约课程

  • 姓   名
  • 手机号
  • QQ 号
  • 微信号

添加老师微信号

专业老师24小时1对1学习指导

定制专属于你的专属学习方案

微信号:17740513250

复制老师的微信号

复制成功啦

快去微信添加老师为好友吧~

北大青鸟小青

微信号:17740513250

北大青鸟小青

微信号:17740513250

设置备注
小主知道啦