云顶国际,云顶国际登录官网

    欢迎访问云顶国际登录官网~

  1. 加入收藏
  2. 设为主页
  3. 学校简介
北大青鸟

三分钟了解北大青鸟

×
  • 北大青鸟大数据课程
  • 北大青鸟网络工程师
  • 北大青鸟web设计专业
  • 北大青鸟PHP专业
  • 北大青鸟启蒙星课程

Java持久层的三种查询方式

责任编辑:027hpedu来源:云顶国际登录官网Java技术教程发布时间:2013-05-07 14:45
导读:如何查询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持久层的三种查询方式,责任编辑:027hpedu,于2013年05月07日14时45分发布于云顶国际登录官网。云顶国际宏鹏鲁广校区,是北大青鸟武汉电脑学校,专业IT计算机培训,拥有软件/网络/安卓/Web前端/Java课程.北大青鸟地址:光谷广场鲁巷数码港.电话:027-87807717

专业老师指导

专业老师指导

赵老师

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

培训咨询客服

培训咨询客服

陈老师

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

本文地址:
文章标题:
  • 北大青鸟Java软件开发
  • 北大青鸟UI设计课程_零基础可学
  • 北大青鸟动漫设计_武汉设计学校
  • 北大青鸟数字艺术_武汉电脑学校
在线咨询
×
在线咨询更多问题

如您有任何疑问
在线咨询随时为您解答或拨打咨询热线:17740513250

×
  • 姓 名*
  • 手 机*
  • QQ号/微信号
  • 所报学科 *
  • 其他备注
  • 温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一报名服务。