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 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语句进行查询的更多相关文章
- JPA学习(6)JPQL
JPQL语言,即 Java Persistence Query Language 的简称.JPQL 是一种和 SQL 非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查 ...
- IDEA 增加对JPA的支持 执行JPQL语句
IDEA 可以在控制台console中执行JPQL语句: 1. 在已存在的项目中选择项目结构: 2. 选择模块-指定实体所在的模块-选择上面的号 2. 选择要添加的模块:我们使用的是JPA,也可能有的 ...
- SpringData JPA使用JPQL的方式查询和使用SQL语句查询
使用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件, 这时就可以使用@Query注解,结合JPQL的语句方式完成查询 持久 ...
- JPA学习(3)JPA API
在我们的jpa的helloworld中,我们看到了简单的一个jpa保存操作,下面就来好好学习一下,JPA最主要的几个类 1.基本的几个类: ①:Persistence 类是用于获取 EntityMan ...
- EJB JPQL语句查询
JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL是完全面向对象的,具备继承.多态和关联等特性,和hibernate HQL很相似. 查询语句的参数 JPQL语句支持两种方式的参数定义 ...
- JPA学习(六、JPA_JPQL)
框架学习之JPA(六) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...
- JPA学习(1)基础认知
JPA 是什么 Java Persistence API:用于对象持久化的API. Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层: JPA和Hibernate的 ...
- JPA学习---第一节:JPA详解
一.详解 JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是 ...
- JPA学习笔记
一.JPA基础1.1 JPA基础JPA: java persistence api 支持XML.JDK5.0注解俩种元数据的形式,是SUN公司引入的JPA ORM规范 元数据:对象和表之间的映射关系 ...
随机推荐
- 获得自动增长的MySQL主键
下面的脚本教您如何获得自动增长的MySQL主键,如果您对MySQL主键方面感兴趣的话,不妨一看,相信对您学习MySQL主键方面会有所启迪. import java.sql.Connection; im ...
- CSS3写常用的形状
正方形: 1 .square{ width: 100px;height: 100px; background: #E57779;} 长方形: .rectangle{ width: 200px;he ...
- CSS中如何将li横向排列
直接贴段例子代码吧: @{ Layout = null;} <!DOCTYPE html><style type="text/css"> .test li ...
- OC Categroy类别
Categroy类别,又称为扩展类,在类的原基础上扩展方法,且不可添加变量,如果扩展的方法与原始类中的方法相同,则会隐藏原始方法,且不可在扩展方法中通过super调用原始方法,这里与继承不同. 定义: ...
- 关于sql中constraint 前缀的用意(PK、UK、DF、CK、FK)
--主键constraint PK_字段 primary key(字段), --唯一约束constraint UK_字段 unique key(字段), --默认约束constrint DF_字段 d ...
- IOS小知识纪录
1.scrollView缩放 #import "ViewController.h" @interface ViewController () <UIScrollViewDel ...
- C#中winform窗体如何嵌入cmd命令窗口
解决方法一: 自己放一个文本框,改成黑色,然后输入命令,执行时,你Process.Start cmd ,此时CMD窗口不显示,然后,将CMD的返回值,再取出来,设回文本框. 如何用这种方法实时获取cm ...
- C#中数组、ArrayList和List<T>三者的发展历程
在C#中数组,ArrayList,List使我们用的最多的类型之一.他们共同的作用都是能够存储一组对象. 那么问题来了: (1)为什么要有三个一样作用的东西呢?他们都很完美吗? (2)谁先出生,又是因 ...
- AMQ学习笔记 - 17. 事务的测试
概述 对事务机制进行测试. 测试实例 测试实例 结果预测 发送正常 3条消息入队 发送异常 0条消息入队 接收正常 3条消息出队 接收异常 0条消息出队 demo设计 设计图 测试分工 测试类 测试方 ...
- javaScript入门2--基本概念
语法: 1.区分大小写!! 2.标识符:既变量,函数名,属性名,参数. 1.第一个字符必须为字母,_,或者$ 2.其他字符可以是字母,_,&,或者数字 3.注释: 1.单行注释:// 2.多行 ...