SpringDataJpa—jpql初步使用
1、为什么要使用jpql?
平常我们在使用HIbernate等框架时对一些复杂的sql语句编写十分的不方便,于是便出现了jpql,它是一款面向对象编写sql的框架,正因为它简单、强大并且适用于任何类型的数据库,所以现在十分流行
2、具体用法
查询语句:
/**
* 查询全部
*/
@Test
public void testFindAll(){
//加载配置文件创建工厂(实体管理工厂)对象
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa");
//通过实体管理工厂获取实体管理器
EntityManager em = factory.createEntityManager();
//获取事务对象,开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//完成增删改查操作
/**
* 查询全部
*/
String jpq1 = "from domain.Customer";
//创建Query对象,Query对象才是执行jpql的对象
Query query = em.createQuery(jpq1);
//发送查询,并封装结果集
List list = query.getResultList();
for (Object obj : list) {
System.out.println(obj);
}
//提交事务
tx.commit();
//释放资源
em.close();
factory.close();
}
倒序查询语句:
/**
* 倒序查询全部
*/
@Test
public void testReverseOrderFindAll(){
//加载配置文件创建工厂(实体管理工厂)对象
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa");
//通过实体管理工厂获取实体管理器
EntityManager em = factory.createEntityManager();
//获取事务对象,开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//完成增删改查操作
/**
* 查询倒序全部
*/
String jpq1 = "from Customer order by custId desc";
//创建Query对象,Query对象才是执行jpql的对象
Query query = em.createQuery(jpq1);
//发送查询,并封装结果集
List list = query.getResultList();
for (Object obj : list) {
System.out.println(obj);
}
//提交事务
tx.commit();
//释放资源
em.close();
factory.close();
}
统计总数:
/**
* 统计客户总数
*/
@Test
public void tesCount(){
//加载配置文件创建工厂(实体管理工厂)对象
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa");
//通过实体管理工厂获取实体管理器
EntityManager em = factory.createEntityManager();
//获取事务对象,开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//完成增删改查操作
/**
* 统计客户总数
*/
String jpq1 = "select count(custId) from Customer ";
//创建Query对象,Query对象才是执行jpql的对象
Query query = em.createQuery(jpq1);
//发送查询,并封装结果集
Object result = query.getSingleResult();
System.out.println(result);
//提交事务
tx.commit();
//释放资源
em.close();
factory.close();
}
分页查询:
/**
* 分页查询
*/
@Test
public void testPaged(){
//加载配置文件创建工厂(实体管理工厂)对象
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa");
//通过实体管理工厂获取实体管理器
EntityManager em = factory.createEntityManager();
//获取事务对象,开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//完成增删改查操作
/**
* 分页查询
*/
String jpq1 = "from Customer";
//创建Query对象,Query对象才是执行jpql的对象
Query query = em.createQuery(jpq1);
//对参数进行赋值、
//起始索引
query.setFirstResult(1);
//每页查询条数
query.setMaxResults(1);
//发送查询,并封装结果集
List list = query.getResultList();
for (Object obj : list) {
System.out.println(obj);
}
//提交事务
tx.commit();
//释放资源
em.close();
factory.close();
}
条件查询:
/**
* 条件查询
*/
@Test
public void testCondition(){
//加载配置文件创建工厂(实体管理工厂)对象
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa");
//通过实体管理工厂获取实体管理器
EntityManager em = factory.createEntityManager();
//获取事务对象,开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//完成增删改查操作
/**
* 条件查询
*/
String jpq1 = "from Customer where custName like ?";
//创建Query对象,Query对象才是执行jpql的对象
Query query = em.createQuery(jpq1);
//对参数进行赋值、
//第一个参数:占位符的索引位置(从1开始),第二个参数:取值
query.setParameter(1,"张三");
//发送查询,并封装结果集
List list = query.getResultList();
for (Object obj : list) {
System.out.println(obj);
}
//提交事务
tx.commit();
//释放资源
em.close();
factory.close();
}