一、概念

JPQL 语言,即 Java Persistence Query Language 的简称。JPQL 和 HQL 是非常类似的,支持以面向对象的方式来写 SQL 语句,当然也支持本地的 SQL 语句。JPQL 最终会被编译成针对不同底层数据库的 SQL 查询从而屏蔽掉不同数据库的差异。

1、API

javax.persistence.Query 接口封装了执行数据查询的相关方法。主要方法如下:

  • int executeUpdate():用于执行 update 或 delete 语句。
  • List getResult():用于执行 select 语句并返回结果集实体列表。
  • Object getSingleResult():用于执行返回单个结果实体的 select 语句。
  • Query setFirstResult(int startPosition):用于设置从指定行数返回查询结果。
  • Query setMaxResults(int maxResult):用于设置结果实体的最大数目。
  • setParameter(int position, Object value):为查询语句的指定位置参数赋值。下标从 1 开始。

二、用法实例

  • 查询:

    package test.java;
    
    import com.yunche.helloworld.Customer;
    import com.yunche.helloworld.Order;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test; import javax.persistence.*;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set; /**
    * @ClassName: MappingTest
    * @Description: 测试类
    * @author: yunche
    * @date: 2019/01/18
    */
    public class MappingTest { private EntityManagerFactory entityManagerFactory;
    private EntityManager entityManager;
    private EntityTransaction transaction; @Before
    public void init() {
    entityManagerFactory = Persistence.createEntityManagerFactory("jpa-1");
    entityManager = entityManagerFactory.createEntityManager();
    transaction = entityManager.getTransaction();
    transaction.begin();
    } @After
    public void destroy() {
    transaction.commit();
    entityManager.close();
    entityManagerFactory.close();
    } @Test
    public void testSelectJPQL() {
    String jpql = "FROM Customer WHERE id = ?1";
    Query query = entityManager.createQuery(jpql);
    query.setParameter(1, 1);
    Customer customer = (Customer) query.getSingleResult();
    System.out.println(customer.getName());
    }
    }
  • 修改:

    @Test
    public void testUpdateJPQL() {
    String jpql = "UPDATE Customer SET name=?1 WHERE id=?2";
    Query query = entityManager.createQuery(jpql);
    query.setParameter(1, "Bob").setParameter(2, 1);
    // 返回受影响的行数
    System.out.println(query.executeUpdate());
    }
  • 添加(没有 INSERT):

    /**
    * 试了下, JPQL 中没有 INSERT 这个测试用例是通不过的
    * 可能为了让们我尽量使用 EntityManager 中的 persist() 方法吧,也是 JPA 毕竟提倡我们少写 SQL
    */
    @Test
    public void testInsertJPQL() {
    String jpql = "INSERT INTO Customer(name, email, age) VALUES(?1, ?2, ?3)";
    Query query = entityManager.createQuery(jpql);
    query.setParameter(1, "Mike").setParameter(2, "Mike@163.com").setParameter(3, 20);
    System.out.println(query.executeUpdate());
    }
  • 删除:

    @Test
    public void testDeleteJPQL() {
    String jpql = "DELETE FROM Customer WHERE id = ?1";
    Query query = entityManager.createQuery(jpql);
    query.setParameter(1, 1);
    System.out.println(query.executeUpdate());
    }

JPQL 的基本使用的更多相关文章

  1. Atitit oodbms的查询,面向对象的sql查询jpa jpql hql

    Atitit oodbms的查询,面向对象的sql查询jpa jpql hql 1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Lang ...

  2. [转] JPQL

    原文地址:http://blog.csdn.net/suncaishen/article/details/6512028 select name ,age from user; //原生SQL语句 s ...

  3. JPA学习(6)JPQL

    JPQL语言,即 Java Persistence Query Language 的简称.JPQL 是一种和 SQL 非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查 ...

  4. JPA学习---第八节:使用JPQL语句进行查询

    1.JPQL 语句查询,代码如下: @Test public void query(){ EntityManagerFactory factory = Persistence.createEntity ...

  5. JavaEE(17) - JPA查询API和JPQL

    1. 获取查询结果 2. JPQL函数和JPQL表达式 #1. 使用from子句 #2. 查询部分属性 #3. 查询中使用构造器 3. JPQL的关联查询和多态查询 #1. 多态查询 #2. 隐式连接 ...

  6. JPQL

    JPQL语言 JPQL语言,即 Java Persistence Query Language 的简称. JPQL是一种和 SQL 非常类似的中间性和对象化查询语言, 它最终会被编译成针对不同底层数据 ...

  7. 如何使用JPQL写纯SQL语句

    使用JPQL,需要把SQL语句修改成类似HQL 语句.SQL 查询的是数据库,而JPQL 查询的是对象和属性,在语法上是有些不同的.对于有些用JPQL 无法写出来的查询,还是使用原生SQL写出来方便 ...

  8. JPQL的关联查询

    一般情况下,直接使用mysql语句写关联语句,是join on 的形式,如下: select * from tablea as a left join tableb as b on b.tablea_ ...

  9. JPQL设置自增长、只读、文本类型等的注解

    JAVA中使用JPQL 一种设置id自动生成,自增长的方法 private long id; @Id @GeneratedValue(generator="_native") @G ...

  10. JPQL模糊匹配单个字符

    JPQL模糊匹配,不是%,而是单个字符,该怎么办?比如我要查出数据库中满足后三位是数字的字符串 对于mysql来说,使用通配符 %和_可以轻松解决,但是对于JPQL来说模糊查询就伤脑筋了... 有一个 ...

随机推荐

  1. linux 经常使用网络命令

    1. ifconfig ifconfig主要是能手动启动.观察和改动网络接口的相关參数.能改动的參数许多,包含IP參数及MTU等都能改动,他的语法例如以下:  [root@linux ~]# ifco ...

  2. java struts jxl 导入导出Excel(无模板)

    jar包: import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.io.Fil ...

  3. HNOI模拟 Day3.25 By Yqc

    怕老婆 [问题描述] 有一天hzy9819,来到了一座大城市拥有了属于他自己的一双滑板鞋.但是他还是不满足想要拥有属于自己的一栋楼,他来到了一条宽敞的大道上,一个一个记录着这些楼的层数以方便自己选择. ...

  4. JBOSS和EJB学习一

    1.使用软件 IDE:Eclipse4.3(开普勒) EE版本 服务器:jboss EAP 6.2 eclipse-jboss plugin:jbosstools-Update-4.1.2.Final ...

  5. Go 语言的下一个大版本:Go 2.0 被安排上了(全面兼容1.X,改进错误处理和泛型这两大主题)

    今年 8 月 Go 开发团队公布了 Go 2.0 的设计草案,包括错误处理和泛型这两大主题.现在备受瞩目的 Go 2.0 又有了新动向 —— 昨日 Go 开发团队在其官方博客表示,Go 2 已经被安排 ...

  6. Spring 框架学习 —— 容器

    容器是 Spring 框架的核心.Spring 容器使用 DI(依赖注入)机制管理构成应用的组件(类),所谓 DI,也即是其能够创建相互协作的组件(类)之间的关联(依赖). 1. 应用上下文(Appl ...

  7. Linux系统下 为命令配置别名

    1.什么是别名 在管理和维护Linux系统的过程中,将会使用到大量命令,有一些很长的命令或用法经常被用到,重复而频繁的输入某个很长命令或用法是不可取的.这时可以使用 别名 功能将这个过程简单化. Li ...

  8. bzoj 2730: [HNOI2012]矿场搭建【tarjan】

    先tarjan找割点和点双连通分量,然后对一个点双,如果没有割点,那么需要建立两个出口(割掉一个另一个备用):如果只有一个割点,出口可以设立在任意一个非割点的地方:如果有两个及以上个割点,就不用建出口 ...

  9. 对象的属性类型 和 VUE的数据双向绑定原理

    如[[Configurable]] 被两对儿中括号 括起来的表示 不可直接访问他们 修改属性类型:使用Object.defineProperty()  //IE9+  和标准浏览器  支持 查看属性的 ...

  10. “仿QQ局域网聊天软件”项目-常用编程技巧总结

    1 信号槽篇 qqLogin loginDialog; QQ mainDialog; loginDialog.show(); //连接登陆窗口和主窗口 QObject::connect(&lo ...