Java持久层的三种查询方式
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszsJava 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<Contact> query = em.createQuery(getByFirstName, Contact.class);
// 设置查询参数
query.setParameter("firstName", "John");
// 获取结果
List<Contact> 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<Contact> query = cb.greateQuery(Contact.class);
// 创建查询Root
Root<Contact> root = query.from(Contact.class);
// 创建firstName的查询条件,使用静态元模型
Predicate firstNameIs = cb.equal(root.get(Contact_.firstName, "John"));
// 指定查询的where条件
query.where(firstNameIs);
// 创建查询并获取结果
TypedQuery<Contact> q = em.createQuery(query);
List<Contact> contacts = q.getResultList();
上面的例子告诉我们3件事:
1)创建的查询是类型安全的,不必计算查询的结果;
2)代码不如SQL或JPQL那么易读;
3)由于是使用Java API处理,Java编译器会确保查询的语法正确。
Criteria API对于创建动态查询是一个极好的工具。它使得创建动态查询更简便,因为我们处理的是对象,而不是处理查询的字符串。缺点在于随着查询的复杂度的增加,,查询定义对象的创建也会变得很繁琐,代码会更难读。
分享到:
相关推荐
本文旨在对比四种常用的Java持久层框架:Hibernate、iBatis(现称MyBatis)、EJB(Entity Bean)以及JDO(Java Data Objects)。通过对它们的学习成本、封装性、移植性、执行效率等多个方面的对比分析,帮助开发者更...
Java持久层操作是Java开发中不可或缺的部分,主要是为了在应用程序和数据库之间建立桥梁,以便进行数据的存储和检索。在给定的标题“一套简化Java持久层操作的类库”中,我们可以理解这是一个专为简化Java开发人员...
总的来说,Java持久层框架的选择没有绝对的好坏,关键在于找到最符合项目需求的解决方案。了解这些框架的优缺点,并结合项目特性,才能做出明智的决策,提升开发效率和软件质量。在实际工作中,开发者可以根据实际...
在持久层的理解上,Java开发者通常会使用ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis,来简化数据库操作。这些框架能够将Java对象映射到数据库表,使得开发者无需编写大量的SQL语句,就能完成数据...
首先,**Mybatis** 是一个轻量级的Java持久层框架,它允许开发者通过XML或注解来映射SQL语句,简化了数据库操作。Mybatis提供了动态SQL、事务管理以及缓存等功能,为开发者提供了极大的便利。 在自定义框架中,**...
个人整理的一套Java WEB 持久层技术知识点的清单,学些一门语言有个知识导图对入门的人可能减少迷茫学习起来方便一点~ 另外有本人整理的Java Web开发其它知识点清单~
精通hibernate3.0--java数据库持久层开发实践(付京周) 分两卷下载,需要积分共1分。谢谢 精通hibernate3.0--java数据库持久层开发实践(付京周) 分两卷下载,需要积分共1分。谢谢
个人整理的一套Java WEB 持久层 知识点的清单,学些一门语言有个知识导图对入门的人可能减少迷茫学习起来方便一点~ 另外有本人整理的Java Web开发其它知识点清单~
项目名称:轻量级Java持久层框架MiniDAO 项目简介: MiniDAO是一个基于SpringJDBC和FreeMarker技术的轻量级Java持久层框架。它以简洁的设计理念实现了SQL的分离和逻辑标签功能,与Mybatis的操作体验相媲美,同时...
Java三层架构开发是一种常见的软件开发模式,它充分利用了MVC(Model-View-Controller)设计模式,以实现清晰的职责划分和高效的代码组织。在Java应用中,这种架构通常包括表现层(View)、业务逻辑层(Controller/...
Java 敏捷持久层技术是现代软件开发中的一个重要组成部分,它简化了数据库操作,使得开发者可以更加专注于业务逻辑,而不是繁琐的数据访问代码。在Java世界里,虽然Hibernate和JPA等框架已经非常成熟,但Ruby on ...
- "java0323"可能是课程或教程的一部分,可能涵盖了Java持久层框架的第323个主题或概念,如高级查询技巧、复杂关联映射、批量操作等。 - 可能包含实际案例,如创建实体类、配置数据库连接、使用Repository接口进行...
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的 JPetStore实例。 在线Javadoc...
一个非常简单易懂的 JPA 例子,帮你快速入门JPA
根据提供的文件内容,我们能够整理出以下关于Java持久层API的知识点,这些知识点主要涉及到Java Persistence API(JPA),NetBeans集成开发环境以及相关的数据库操作。 1. Java Persistence API(JPA): JPA是Java ...
Java持久层框架JPA(Java Persistence API)是Java EE中用于管理关系数据库的对象关系映射(ORM)标准。它的出现是为了简化数据访问层的开发,让开发者能够更加专注于业务逻辑而不是底层的数据库操作。JPA通过提供...
通过本文的研究可以看出,Java的反射机制为数据持久层提供了一种灵活的操作方式。结合Java Bean技术,可以有效地减少代码量,提高开发效率。当然,反射机制在提升灵活性的同时,也会带来一些性能损耗,因此在实际...
精通hibernate3.0 java数据库持久层开发实践 付惊周编著 人民邮电出版社出版
JAVA PP持久层代码生成器是一种高效实用的开发工具,它主要针对JAVA的持久层代码进行自动化生成,大大减轻了开发者的手动编码工作量。这款工具基于FreeMarker模板引擎,允许用户根据自己的需求自定义模板,从而实现...