排序之后是分页查询。


检索单个对象


还可以进行参数的绑定。

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. vs Code打开新的文件会覆盖窗口中的文件?

    这是因为你单击文件名的缘故,这个是“预览模式”,所以再单击其他文件时,会覆盖当前打开的文件. 如果你要每次都打开新tab,那就双击文件名好了.这个逻辑和sublime是一样的. 补充: 预览模式是现在 ...

  2. 为什么Java中的String是设计成不可变的?(Why String is immutable in java)

    There are many reasons due to the string class has been made immutable in Java. These reasons in vie ...

  3. Consul 集群搭建

    搭建集群:.启动node1机器上的Consul (node1机器上执行) consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.0.1 ...

  4. 什么是 MIME TYPE

    首先,我们要了解浏览器是如何处理内容的.在浏览器中显示的内容有 HTML.有 XML.有 GIF.还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME T ...

  5. springcloud(四):Eureka的配置详解

    在Eureka的服务治理体系中,主要分为服务端和客户端两个不同的角色,服务端为服务注册中心,客户端为提供各个接口的微服务应用,这里介绍一下Eureka的配置. Eureka服务端配置 在实际应用中,我 ...

  6. Java超简明入门学习笔记(二)

    Java编程思想第4版学习笔记(二) 第三章 操作符 & 第四章 控制执行流程(流程控制语句)         第三章和第四章的内容主要是讲操作符和流程控制语句,Java的大多数操作符和流程控 ...

  7. Css if hack条件语法

    Css if hack条件语法  <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> ...

  8. SSH协议的Python实现paramiko

    目录 paramiko安装 SSHClient类与SFTPClient类 SSHClient类的方法 SFTPClient类的方法 paramiko的基本使用 paramiko.SSHClient两种 ...

  9. node概览和安装

    一.node是一个平台环境,可以运行js代码的服务器端平台. 设计最初node是用来解决并发问题的,现在可以用来放在服务端使用. node平台的有优点:运行速度快,支持高并发,轻便.小巧 但是与jav ...

  10. Ionic 图片预览ion-slide-box,ion-slide,ion-scroll实现

    1.index.html 代码 <body ng-app="starter"> <ion-pane> <ion-header-bar class=&q ...