Hibernate各种查询操作(一)

测试数据库如下:

t_sort表:                                   t_good表:

一、对象导航方式查询

查询所有食品类下面的食品

代码:

//对象导航查询
@Test public void Test1(){
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1、使用get方法查询出食品类
Sort food = session.get(Sort.class, 1);
//2、使用sort对象的方法得到所有食品类中的食品
Set<Good> set = food.getSetGoods();
//3、遍历set集合
for (Good good : set) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}

查询结果:

二、OID查询

OID查询就是根据id查询某一条记录

代码:

//OID查询方式
@Test public void Test2(){
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//OID查询就是使用get方法查询出一条记录
Sort food = session.get(Sort.class, 1);
System.out.println(food);
tx.commit();
} catch (Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}

结果

    

三、HQL查询

hql查询是使用Hibernate Query Language进行的一种查询方式,在这种查询方式中必须要写hql语句才能查询。

1、查询所有

查询所有的hql语句格式为:from 实体类名称(以查询所有商品为例)

代码:

// HQL查询所有。查询所有商品为例
@Test
public void Test3() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good");
//2、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
//3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

测试结果:

  

2、条件查询

条件查询有准确查询和模糊查询,使用hql语句完成。

(1)准确查询hql语句:from 实体类名 where 实体属性名 = ? and 实体类属性名 = ?。

准确查询代码: 

// HQL准确条件查询。查询名字为面包,描述为奶油面包的记录
@Test
public void Test4() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good where gname = ? and gmono =?");
//2、填写上一步中占位符的内容
query.setParameter(0, "面包");
query.setParameter(1, "奶油面包");
//3、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
//3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

查询结果:

    

提示: 查询语法还有以下方式:(仅供参考)

(2)模糊查询hql语句:from 实体类名 where 实体类属性名 like  ?。

模糊查询代码:

    // HQL模糊条件查询。查询名字中有"手"字的记录
@Test
public void Test5() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good where gname like ?");
// 2、填写上一步中占位符的内容
query.setParameter(0, "%手%");
// 3、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
// 3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

模糊查询结果:

3、排序查询

排序查询hql语句:正序: form 实体类名称 order by 实体类属性名 asc

         倒序:from 实体类名称 order by 实体类属性名 desc

(1)正序查询代码 

// HQL排序条件查询。gid正序查询
@Test
public void Test6() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good order by gid asc");
// 2、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
// 3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

  正序查询测试结果:

    

(2)倒序查询代码: 

// HQL排序查询。gid倒序查询
@Test
public void Test7() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good order by gid desc");
// 2、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
// 3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

倒序查询测试结果:

    

4、分页查询

在mysql数据库中分页使用limit实现,在Hibernate中使用Query对象的两个方法实现。

分页查询代码:   

// HQL分页查询。每页3条数据查询
@Test
public void Test8() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good");
//2、使用Query的方法实现分页
//2.1设置第一个要查询的位置(计算公式:(当前页数-1)*每页的记录数)
query.setFirstResult(0);
//2.2设置每页显示的最大记录数
query.setMaxResults(3);
// 2、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
// 3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

测试结果:

  

5、投影查询

投影查询概念:查询的不是表中的所有字段,而是一部分字段

代码:

// HQL投影查询。查询Good的name
@Test
public void Test9() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("select gname from Good");
//2、获取结果
List<Object> list =query.list(); for (Object object : list) {
System.out.println(object);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

测试结果:

    

6、聚集函数查询

常用聚集函数:count  avg  max  min  sum

以count为例进行说明

hql语句:select count(*) from 实体类名称

代码:

// HQL投影查询。查询Good的name
@Test
public void Test10() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("select count(*) from Good");
//2、获取结果(结果为long类型)
Object obj = query.uniqueResult();
//3、转化为long(类型为long,转为int会报错)
Long long1 = (Long) obj;
int count = long1.intValue();
System.out.println(count);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

测试结果:

    

分享知识-快乐自己:Hibernate各种查询操作的更多相关文章

  1. Hibernate各种查询操作(一)

    测试数据库如下 t_sort表:                                   t_good表: 一.对象导航方式查询 查询所有食品类下面的食品 代码: //对象导航查询 @Te ...

  2. 分享知识-快乐自己:java代码 操作 solr

    POM 文件: <!-- solr客户端 --> <dependency> <groupId>org.apache.solr</groupId> < ...

  3. Hibernate各种查询操作(二)

    一.QBC的查询方式 使用QBC不在需要写hql语句,而是使用criteria对象的各种方法来实现. 1.查询所有 //使用QBC方式查询所有 @Test public void test11(){ ...

  4. Hibernate【查询、连接池、逆向工程】

    前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式....到目前为止,我们都是使用一些简单的主键查询阿...使用HQL查询所有的数据....本博文主要讲解Hiberna ...

  5. 分享知识-快乐自己:Caused by: org.hibernate.tool.schema.extract.spi.SchemaExtractionException: More than one table found in namespace (, ) : Dept (XXX)

    在命名空间(,)中找到多个表 - SchemaExtractionException? 问题: 尝试在Java应用程序中使用Hibernate将一些值保存到表中时,我一直面临着这个奇怪的异常. 但是, ...

  6. 分享知识-快乐自己:Hibernate 中 get() 和 load()、sava、update、savaOrUpdate、merge,不同之处及执行原理?

    1):Hibernate 中 get()  和 load() 有什么不同之处? 1)Hibernate的 get方法,会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在缓存中查 ...

  7. 分享知识-快乐自己:Hibernate 关联映射

    关联关系映射--概念: 关联关系是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系. 实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键 ...

  8. 分享知识-快乐自己:搭建第一个 Hibernate (Demo)

    使用 Hibernate 完成持久化操作 七大 步骤: 1.读取并解析配置文件及映射文件: Configuration configuration=new Configuration().config ...

  9. 分享知识-快乐自己:初识 Hibernate 概念片(一)

    1):什么是 Hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibe ...

随机推荐

  1. html小知识,怎么实现一个td占据2行

    <table border="1" width="100%"> <tr> <td rowspan="2"> ...

  2. (Caffe)基本类Blob,Layer,Net(一)

    本文地址:http://blog.csdn.net/mounty_fsc/article/details/51085654 Caffe中,Blob.Layer,Net,Solver是最为核心的类,下面 ...

  3. ThinkPHP第一课 环境搭建

    第一课 环境搭建 1.说明: ThinkPHP是一个开源的国产PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的. 最早诞生于2006年初.原名FCS.2007年元旦正式更名为Think ...

  4. VirtualBox 笔记

    VirtualBox 笔记p=111" target="_blank"> http://www.youi5.com/?p=111 VirtualBox 虚拟机,由I ...

  5. 网站添加ico图标

    打开某一个网页会在浏览器的标签栏处显示该网页的标题和图标,当网页被添加到收藏夹或者书签中时也会出现网页的图标,怎么在网页title左边显示网页的logo图标呢? 方法一(被动式): 制作一个ico格式 ...

  6. Windows Thin PC体验 & 语言包更改(win 7 included)

    本作品由Man_华创作,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.基于http://www.cnblogs.com/manhua/上的作品创作. 简介: Window ...

  7. 我的IT成长史,不以物喜,不以己悲

    http://bbs.51cto.com/thread-1066048-1.html本人87年,出生在北方一座3线城市,从小学就喜欢计算机,带着鞋套去机房练习打英文字母:初中顺理成章的通过了计算机1级 ...

  8. RF --系统关键字开发

    需求: 接收一个目录路径,自动遍历目录下以及子目录下的所有批处理(.bat) 文件并执行. 首先在..\Python27\Lib\site-packages 目录下创建 CustomLibrary 目 ...

  9. 中兴应用之星携手天翼开放平台:让APP开发更简单

    日前,业内率先的APP开发平台运营商中兴应用之星与中国电信天翼开放平台达成战略合作.即广大用户通过天翼开放平台,可直接享受到应用之星提供的"APP开发服务".   应用之星.中兴通 ...

  10. 转:DDR中端接技术基本概念

    DDR中端接技术基本概念  版权声明:转载请注明出处:http://blog.csdn.net/lg2lh https://blog.csdn.net/lg2lh/article/details/90 ...