1、JPQL 语句查询,代码如下:

@Test
public void query(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
// 命名参数查询或位参数查询
Query query = em.createQuery("select p from Person p p.id = ?1");
query.setParameter(1, 1);
// 调用 getSingleResult() 方法,必须要有结果(也就是说数据库必须要有对应的数据),不然会保存
Person person = (Person)query.getSingleResult();
System.out.println(person.getName());
em.close();
factory.close();
}

2、删除查询,代码如下:

@Test
public void deletequery(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
// 命名参数查询或位参数查询
Query query = em.createQuery("delete from Person p where p.id = ?1");
query.setParameter(1, 1);
query.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
}

3、更新查询,代码如下:

@Test
public void updatequery(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
// 命名参数查询
Query query = em.createQuery("update Person p set name=:name where p.id = :id");
query.setParameter("name", "hwl");
query.setParameter("id", 3);
query.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
}

4、详细代码:

package learn.jpa.junit.test;

import static org.junit.Assert.*;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query; import learn.jpa.bean.Person; import org.junit.Test; public class PersonTest { @Test
public void save(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin(); // 开启事务
em.persist(new Person("hwl"));
em.getTransaction().commit();
em.close();
factory.close();
} /**
* 查询
*/
@Test
public void getPerson(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
// 第一个参数表示 实体类 第二个参数表示 实体标识符
Person person = em.find(Person.class, 1);
System.out.println(person.getName());
em.close();
factory.close();
} @Test
public void getPerson2(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
// 第一个参数表示 实体类 第二个参数表示 实体标识符
// 调用这个方法时,并不会立即从数据库中得到数据,只是返回一个代理对象
Person person = em.getReference(Person.class, 1);
// 当我们对代理对象的属性进行访问的时候,才会从数据库中获取数据
// 如果执行以上方法,数据库中没有对应的数据,是不会报错的,会在执行 person.getName() 时才异常
System.out.println(person.getName());
em.close();
factory.close();
} @Test
public void updatePerson(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
// 实体管理器已于事务关联
em.getTransaction().begin();
// 查找出来后 person 对象在 CPU 时处于托管状态
// 这时调用实体类的 set 方法,可以对数据进行更改,但并不是立即更改,是放在 JDBC 的批处理交易库里面
Person person = em.find(Person.class, 1);
person.setName("zxx");
// 调用事务提交后,会将数据同步到数据库中
em.getTransaction().commit();
em.close();
factory.close(); // 实体在 CPU 中有四种状态
//第一种 新建(new) 第二种 托管(manage) 第三种 游离 第四种 删除
} @Test
public void updatePerson2(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.find(Person.class, 1);
em.clear(); // 将实体管理器中的所有实体状态变成游离状态
person.setName("zxx");
em.merge(person); // 将游离状态的数据更新同步到数据库
em.getTransaction().commit();
em.close();
factory.close();
} @Test
public void delete(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.find(Person.class, 1);
em.remove(person);
em.getTransaction().commit();
em.close();
factory.close();
} @Test
public void query(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
// 命名参数查询或位参数查询
Query query = em.createQuery("select p from Person p p.id = ?1");
query.setParameter(1, 1);
// 调用 getSingleResult() 方法,必须要有结果(也就是说数据库必须要有对应的数据),不然会保存
Person person = (Person)query.getSingleResult();
System.out.println(person.getName());
em.close();
factory.close();
} @Test
public void deletequery(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
// 命名参数查询或位参数查询
Query query = em.createQuery("delete from Person p where p.id = ?1");
query.setParameter(1, 1);
query.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
} @Test
public void updatequery(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
// 命名参数查询
Query query = em.createQuery("update Person p set name=:name where p.id = :id");
query.setParameter("name", "hwl");
query.setParameter("id", 3);
query.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
}
}

JPA学习---第八节:使用JPQL语句进行查询的更多相关文章

  1. JPA学习(6)JPQL

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

  2. IDEA 增加对JPA的支持 执行JPQL语句

    IDEA 可以在控制台console中执行JPQL语句: 1. 在已存在的项目中选择项目结构: 2. 选择模块-指定实体所在的模块-选择上面的号 2. 选择要添加的模块:我们使用的是JPA,也可能有的 ...

  3. SpringData JPA使用JPQL的方式查询和使用SQL语句查询

    使用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件, 这时就可以使用@Query注解,结合JPQL的语句方式完成查询 持久 ...

  4. JPA学习(3)JPA API

    在我们的jpa的helloworld中,我们看到了简单的一个jpa保存操作,下面就来好好学习一下,JPA最主要的几个类 1.基本的几个类: ①:Persistence 类是用于获取 EntityMan ...

  5. EJB JPQL语句查询

    JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL是完全面向对象的,具备继承.多态和关联等特性,和hibernate HQL很相似.   查询语句的参数 JPQL语句支持两种方式的参数定义 ...

  6. JPA学习(六、JPA_JPQL)

    框架学习之JPA(六) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...

  7. JPA学习(1)基础认知

    JPA 是什么 Java Persistence API:用于对象持久化的API. Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层: JPA和Hibernate的 ...

  8. JPA学习---第一节:JPA详解

    一.详解 JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是 ...

  9. JPA学习笔记

    一.JPA基础1.1 JPA基础JPA: java persistence api 支持XML.JDK5.0注解俩种元数据的形式,是SUN公司引入的JPA ORM规范 元数据:对象和表之间的映射关系 ...

随机推荐

  1. 实战FFmpeg编译支持arm64(转)

    App store要求上架的app必须支持arm64.而手中的ffmpeg还不支持arm64, 百度下ffmpeg支持arm64方法,网上有很多资料.其中一篇是使用脚本自动编译实现的.本文就是使用它的 ...

  2. How Old Are You?

    今天要分享的是一个测年龄的小应用,就类似是http://how-old.net官网测年龄的功能一样,我的也是这样一个功能,细节捕获当然没有how-old多啦,不过这些主要是基于一个第三方的jar包,我 ...

  3. Android 直接拨打电话界面

    Android 拨号界面和直接拨打电话界面代码控制 //定义TAG为空 private static final String TAG = null; //定义Button的点击事件 tell.set ...

  4. Java注解(自定义注解、view注入)

    注解这东西虽然在jdk1.5就加进来了,但他的存在还是因为使用Afinal框架的view注入才知道的.一直觉得注入特神奇,加了一句就可以把对应view生成了. 下面我们来认识一下注解这个东西 一.注解 ...

  5. C#完全无客户端访问Oracle

    网上太多的C#无客户端访问oracle案例,经我测试无一成功,特将我在oracle官网上和自己琢磨总结,终于成功,废话不多说,直接上项目. 一,准备条件 (由于我这里是用的控制台程序来测试的,所以将上 ...

  6. 北大ACM(POJ1006-Biorhythms)

    Question:http://poj.org/problem?id=1006 问题点:孙子定理 Memory: 248K Time: 0MS Language: C++ Result: Accept ...

  7. redistribute and Suboptimal routing

    重分发和次优路由 基础环境 拓扑: 分别配置好基本的环境,包含ip地址,路由协议的启用,得到他们的路由表分别为 R1: R2: R3: R4: 1.      在R1上将eigrp和OSPF进行双向重 ...

  8. 使用命令修改ip地址

    简述:以serverv 2012 r2为例 常用的几种,当然不全,希望能较快的速率记下一种便可 直接配置 1.      查看网卡的显示名称 2.      配置静态iP地址 3.      查看配置 ...

  9. OpenFiler安装与基本配置

    一.            安装篇 1.      插入安装盘 2.      选择键盘输出 3.      对硬盘进行分区 4.      删除所有数据并重新分区 5.      配置IP地址等信息 ...

  10. Cocos2d-x坐标系介绍

    在图形图像和游戏应用开发中坐标系是非常重要的,我们在Android和iOS等平台应用开发的时候使用的二维坐标系它的原点是在左上角的.而在Cocos2d-x坐标系中它原点是在左下角的,而且Cocos2d ...