排序之后是分页查询。


检索单个对象


还可以进行参数的绑定。

HQL的参数绑定,按参数名称绑定或者是按参数位置绑定。


还可以用投影的操作,投影的操作是只查询这里面的某几个属性。只查询某一个属性,查询多个属性,查询完以后还把这些属性装到一个实体类对象里面那你就用投影这种形式。




模糊查询

package cn.itcast.test;

import java.util.Arrays;
import java.util.List; import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.junit.Test; import cn.itcast.utils.HibernateUtils;
import cn.itcast.vo.Customer;
import cn.itcast.vo.Order; /**
* Hibernate的检索方式
* @author zhongzh
*
*/
public class HibernateDemo1 {
@Test
/*模糊查询
*
*
*/
public void demo11(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); //HQL
/* Query query= session.createQuery("from Customer where cname like ?");
query.setParameter(0, "小%");
List<Customer> list = query.list();
System.out.println(list);*/ //QBC:
Criteria criteria = session.createCriteria(Customer.class);
//criteria.add(Restrictions.ilike("cname", "小%"));
criteria.add(Restrictions.ilike("cname", "大%"));
List<Customer> list = criteria.list();
System.out.println(list); tx.commit();
session.close(); } @Test
/*
* in like is null....
* QBC条件查询
*
*/
public void demo10(){
Session session= HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//类似于这种条件查询用?号进行绑定的你都可以用QBC进行替换
//QBC如何替换?QBC进行条件检索 /*List<Customer> list = session.createCriteria(Customer.class).add(Restrictions.eq("cname", "小明")).list();
System.out.println(list);//这是绑定一个条件的
*/ List<Customer> list = session.createCriteria(Customer.class)
.add(Restrictions.eq("cname", "小明")).add(Restrictions.eq("cid", 2)).list();
System.out.println(list);//这是绑定多个条件的 tx.commit();
session.close();
} @Test
/*
*
* 投影操作:查询对象的某几个属性
*/
public void demo9(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); //查询客户的名称:
/* List list = session.createQuery("select c.cname from Customer c").list();
System.out.println(list);*/
/* List<Object[]> list = session.createQuery("select c.cid,c.cname from Customer c").list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
System.out.println(list);*/ List<Customer> list = session.createQuery("select new Customer(cname) from Customer").list();
//可以用这种类似于我们对象的这种构造的形式来进行查询 类似于对象构造的形式来进行查询
System.out.println(list);
tx.commit();
session.close();
}
@Test
/*
*
* 绑定参数
*/
public void demo8(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); //HQL的参数绑定
//1.使用?号方式绑定
/* Query query = session.createQuery("from Customer where cname = ?");
query.setString(0, "小沈");
List<Customer> list = query.list();
//query.uniqueResult();
System.out.println(list);*/ /*Query query = session.createQuery("from Customer where cname = ? and cid=?");
query.setString(0, "小沈");//0是第一个?号 第一个?号的值是小沈
query.setInteger(1, 3);//1是第二个?号 第二个?号的值是3
List<Customer> list = query.list();
System.out.println(list);*/ //2.使用名称的方式绑定
/*Query query = session.createQuery("from Customer where cname=:name and cid=:id");//返回的是一个Query接口
query.setString("name", "小沈");
query.setInteger("id", 3);
query.setParameter("name", "小沈");//setParameter()你不用判断到底是什么类型 了
query.setParameter("id", 3);
List<Customer> list = query.list();
System.out.println(list);*/
//查询的时候相当于两表关联,两表关联是通过外键关联的
Customer customer = new Customer();//
customer.setCid(1);//1号客户 这里只需要给Customer设置一个id即可
//持久化对象根据id可以唯一确定这个对象
//所以它的写法是相当的灵活的
List<Order> list = session.createQuery("from Order o where o.customer = ?").setEntity(0, customer).list();//设置的是一个实体类Customer
for (Order order : list) {
System.out.println(order);
} tx.commit();
session.close();
}
@Test
/*
*
*
*/
public void demo7(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//HQL获取单个对象 这里你可以list()也可以uniqueResult() uniqueResult()就拿到了一个结果 /*Customer customer = (Customer) session.createQuery("from Customer where cname = ? ").setString(0, "小明").uniqueResult(); System.out.println(customer);*/ //QBC方式获取单个对象
//Customer customer = (Customer) session.createCriteria(Customer.class).setMaxResults(1).add(((Criteria) Restrictions.eq("cname", "小明")).uniqueResult();//session.createCriteria(Customer.class)查到所有。从0开始只查一个。
Customer customer = (Customer) session.createCriteria(Customer.class).add( Restrictions.eq("cname", "小明")).uniqueResult();//session.createCriteria(Customer.class)查到所有。从0开始只查一个。
//FirstResult是从哪儿开始,你没有设置的话它就默认从0开始。查1个。setMaxResults(1)查一个
System.out.println(customer);
tx.commit();
session.close();
}
@Test
/*
* 分页查询
*
*/
public void demo6(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); //1.HQL进行分页
/*Query query = session.createQuery("from Order");
//query.setFirstResult(0);
//query.setMaxResults(10); query.setFirstResult(10);
query.setMaxResults(10);
query.setFirstResult(20);
query.setMaxResults(10); List<Order> list = query.list();//查询订单的时候把它的客户也关联出来.这种是导航的形式,查询订单的时候把订单所关联的客户信息都打印出来
for (Order order : list) {
System.out.println(order);
}*/
//2.QBC进行分页
Criteria criteria = session.createCriteria(Order.class);
/* criteria.setFirstResult(0);
criteria.setMaxResults(10);*/
criteria.setFirstResult(10);
criteria.setMaxResults(10); List<Order> list = criteria.list();
for (Order order : list) {
System.out.println(order);
}
tx.commit();
session.close();
}
@Test
public void demo5(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//1.使用HQL进行排序
/* List<Customer> list = session.createQuery("from Customer c order by c.id desc").list(); for(Customer customer : list){
System.out.println(customer);
}*/ //2.使用QBC的方式进行排序
List<Customer> list = session.createCriteria(Customer.class).addOrder(org.hibernate.criterion.Order.desc("id")).list();
for (Customer customer : list) {
System.out.println(customer);
} tx.commit();
session.close();
} @Test
/*
*
* 多态检索
*/
public void demo4(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
List<Object[]> list = session.createQuery("from java.lang.Object").list();
//System.out.println(list);
/* for(Object[] objects:list){
System.out.println(objects);//在hibernate3核心配置文件里面配置的映射继承自某个类就给它显示出来
}
*/
System.out.println(list);//在hibernate3核心配置文件里面配置的映射继承自某个类就给它显示出来
//正常HQL语句例如之前写的 from Customer c要加上包名from cn.itcast.vo.Customer.但是因为在Customer.hbm.xml
//中已经配置了包名.所以在这里的HQL语句已经知道是哪个包下面的Customer.
tx.commit();
session.close();
} @Test
/*
* 使用别名:
*
*/
public void demo3(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); //使用别名
//List<Customer> list = session.createQuery("from Customer as c where c.cname = ?").list();
/* List<Customer> list = session.createQuery("from Customer as c").list();
System.out.println(list);*/ //使用别名:带参数
/* List<Customer> list = session.createQuery("from Customer as c where c.cname = ?").setString(0, "小沈").list();
System.out.println(list);*/ //别名as可以省略
/* List<Customer> list = session.createQuery("from Customer c").list();
System.out.println(list);*/
//不支持 select * from Customer写法.可以写成select 别名 from Customer as 别名;
//List<Customer> list = session.createQuery("select * from Customer").list();//createQuery不支持select *的写法,会报语法错误
List<Customer> list = session.createQuery("select c from Customer c").list();//createQuery不支持select *的写法,会报语法错误 System.out.println(list);
tx.commit();
session.close();
} @Test
public void demo2(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); //1.使用HQL查询所有客户信息:
/* Query query = session.createQuery("from Customer");//"from Customer"是一个HQL语句。返回一个Query接口
query.list();
*
*/
//session.createQuery("from Customer").setString("", "").list();//HQL支持方法链编程
/* List<Customer> list = session.createQuery("from Customer").list();//HQL支持方法链编程
for(Customer customer:list){
System.out.println(customer);
}*/ //2.使用QBC的方式查询所有记录:
/* List<Customer> list= session.createCriteria(Customer.class).list();//返回Criteria接口
for (Customer customer:list){
System.out.println(customer);
}*/ //3.使用SQL语句查询所有记录:
/* List<Object[]> list = session.createSQLQuery("select * from customer").list();//这里要写SQL语句 这里操作的是数据库表
//但是HQL和QBC方式操作的都是对象 这种SQL查询的方式得到的List集合不会直接装到实体对象里面。而是放到Object数组中。
for(Object[] objects:list){
System.out.println(Arrays.toString(objects));//把Object数组打印一下
}*/
//4.使用SQL语句查询所有记录:封装到实体对象中
List<Customer> list = session.createSQLQuery("select * from customer").addEntity(Customer.class).list();//这里要写SQL语句 这里操作的是数据库表
//但是HQL和QBC方式操作的都是对象 这种SQL查询的方式得到的List集合不会直接装到实体对象里面。而是放到Object数组中。这也是方法链编程
for(Customer customer:list){
System.out.println(customer);//这个时候就是打印出实体对象的方式
}
tx.commit();
session.close();
}
@Test
/*
*
* 初始化数据
*/
public void demo1(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); Customer customer = new Customer();
//customer.setCname("小金");
//customer.setCname("小明");
customer.setCname("小沈"); for(int i=0;i<=10;i++){
Order order = new Order();
//order.setAddr("西三旗"+i);
order.setAddr("山东"+i);
order.setCustomer(customer); customer.getOrders().add(order);
}
session.save(customer);
//还需要设置订单,如果不想设置订单那就要配置级联才行
tx.commit();
session.close();
}
}
package cn.itcast.vo;

import java.util.HashSet;
import java.util.Set; /**
* 客户的实体:
* @author 姜涛
*
*/
public class Customer {
private Integer cid;
private String cname; public Customer() {//无参构造函数
super();
// TODO Auto-generated constructor stub
} public Customer(String cname) {//有参构造
super();
this.cname = cname;
} // 一个客户有多个订单.
private Set<Order> orders = new HashSet<Order>();
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
@Override
public String toString() {//客户这里打印也打印出订单的集合。这是死循环了,所以这里应该去掉一方的打印。
/* return "Customer [cid=" + cid + ", cname=" + cname + ", orders="
+ orders + "]";*/
return "Customer [cid=" + cid + ", cname=" + cname + "]";//客户这里去掉订单集合的打印 } }

day36 03-Hibernate检索方式:排序、参数绑定、投影查询的更多相关文章

  1. Hibernate入门6.Hibernate检索方式

    Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...

  2. (转) Hibernate检索方式概述

    http://blog.csdn.net/yerenyuan_pku/article/details/70554816 Hibernate检索方式概述 我们在对数据库的操作中,最常用的是select, ...

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

    hibernate有五种检索方式,这儿用 单向的一对多的映射关系 例子,这儿有后三种的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 ...

  4. Hibernate 检索方式

    概述 •Hibernate 提供了以下几种检索对象的方式 –导航对象图检索方式:  根据已经加载的对象导航到其他对象 –OID 检索方式:  按照对象的 OID 来检索对象 –HQL 检索方式: 使用 ...

  5. [原创]java WEB学习笔记89:Hibernate学习之路-- -Hibernate检索方式(5种),HQL介绍,实现功能,实现步骤,

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

  6. Hibernate 检索方式之 HQL 检索方式

    HQL(Hibernate Query Language) 是面向对象的查询语言,它和 SQL 查询语言有些相似.在 Hibernate 提供的各种检索方式中,HQL 是使用最广的一种检索方式,它有如 ...

  7. Hibernate -- 检索方式 HQL

    Hibernate 提供了以下几种检索对象的方式 导航对象图检索方式:  根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的OID 来检索对象 HQL 检索方式:使用面向对象的HQL查询 ...

  8. Hibernate检索方式 分类: SSH框架 2015-07-10 22:10 4人阅读 评论(0) 收藏

    我们在项目应用中对数据进行最多的操作就是查询,数据的查询在所有ORM框架中也占有极其重要的地位.那么,如何利用Hibernate查询数据呢?Hibernate为我们提供了多种数据查询的方式,又称为Hi ...

  9. Hibernate检索方式(转载)

    我们在项目应用中对数据进行最多的操作就是查询,数据的查询在所有ORM框架中也占有极其重要的地位. 那么,如何利用Hibernate查询数据呢?Hibernate为我们提供了多种数据查询的方式,又称为H ...

  10. day36 04-Hibernate检索方式:多表连接查询

    返回的是一个List集合,这个List集合的泛型是一个Object数组.最后会拿到一个里面放Object数组的List集合. HQL内连接查询,发出SQL语句查询出来的结果集被Hibernate封装成 ...

随机推荐

  1. Linux的CentOS上如何安装nginx

    1. 安装nginx前,首先要装好gcc和g++环境: 2. 在centOS上装nginx,需要PCRE.zlib和ssl的支持,出ssl外其他都需要从其官网上下载好,上传至服务器: 3. 接着将上传 ...

  2. Spring MVC(七)--传递JSON参数

    有时候参数的传递还需要更多的参数,比如一个获取用户信息的请求中既有用户ID等基本参数,还要求对查询结果进行分页,针对这种场景,一般都会将分页参数封装成一个对象,然后将它和基本参数一起传给控制器,为了控 ...

  3. Linux RHEL7(CentOS7源) 安装 Nginx

    安装步骤 1.添加 Nginx 源地址 CentOS7 默认没有提供 Nginx 的源,但 Nginx 自己提供了 sudo rpm -Uvh http://nginx.org/packages/ce ...

  4. nfs 原理详解

    一.NFS介绍 1)什么是NFS 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录.NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中.在本地的N ...

  5. 07.Hibernate常用的接口和类---Session接口☆☆☆☆☆

    一.特点 Session是在Hibernate中使用最频繁的接口.也被称之为持久化管理器.它提供了和持久化有关的操作,比如添加.修改.删除.加载和查询实体对象 Session 是应用程序与数据库之间交 ...

  6. 浪潮云+/云加 App 智能化的企业移动办公平台官网下载地址

    上Google?Facebook? 点这里: 手机端:https://ecm.inspur.com/ 桌面端:https://ecm.inspuronline.com/

  7. CSP-S模拟41影子,玫瑰花精题解

    题面:https://www.cnblogs.com/Juve/articles/11523567.html 影子: 暴力方法:枚举每一对点暴力统计最小权 优化:考虑并查集,枚举每个点,如果没有被访问 ...

  8. 关于MySQL IN LIKE OR使用索引的问题

    以前在网上看了一些资料,有些人说话不严谨,导致一直被误导,最近在实际开发中发现一些结论有问题,因此特地整理了一下,防止下次继续犯错. 以下前提是有对这个字段建立索引(简直废话,没建的肯定不会使用索引啊 ...

  9. ROCR包中ROC曲线计算是取大于cutoff还是大于等于cutoff

    找到对应的代码如下 .compute.unnormalized.roc.curve function (predictions, labels) { pos.label <- levels(la ...

  10. PAT甲级——A1047 Student List for Course

    Zhejiang University has 40,000 students and provides 2,500 courses. Now given the registered course ...