JPQL全称Java Persistence Query Language

基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。

其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。

1、查询全部

     /**
* 查询全部
* jqpl:from cn.itcast.domain.Customer
* sql:SELECT * FROM cst_customer
*/
@Test
public void testFindAll() {
//1.获取entityManager对象
EntityManager em = JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.查询全部
//Customer相当于from cn.itcast.domain.Customer,此处省略了包名,Customer不可写成customer
String jpql = "from Customer ";
Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jqpl的对象 //发送查询,并封装结果集
List list = query.getResultList(); for (Object obj : list) {
System.out.print(obj);
} //4.提交事务
tx.commit();
//5.释放资源
em.close();
}

2、排序查询

     /**
* 排序查询: 倒序查询全部客户(根据id倒序)
* sql:SELECT * FROM cst_customer ORDER BY cust_id DESC
* jpql:from Customer order by custId desc
* (custId:实体类属性)
*
* 进行jpql查询
* 1.创建query查询对象
* 2.对参数进行赋值
* 3.查询,并得到返回结果
*/
@Test
public void testOrders() {
//1.获取entityManager对象
EntityManager em = JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.查询全部
String jpql = "from Customer order by custId desc";
Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jqpl的对象 //发送查询,并封装结果集
List list = query.getResultList(); for (Object obj : list) {
System.out.println(obj);
} //4.提交事务
tx.commit();
//5.释放资源
em.close();
}

3、统计查询

     /**
* 使用jpql查询,统计客户的总数
* sql:SELECT COUNT(cust_id) FROM cst_customer
* jpql:select count(custId) from Customer
*/
@Test
public void testCount() {
//1.获取entityManager对象
EntityManager em = JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.查询全部
//i.根据jpql语句创建Query查询对象
String jpql = "select count(custId) from Customer";
Query query = em.createQuery(jpql);
//ii.对参数赋值
//iii.发送查询,并封装结果 /**
* getResultList : 直接将查询结果封装为list集合
* getSingleResult : 得到唯一的结果集
*/
Object result = query.getSingleResult(); System.out.println(result); //4.提交事务
tx.commit();
//5.释放资源
em.close();
}

4、分页查询

     /**
* 分页查询
* sql:select * from cst_customer limit 0,2
* jqpl : from Customer
*/
@Test
public void testPaged() {
//1.获取entityManager对象
EntityManager em = JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.查询全部
//i.根据jpql语句创建Query查询对象
String jpql = "from Customer";
Query query = em.createQuery(jpql);
//ii.对参数赋值 -- 分页参数
//起始索引(此处从0开始,不包含0)
query.setFirstResult(0);
//每页查询的条数
query.setMaxResults(2); //iii.发送查询,并封装结果 /**
* getResultList : 直接将查询结果封装为list集合
* getSingleResult : 得到唯一的结果集
*/
List list = query.getResultList(); for(Object obj : list) {
System.out.println(obj);
} //4.提交事务
tx.commit();
//5.释放资源
em.close();
}

5、条件查询

     /**
* 条件查询
* 案例:查询客户名称以‘传智播客’开头的客户
* sql:SELECT * FROM cst_customer WHERE cust_name LIKE ?
* jpql : from Customer where custName like ?
*/
@Test
public void testCondition() {
//1.获取entityManager对象
EntityManager em = JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.查询全部
//i.根据jpql语句创建Query查询对象
String jpql = "from Customer where custName like ? ";
Query query = em.createQuery(jpql);
//ii.对参数赋值 -- 占位符参数
//第一个参数:占位符的索引位置(从1开始),第二个参数:取值
query.setParameter(1,"传智播客%"); //iii.发送查询,并封装结果 /**
* getResultList : 直接将查询结果封装为list集合
* getSingleResult : 得到唯一的结果集
*/
List list = query.getResultList(); for(Object obj : list) {
System.out.println(obj);
} //4.提交事务
tx.commit();
//5.释放资源
em.close();
}

最新文章

  1. nodeJS环境
  2. PMO、P3O
  3. Coder-Strike 2014 - Round 1 B. Network Configuration
  4. Tornado (and Twisted) in the age of asyncio》
  5. 第1章 shell编程概述
  6. IOS缓存之NSCache缓存
  7. java开发之关键字
  8. dbms_stats.gather_table_stats与analyze table 的区别[转贴]
  9. Day11 Memcached、Redis和RabbitMQ安装
  10. ecshop订单状态对应值详解
  11. GitLab11.3.9 使用 Crowd3.3.2 的帐号实现 SSO 单点登录,以及GitLab配置腾讯企业邮箱
  12. 潭州课堂25班:Ph201805201 django 项目 第三十一课 在线课堂视频点播的实现(课堂笔记)
  13. 如何设置IntelliJ IDEA智能感知支持Jsp内置对象
  14. Keepalived基础知识-运维小结
  15. HDFS上创建文件、写入内容
  16. bitset,2018蓝桥杯-明码(二进制转换)
  17. 2019.01.21 NOIP训练 ak树(点分治)
  18. VMware vCenter Orchestrator
  19. 六大iT公司的组织结构
  20. oracle用sql 语句如何向表中插入时间?

热门文章

  1. redis管理工具rdm安装;另一个管理工具medis
  2. Scrapy框架学习参考资料
  3. 微信小程序 — 自定义picker选择器弹窗内容+textarea穿透bug
  4. 6种php加密解密方法
  5. mui 关键词查询
  6. 【LOJ】#3101. 「JSOI2019」精准预测
  7. Python解Leetcode: 539. Minimum Time Difference
  8. Spring4学习回顾之路09-基于注解的方式配置bean
  9. (四)mybatis 的主键返回
  10. PHP后台开发小经验