JPQL 的基本使用

一、概念

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, "[email protected]").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());
    }

原文地址:https://www.cnblogs.com/yunche/p/10294249.html

时间: 2024-08-11 18:32:21

JPQL 的基本使用的相关文章

JavaEE(15) - JPA查询API和JPQL

1. JPQL面向对象特征 2. 执行JPQL查询的常用API 3. 使用JPQL创建查询 4. 为JPQL设置参数 5. 获取查询结果 6. JPQL函数和JPQL表达式 7. JPQL的关联查询和多态查询 8. 对查询结果集进行分页 9. 使用JPQL子查询和命名查询 10. JPQL的批量更新和删除

JPA学习(6)JPQL

JPQL语言,即 Java Persistence Query Language 的简称.JPQL 是一种和 SQL 非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查询,从而屏蔽不同数据库的差异. JPQL语言的语句可以是 select 语句.update 语句或delete语句,它们都通过 Query 接口封装执行. 1.Query接口封装了执行数据库查询的相关方法.调用 EntityManager 的 createQuery.create NamedQuer

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

1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Language) 可媲美JDBC的查询能力  1 1.3. 操作api1 1.4. Hql2 1.1. 标准API历史 该标准被纳入因此标准的每一步中JPA的规范通知所有版本JPA. 在JPA2.0中,标准查询API,查询的标准化开发. 在JPA2.1,标准更新和删除(批量更新和删除)都包括在内 1.2. JPA定义了独特的JPQL(Java Persistence Query La

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

JAVA中使用JPQL 一种设置id自动生成,自增长的方法 private long id; @Id @GeneratedValue(generator="_native") @GenericGenerator(name="_native",strategy="native") public long getId() { return id; } 也有一种这样的 @Id @GeneratedValue(strategy = GenerationT

JPQL模糊匹配单个字符

JPQL模糊匹配,不是%,而是单个字符,该怎么办?比如我要查出数据库中满足后三位是数字的字符串 对于mysql来说,使用通配符 %和_可以轻松解决,但是对于JPQL来说模糊查询就伤脑筋了... 有一个方法,可以使用like查询出来以后,再在java代码里进行过滤.虽然很笨,但也有效

JPA学习笔记-JPQL

JPQL语言,即 JavaPersistence Query Language 的简称.JPQL 是一种和 SQL 非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查询,从而屏蔽不同数据库的差异.JPQL语言的语句可以是 select 语句.update 语句或delete语句,它们都通过 Query接口封装执行 javax.persistence.Query Query接口封装了执行数据库查询的相关方法.调用 EntityManager的 createQuery

JPA学习笔记(12)——JPQL

Query接口 int executeUpdate() 用于执行update或delete语句. List getResultList() 用于执行select语句并返回结果集实体列表. Object getSingleResult() 3用于执行只返回单个结果实体的select语句. Query setFirstResult(int startPosition) 用于设置从哪个实体记录开始返回查询结果. Query setMaxResults(int maxResult) 用于设置返回结果实体

JavaEE(14) - JPA查询API和JPQL

1. JPQL面向对象特征 2. 执行JPQL查询的常用API 3. 使用JPQL创建查询 4. 为JPQL设置参数 5. 获取查询结果 6. JPQL函数和JPQL表达式 7. JPQL的关联查询和多态查询 8. 对查询结果集进行分页 9. 使用JPQL子查询和命名查询 10. JPQL的批量更新和删除

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

1.JPQL 语句查询,代码如下: @Test public void query(){ EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa"); EntityManager em = factory.createEntityManager(); // 命名参数查询或位参数查询 Query query = em.createQuery("select p from P

JPQL

5.       JPQL JPQL(JavaPersistence Query Language),是基于实体的查询,所查询的内容都是实体或实体属性. 5.1.查询实体 SELECT c FROM Customer c JPQL语句与SQL基本类似,但它是基于实体的查询.在初次使用时,需要注意以下几个问题. 1)     实体名和属性区分大小写: 2)     JPQL中的保留关键字不区分大小写: 3)     标识实体的别名,也不区分大小写: 4)     实体的别名可以使用AS关键字来标识