Hibernate的学习之路三十(HQL的基本查询)、
2017-12-04 12:13
453 查看
前言
这篇主要是接着上篇来说的。先贴出大致图。技术分析之Hibernate框架的查询方式
1. 唯一标识OID的检索方式 * session.get(对象.class,OID) 2. 对象的导航的方式 3. HQL的检索方式 * Hibernate Query Language -- Hibernate的查询语言 4. QBC的检索方式 * Query By Criteria -- 条件查询 5. SQL检索方式(了解) * 本地的SQL检索
1.主要是用来主键查询,
2.对象导航查询,get对象里的对象。
3.数据全表查询。
4.条件查询
5.很少适用,自己封装sql。
这篇主要是写HQL查询。
分析
技术分析之HQL的查询方式概述1. HQL的介绍 * HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似 * 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式 2. HQL与SQL的关系 * HQL 查询语句是面向对象的,Hibernate负责解析HQL查询语句, 然后根据对象-关系映射文件中的映射信息, 把 HQL 查询语句翻译成相应的 SQL 语句. * HQL 查询语句中的主体是域模型中的类及类的属性 * SQL 查询语句是与关系数据库绑定在一起的. SQL查询语句中的主体是数据库表及表的字段
技术分析之HQL的查询演示
1. HQL基本的查询格式 * 支持方法链的编程,即直接调用list()方法 * 简单的代码如下 * session.createQuery("from Customer").list(); 2. 使用别名的方式 * 可以使用别名的方式 * session.createQuery("from Customer c").list(); * session.createQuery("select c from Customer c").list(); 3. 排序查询 * 排序查询和SQL语句中的排序的语法是一样的 * 升序 * session.createQuery("from Customer order by cust_id").list(); * 降序 * session.createQuery("from Customer order by cust_id desc").list(); 4. 分页查询 * Hibernate框架提供了分页的方法,咱们可以调用方法来完成分页 * 两个方法如下 * setFirstResult(a) -- 从哪条记录开始,如果查询是从第一条开启,值是0 * setMaxResults(b) -- 每页查询的记录条数 * 演示代码如下 * List<LinkMan> list = session.createQuery("from LinkMan").setFirstResult(0).setMaxResults().list(); 5. 带条件的查询 * setParameter("?号的位置,默认从0开始","参数的值"); 不用考虑参数的具体类型 * 按位置绑定参数的条件查询(指定下标值,默认从0开始) * 按名称绑定参数的条件查询(HQL语句中的 ? 号换成 :名称 的方式) * 例如代码如下 Query query = session.createQuery("from Linkman where lkm_name like ? order by lkm_id desc"); query.setFirstResult(0).setMaxResults(3); query.setParameter(0, "%熊%"); List<Linkman> list = query.list(); for (Linkman linkman : list) { System.out.println(linkman); }
代码
/** * 按条件进行查询 */ @Test public void run6(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); // 查询联系人 Query query = session.createQuery("from Linkman l where l.lkm_id > ? and l.lkm_gender = ?"); // 传入 // query.setString(0, "男"); // 传入值 // query.setString("gender", "女"); // query.setLong(0, 2L); // 通用的方法,就不用再判断具体的类型 query.setParameter(0, 3L); query.setParameter(1, "女"); List<Linkman> list = query.list(); for (Linkman linkman : list) { System.out.println(linkman); } tr.commit(); } /** * HQL分页查询的两个方法 * * setFirstResult(a) -- 从哪条记录开始,如果查询是从第一条开启,值是0 * setMaxResults(b) -- 每页查询的记录条数 */ @Test public void run5(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); // 查询联系人 Query query = session.createQuery("from Linkman l"); // 分页查询,调用方法,查询第一页的数据 1-3条 /*query.setFirstResult(0); query.setMaxResults(3);*/ // 查询第二页的数据 query.setFirstResult(3); (当前页-1)*pageSize=3 query.setFirstResult(3); query.setMaxResults(3); List<Linkman> list = query.list(); for (Linkman linkman : list) { System.out.println(linkman); } tr.commit(); } /** * 排序查询 * SQL:order by 字段 asc/desc; * HQL:关键字是一样的,都是有order by 属性 */ @Test public void run4(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); // 查询联系人 List<Linkman> list = session.createQuery("from Linkman l order by l.lkm_id desc").list(); for (Linkman linkman : list) { System.out.println(linkman); } tr.commit(); } /** * 是有别名的方式 * select * from cst_cutomer c * select * from Customer 语句错误的 */ @Test public void run3(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); // 创建HQL的查询的接口 List<Customer> list = session.createQuery("select c from Customer c").list(); for (Customer customer : list) { System.out.println(customer); } tr.commit(); } /** * 支持方法链的编程风格 */ @Test public void run2(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); // 创建HQL的查询的接口 List<Customer> list = session.createQuery("from Customer").list(); for (Customer customer : list) { System.out.println(customer); } tr.commit(); } /** * 基本的演示 */ @Test public void run1(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); // 创建HQL的查询的接口 Query query = session.createQuery("from Customer"); // 调用list()方法,查询 List<Customer> list = query.list(); for (Customer customer : list) { System.out.println(customer); } tr.commit(); }
相关文章推荐
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十(HQL的基本查询)、
- Hibernate的学习之路三十二(HQL的聚合函数查询)
- Hibernate的学习之路三十三(QBC的基本查询方式)
- Hibernate的学习之路十七(HQL条件查询)
- Hibernate的学习之路三十二(HQL的聚合函数查询)
- Hibernate的学习之路三十三(QBC的基本查询方式)
- hibernate学习系列-----(4)hibernate基本查询上篇:HQL基本查询