操作前需要创建好Hibernate项目,创建项目,可参考:http://www.cnblogs.com/zhaojinyan/p/9336174.html
一下的例子是从其他贴子粘过来的(知识无国界!!),好了,抖擞抖擞精神,开始吧......
 
测试数据库如下

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查询所有数据的操作

    Hibernate查询所有数据的操作方式有三种. 1.Query (1)使用该方法查询时,不需要编写sql语句,但是需要编写hql(Hibernate Query Language)语句,该语句是Hi ...

  2. 分享知识-快乐自己:Hibernate各种查询操作

    Hibernate各种查询操作(一) 测试数据库如下: t_sort表:                                   t_good表: 一.对象导航方式查询 查询所有食品类下面 ...

  3. Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句

    我用的数据库是MySQL,实体类叫User public class User { private Integer uid; private String username; private Stri ...

  4. Hibernate查询

    HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...

  5. [摘]Hibernate查询事务必要性

    背景: 添加事务与否都不影响Hibernate的查询操作. 问题: 查询操作是否有必要添加事务? 答案1: Hibernate官方手册上建议任何操作(增删改查)都需要添加事务. 答案2: robbin ...

  6. Hibernate查询之HQL查询

    转自:http://blog.csdn.net/xiao_yi/article/details/1733342 Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(H ...

  7. 六种方式实现hibernate查询

    最近在学习Hibernate的基本内容,刚好在项目中有用到,基本上都是用到哪就学哪. 今天看看六种方式实现hibernate查询......... 分别是HQL查询,对象化查询Criteria方法,动 ...

  8. Hibernate查询、连接池、二级缓存

    Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池 ...

  9. 第八章 Hibernate数据操作技巧

    第八章   Hibernate数据操作技巧8.1 分组统计数据    语法:[select]... from ...[where] [group by...[having...]] [order by ...

随机推荐

  1. Windows上SSH服务器的配置以及客户端的连接

    1.      ssh简介以及本例的应用场景 ①       ssh的简介 SSH是一个用来替代TELNET.FTP以及R命令的工具包,主要是想解决口令在网上明文传输的问题.为了系统安全和用户自身的权 ...

  2. SqlServer 行转一列逗号隔开

    SELECT STUFF( (SELECT ',' + convert(varchar(10),PID) FROM tt WHERE a='老王' FOR xml path('') ),1,1,'' ...

  3. java把一个list分割成多个list存入map中(实例)

    这都是最近我写工具遇到的一些点, 这些点就是指我在网上没搜到答案,然后实际上我为此花费了时间的 public static void main(String[] args) { List<Str ...

  4. JS精准倒计时(支持自定义模板)

    /** * 倒计时 Create By TuJia @2017.10.17 * 使用方法: * leftTimer.run(container[,theme][,callback]); * * 支持 ...

  5. A new session could not be created. (Original error: Requested a new session but one was in progress) (WARNING: The server did not provide any stacktrace information)

    出现这个问题,是因为关毕了appium,或者是关毕了appium再次打开,那么session就不是一样的了所以报错. 一般是因为测试的时候报错了,appium自动关毕了,再次打出现的报错 解决方法:重 ...

  6. Inside The C++ Object Model(二)

    ============================================================================2-0. 关键字explicit被引入C++,提 ...

  7. Microsoft office 2019 正式版镜像下载

    http://www.xitongtiandi.net/soft_yy/4373.htmlMicrosoft office 2019 正式版镜像下载 http://www.xitongtiandi.n ...

  8. Writing custom protocol for nanomsg

    http://vitiy.info/writing-custom-protocol-for-nanomsg/ nanomsg is next version of ZeroMQ lib, provid ...

  9. 11.15luffycity(7)

    2018-11-15 17:43:50 还有一点路飞项目就结束啦! 周日打算回去! 双十一的耳机到啦,音质确实不错!2333! 等着项目做完,完整总结一下! 越努力,越幸运!永远不要高估自己!!!! ...

  10. 7款让人惊叹的HTML5粒子动画特效(转载)

    1.HTML5 Canvas粒子模拟效果 这是一款利用HTML5 Canvas模拟出来的30000个粒子动画,当你用鼠标在canvas画布上移动时,鼠标周围的一些粒子就会跟着你移动,并形成一定的图案, ...