码迷,mamicode.com
首页 > 其他好文 > 详细

JPQL 的基本使用

时间:2019-01-20 13:39:55      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:返回结果   没有   对象   manager   sys   测试用例   entity   实体   概念   

一、概念

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 的基本使用

标签:返回结果   没有   对象   manager   sys   测试用例   entity   实体   概念   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!