package com.it.jpa.test;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import org.junit.Test;
import com.it.jpa.domain.Customer;
import com.it.jpa.util.JpaUtil;
public class testJPA {
/**
*
* 1、保存一个实体
*/
@Test
public void testAdd() {
// 定义对象
Customer c = new Customer();
c.setCustName("张三");
c.setCustLevel("VIP 客户");
c.setCustSource("网络");
c.setCustIndustry("IT");
c.setCustAddress("北京");
c.setCustPhone("010-84389340");
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
// 开启事务
tx.begin();
// 执行操作
em.persist(c);
// 提交事务
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
@Test
/**
* 2、修改
*/
public void testMerge() {
// 定义对象
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
// 开启事务
tx.begin();
// 执行操作
Customer c1 = em.find(Customer.class, 1L);
c1.setCustName("李四");
em.clear();// 把 c1 对象从缓存中清除出去
em.merge(c1);
// 提交事务
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
/**
* 3、删除
*/
@Test
public void testRemove() {
// 定义对象
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
// 开启事务
tx.begin();
// 执行操作
Customer c1 = em.find(Customer.class, 6L);
em.remove(c1);
// 提交事务
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
/**
* 4、查询一个: 使用立即加载的策略
*/
@Test
public void testGetOne() {
// 定义对象
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
// 开启事务
tx.begin();
// 执行操作
Customer c1 = em.find(Customer.class, 1L);
// 提交事务
tx.commit();
System.out.println(c1); // 输出查询对象
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
/**
*
* 5、查询所有客户
*/
@Test
public void findAll() {
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
tx.begin();
// 创建 query 对象
String jpql = "from Customer";
Query query = em.createQuery(jpql);
// 查询并得到返回结果
List list = query.getResultList(); // 得到集合返回类型
for (Object object : list) {
System.out.println(object);
}
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
/**
*
* 6、查询一行一列
*/
@Test
public void findCount() {
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
tx.begin();
// 查询全部客户
// 1.创建 query 对象
String jpql = "select count(custId) from Customer";
Query query = em.createQuery(jpql);
// 2.查询并得到返回结果
Object count = query.getSingleResult(); // 得到集合返回类型
System.out.println(count);
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
/**
* 7:根据 id 查询的两种方式及区别
*
* Description: JPA 的查询一个实体的两种方式
*
* find 和 getReference 区别: 第一个:查询的时机不一样。 find 是立即加载 ,只要一调用方法,马上发起查询。
* getReference 是延迟加载,什么时候使用什么时候加载。 第二个:返回的结果不一样 find 返回的是实体类类型 getReference
* 返回的是实体类的代理对象 hibernate 中 get 和 load 方法的区别和 jpa 中的 find 和 getReference 是一样的
* 其中: get 方法对应 find load 方法对应 getReference
*/
public class JPAFindOneTest {
// 查询一个
// 立即加载
@Test
public void testFindOne() {
EntityManager em = JpaUtil.getEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Customer c = em.find(Customer.class, 1);
System.out.println(c);
tx.commit();
em.close();
}
// 查询一个
// 懒加载(延迟加载)
@Test
public void testFindOne2() {
EntityManager em = JpaUtil.getEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Customer c = em.getReference(Customer.class, 1);
System.out.println(c.toString());
tx.commit();
em.close();
}
}
/**
* 8、条件查询
*/
@Test
public void findCondition() {
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
tx.begin();
// 创建 query 对象
String jpql = "from Customer where custName like ? ";
Query query = em.createQuery(jpql);
// 对占位符赋值,从 1 开始
query.setParameter(1, "传智播客%");
// 查询并得到返回结果
Object object = query.getSingleResult(); // 得到唯一的结果集对象
System.out.println(object);
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
/**
* 9、分页查询客户
*
*/
@Test
public void findPaged() {
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
tx.begin();
// 创建 query 对象
String jpql = "from Customer";
Query query = em.createQuery(jpql);
// 起始索引
query.setFirstResult(0);
// 每页显示条数
query.setMaxResults(2);
// 查询并得到返回结果
List list = query.getResultList(); // 得到集合返回类型
for (Object object : list) {
System.out.println(object);
}
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
/**
* 10、排序查询
*/
@Test
public void testOrder() {
EntityManager em = null;
EntityTransaction tx = null;
try {
// 获取实体管理对象
em = JpaUtil.getEntityManager();
// 获取事务对象
tx = em.getTransaction();
tx.begin();
// 创建 query 对象
String jpql = "from Customer order by custId desc";
Query query = em.createQuery(jpql);
// 查询并得到返回结果
List list = query.getResultList(); // 得到集合返回类型
for (Object object : list) {
System.out.println(object);
}
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
e.printStackTrace();
} finally {
// 释放资源
em.close();
}
}
}
JPA(四) 基本查询
最新推荐文章于 2024-07-29 11:02:40 发布