Hibernate之QBC检索和本地SQL检索

QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口

本地SQL查询来完善HQL不能涵盖所有的查询特性。

====================代码区======================

测试类

  1 package com.yl.hibernate.test;
  2
  3
  4 import java.util.ArrayList;
  5 import java.util.Arrays;
  6 import java.util.LinkedHashSet;
  7 import java.util.List;
  8 import java.util.Set;
  9
 10 import oracle.net.aso.e;
 11
 12 import org.hibernate.Criteria;
 13 import org.hibernate.Query;
 14 import org.hibernate.Session;
 15 import org.hibernate.SessionFactory;
 16 import org.hibernate.Transaction;
 17 import org.hibernate.cfg.Configuration;
 18 import org.hibernate.criterion.Conjunction;
 19 import org.hibernate.criterion.Disjunction;
 20 import org.hibernate.criterion.MatchMode;
 21 import org.hibernate.criterion.Order;
 22 import org.hibernate.criterion.Projection;
 23 import org.hibernate.criterion.Projections;
 24 import org.hibernate.criterion.Restrictions;
 25 import org.hibernate.service.ServiceRegistry;
 26 import org.hibernate.service.ServiceRegistryBuilder;
 27 import org.junit.After;
 28 import org.junit.Before;
 29 import org.junit.Test;
 30
 31 import com.yl.hibernate.entities.Department;
 32 import com.yl.hibernate.entities.Employee;
 33
 34 public class HibernateTest {
 35
 36     private SessionFactory sessionFactory;
 37     private Session session;
 38     private Transaction transaction;
 39
 40     @Before
 41     public void init() {
 42         Configuration configuration = new Configuration().configure();
 43         ServiceRegistry serviceRegistry =
 44                 new ServiceRegistryBuilder().applySettings(configuration.getProperties())
 45                                             .buildServiceRegistry();
 46
 47         sessionFactory = configuration.buildSessionFactory(serviceRegistry);
 48
 49         session = sessionFactory.openSession();
 50
 51         transaction = session.beginTransaction();
 52     }
 53     @After
 54     public void destory() {
 55         transaction.commit();
 56
 57         session.close();
 58
 59         sessionFactory.close();
 60     }
 61
 62
 63     @Test
 64     public void testQBC() {
 65         //1.创建一个Ctiteria对象
 66         Criteria criteria = session.createCriteria(Employee.class);
 67         //2.添加查询条件:在QBC中查询条件使用Criterion来表示
 68         //Criterion可以通过Restrictions 的静态方法得到
 69         criteria.add(Restrictions.eq("email", "PRESIDENT"));
 70         criteria.add(Restrictions.gt("salary", 500f));
 71         //3.执行查询
 72         Employee employee = (Employee) criteria.uniqueResult();
 73         System.out.println(employee);
 74     }
 75
 76     @Test
 77     public void testQBC2() {
 78
 79         Criteria criteria = session.createCriteria(Employee.class);
 80         //1.AND: 使用Conjunction表示
 81         //Conjunction 本身就是一个Criterion对象
 82         //且其中还可以添加Criterion对象
 83         Conjunction conjunction = Restrictions.conjunction();
 84         conjunction.add(Restrictions.like("name", "A", MatchMode.ANYWHERE));
 85         Department dept = new Department();
 86         dept.setId(20);
 87         conjunction.add(Restrictions.eq("dept", dept));
 88         System.out.println(conjunction);
 89
 90         //2. OR
 91         Disjunction disjunction = Restrictions.disjunction();
 92         disjunction.add(Restrictions.ge("salary", 1000F));
 93         disjunction.add(Restrictions.isNotNull("email"));
 94
 95         criteria.add(disjunction);
 96         criteria.add(conjunction);
 97
 98         criteria.list();
 99         /**
100          *  where
101         (
102             this_.SALARY>=?
103             or this_.EMAIL is not null
104         )
105         and (
106             this_.NAME like ?
107             and this_.DEPT_ID=?
108         )
109          */
110     }
111
112     @Test
113     public void testQBC3() {
114         Criteria criteria = session.createCriteria(Employee.class);
115
116         //统计查询: 使用Projection表示: 可以由Projections的静态方法得到
117         criteria.setProjection(Projections.max("salary"));
118
119         System.out.println(criteria.uniqueResult());
120     }
121
122     @Test
123     public void testQBC4() {
124         Criteria criteria = session.createCriteria(Employee.class);
125
126         //1.添加排序
127         criteria.addOrder(Order.asc("salary"));
128         criteria.addOrder(Order.desc("email"));
129
130         //2.添加分页
131         int pageSize = 3;
132         int pageNo = 2;
133         criteria.setFirstResult((pageNo - 1) * pageSize)
134                 .setMaxResults(pageSize)
135                 .list();
136
137     }
138
139     @Test
140     public void testNative() {
141         String sql = "INSERT INTO YL_department VALUES(?, ?)";
142         Query query = session.createSQLQuery(sql);
143
144         query.setInteger(0, 50)
145              .setString(1, "DEV")
146              .executeUpdate();
147     }
148
149     @Test
150     public void testHQLUpdate() {
151         String hql = "DELETE FROM Department d WHERE d.id = :id";
152
153         session.createQuery(hql).setInteger("id", 50)
154                                 .executeUpdate();
155
156     }
157 }
时间: 2024-10-24 11:31:57

Hibernate之QBC检索和本地SQL检索的相关文章

[原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Hibernate(十五):QBC检索和本地SQL检索

QBC检索 QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口. 1)通过Critera实现具有条件的查询 1 @Test 2 public void testCriteria00() { 3 // 1.创建criteria对象 4 Criteria criteria = session.createCriteria(Employee.class); 5 6 // 2.添加过

QBC检索和本地SQL检索

细说QBC:QBC(Query By Criteria) 查询:这种方式比较面向对象方式,因为是面向对象,所以查询时参数名就是所查询的类的属性名并不是数据库的表的列名重点是有三个描述条件的对象:Restrictions,Order,Projections.使用QBC查询,一般需要以下三个步骤: 1. 使用Session实例 的createCriteria()方法创建Criteria对象 , 2. 并使用add()方法添加设置查询条件,工具类Restrictions的方法为Criteria对象设置

hibernate检索方式(HQL 检索方式,QBC 检索方式,本地 SQL 检索方式)

hibernate有五种检索方式,这儿用 单向的一对多的映射关系 例子,这儿有后三种的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 HQL 检索方式: 使用面向对象的 HQL 查询语言 QBC 检索方式: 使用 QBC(Query By Criteria) API 来检索对象. 这种 API 封装了基于字符串形式的查询语句, 提供了更加面向对象的查询接口. 本地 SQL 检索方式: 使用本地数据库的 SQL 查询语句 建立封装

Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)

1.非集成Spring hibernate的检索方式,主要有以下五种. 1.导航对象图检索方式.(根据已经加载的对象,导航到其他对象.) 2.OID检索方式.(按照对象的OID来检索对象.) 3.HQL检索方式.(使用面向对象的HQL查询语言.) 4.QBC检索方式.(使用QBC(Qurey By Criteria) API来检索对象.) 5.本地SQL检索方式.(使用本地数据库的SQL查询语句.) 1.导航对象图检索方式 利用类与类之间的关系来检索对象.譬如我们要查找一份订单,就可以由订单对象

框架 day33 Hibernate,组件映射,继承映射,抓取(检索)策略-优化,检索方式总结

组件(组成)映射 例1: public class Person { private Integer pid; //OID 值 private String name; //第一种方案 private String homeAddr; private String homeTel; private String companyAddr; private String companyTel; ↑一般项目都都采用此方案() *通过面向对象角度,使用设计模式(组件|组合),将数据都抽取到一个对象中.将

SQL 检索所有存储过程中是否包含某字符

--将text替换成你要查找的内容 select name from sysobjects o, syscomments s where o.id = s.id and text like '%text%' and o.xtype = 'P' --将text替换成你要查找的内容 SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%text%

【VBS】检索Outlook本地邮箱

实现功能:使用VBS检索Outlook本地邮箱中,今天是否收到某标题的邮件. 代码如下: Const C_DATE_FORMAT_MAIL_FILTER_FROM = 1 ' yyyy-m-d 0:00 AM Const C_DATE_FORMAT_MAIL_FILTER_TO = 2 ' yyyy-m-d 11:59 PM Function CheckMail(pMailFolder, pMailTitle) On Error Resume Next Dim objOlApp Dim objN

本地SQL查询

-------------------siwuxie095 本地 SQL 查询 1.简单介绍 采用 HQL 或 QBC 查询时,Hibernate 生成标准的 SQL 语句, 适用于所有的数据库平台,因此这两种查询方式都是跨平台的 但有的数据库可能需要底层数据库的 SQL 方言,来生成一些 特殊的查询语句 此时,可以使用 Hibernate 提供的本地 SQL 查询 2.使用 SQLQuery 对象实现本地 SQL 查询 以客户和联系人为例(一对多) 如: /* * (1) 创建 SQLQuer