- 浏览: 245713 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
javatozhang:
讲解的的确不错。很实用。
Hibernate数据拦截与事件监听 -
sjx19871109:
更正一个地方:<event type="pos ...
Hibernate search -
xifan:
你好,楼主。
mutable="false 好像是 ...
Hibernate持久化对象生命周期 -
leo_cao:
很好,很实用
Hibernate数据拦截与事件监听 -
fehly:
47816778 写道你这样不会出现number 的精度问题吗 ...
Hibernate Annotations
Query接口
Query类型与org.hibernate.Criteria很接近,封装了对底层数据库表的查询请求
Query接口的常用方法
list()
iterate()
setMaxResults()
setFirstResult()
uniqueResult()
HQL查询
1.查询所有持久化对象
Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook");
List list=query.list();
tx.commit();
2.投影查询
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select title from Testbook"); List<String> list=query.list(); tx.commit(); for(String title : list){ System.out.println(title); }
3.查询持久化对象的多个属性
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select new map(id,name,email) from Testbook"); List<Map> list=query.list(); tx.commit(); for(Map map : list){ System.out.println(map.get("0")+",\t"+map.get("1")+map.get("2")); }
这里的 id,name,email 分别对应 0,1,2
4.HQL 中使用别名
Query query=session.ccreateQuery("select tb name as name from Testbook as tb"); List<String> list=query.list();
可省略as,指定持久化类的别名
Query query=session.ccreateQuery("select tb name as name from Testbook tb"); List<String> list=query.list();
5.别名与属性值组成key/value对
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select new map(tb.id,tb.name,tb.email) from Testbook"); List<Map> list=query.list(); tx.commit(); for(Map map : list){ System.out.println(map.get("id")+",\t"+map.get("name")+map.get("email")); }
6.使用distinct 查询独一无二的
Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession(); Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select distinct name from Testbook"); List<String> list=query.list(); tx.commit(); for(String name : list){ System.out.println(name); }
7.HQL中的运算符
8.where子句,限定查询的条件
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name='Narcissus'"); List<Testbook> list=query.list(); tx.commit();
9.使用between/not between(两者之间)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where id between 1 and 10"); List<Testbook> list=query.list(); tx.commit();
10.使用in/not in(在范围内)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name in ('Narcissus','Tom')"); List<Testbook> list=query.list(); tx.commit();
11.使用like/not like (模糊查询)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name like 'Na%'"); List<Testbook> list=query.list(); tx.commit();
12.使用and(几个或者多个条件需要同时满足)/or(只要满足一个条件)/not(条件求反)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name='Narcissus' and id<100"); List<Testbook> list=query.list(); tx.commit();
13. 使用is null (某个属性值是否为空)/is not null(某属性值不为空)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where email is null"); List<Testbook> list=query.list(); tx.commit();
14.一个或多个熟悉的数据排序(逗号分隔即可)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name like 'Nar%' order by name,id desc"); List<Testbook> list=query.list(); tx.commit();
15.使用"?"作为参数占位符
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where id<?"); query.setInteger(0,12);//起始值从0开始 对应不同的类型 List<Testbook> list=query.list(); tx.commit();
16.使用统计函数
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select min(price),max(price) from Testbook"); Object[] values=(Object[])query.uniqueResult(); tx.commit(); System.out.println("最低价"+"\t"+"最高价"); System.out.println(values[0]+"\t"+values[1]);
17.在分组中应用统计函数
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select avg(price),count(*) from Testbook group by category.id"); List<Object[]> list=query.list(); tx.commit(); System.out.println("平均价"+"\t"+"总数"); for(Object[] values :list){ System.out.println(values[0]+"\t"+values[1]); }
18.使用having(限定条件)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select avg(price),count(*) from Testbook group by price having price>50.0"); List<Object[]> list=query.list(); tx.commit();
19.使用函数
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select lower(name) from Testbook where id<100"); List<String> list=query.list(); tx.commit();
20.HQL 的批量更新/删除
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("update Testbook set name='Narcissus' where id=1"); int rowCount =query.executeUpdate(); tx.commit();
HQL 中的连接查询
1.使用交叉连接
Transaction tx=session.beginTransaction(); String hql="from Product p,Category c"; Query query = session.createQuery(hql); List list=query.list(); tx.commit();
使用内连接
QBC中实现内连接
Transaction tx=session.beginTransaction(); Criteria criteria = session.createCriteria(Product.class).createCriteria("category"); List<Product> list=query.list(); tx.commit();
使用左外连接
使用右外连接
迫切内,左,右(加fetch关键字)连接
Transaction tx=session.beginTransaction(); String hql="select c from Category c join fetch c.products"; Query query = session.createQuery(hql); List<Category> list=query.list(); tx.commit();
发表评论
-
Hibernate与Struts2,Spring
2010-04-25 19:23 1516Struts2 框架 Struts是Apache ... -
Hibernate search
2010-04-22 15:28 6171搜索引擎 全文搜索引 ... -
Hibernate Annotations
2010-04-21 14:54 6970在过去几年里,Hibernate不断发展,几乎成为Jav ... -
Hibernate性能优化
2010-04-20 16:25 1362使用dynamic-insert与dynamic-update ... -
Hibernate的缓存
2010-04-19 19:47 1993持久层缓存的级别 事务级别的缓存 应用(进程)级别的缓存 ... -
Hibernate数据拦截与事件监听
2010-04-17 19:33 6467拦截器(Interceptor)org.hibernate.I ... -
Hibernate过滤器
2010-04-16 17:31 1457Hibernate过滤器的概念 Hibernate过滤器类 ... -
Hibernate继承映射
2010-04-15 19:48 988继承映射 3种方式,继承关系映射到数据库的表中 1.继承关 ... -
Hibernate的事务管理
2010-04-14 20:00 1283数据库事务数据库的事务指的是把一系列的数据库操作组成一个单元, ... -
Native SQL查询
2010-04-13 23:15 1185HQL写的有点累有些东西 ... -
Criteria查询
2010-04-12 18:42 12333Hibernate的三种查询方式 1.HQL (Hibern ... -
映射多对多关联关系
2010-04-10 15:19 1326多对多单向关联 使用多对多关联,需要借助一个起中介作用的连接 ... -
映射一对一关联关系
2010-04-09 21:08 943共享主键关系 两个关联表使用相同的主键值 类: ... -
Hibernate映射多对一关联关系
2010-04-08 15:03 1420多对一的单向关联 表于表的关联可以分为一对一,一对多,多对一 ... -
Hibernate组件映射
2010-04-07 16:03 5192组件Components 除了粗粒度的对象模型设计(一个表 ... -
Hibernate的集合映射
2010-04-06 15:31 1210Set 接口 set类型的对象,被加入的对象不能重复, ... -
浅谈OSIV与泛型DAO模式
2010-04-05 22:13 3565open session in view 简称 O ... -
java.lang.NoClassDefFoundError: org/hibernate/Session的异常
2010-03-22 15:15 7058今天写程序突然报这个错误,挺郁闷的,因为这个包是导入别人的(事 ... -
Hibernate持久化对象生命周期
2010-03-19 14:41 2302持久化对象生命周期 Persisten ... -
Hibernate标示符属性的生成策略
2010-03-18 16:53 1477标示符属性 Hibernate中的标示符属性,也可以称为Hi ...
相关推荐
Hibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询....
HQL查询及语法,java web开发必备。
SSH笔记-HQL查询(基于位置参数查询、基于命名参数查询、分页查询、命名查询、投影查询报表查询、内/迫切内/左外/迫切左外连接查询)、QBC(QBC检索查询、统计查询、排序查询、HQL操作数据库)、本地SQL查询
Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询...
HQL查询
HQL查询语言基础.
HQL查询语言基础,HQL查询语言基础,HQL查询语言基础
HQL查询 帮助文档
Spring中常用的hql查询方法_(getHibernateTemplate())
HQL快速入门的好资料,先看看此资料,在有手册就差不多了。
Hibernate hql查询语法总结 Hibernate hql查询语法总结
HibernateUtil分装完整版HQL查询HibernateUtil分装完整版HQL查询
hql查询多个实体类,类之间有外键关系,但是没有外键关联
HQL查询是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式.这是本人对HQL知识点做的一个总结性的练习
HQL 查询语言基础 一
HQL 查询语言基础 二
Hibernate注解方式、HQL查询
HQL查询语言基础知识 + 插入,查询,更新, 代码集. HQL查询语言基础知识 + 插入,查询,更新, 代码集
HQL查询语言基础 标准写法
超级详细的hql查询语句教程,从浅入深 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态...