Hibernate数据检索 QB查询
来源:互联网 发布:中山慧网淘宝培训 编辑:程序博客网 时间:2024/06/02 12:50
回顾:
1、inverse=true
2、多对多关系的中间表
Hibernate数据检索
内容:
本章讲解了Hibernate中的两种查询操作的使用:Criteria、HQL,并介绍了各自的优点,最后又讲解了Hibernate对分页的支持。
产品:Eclipse 3.2
技术:Hibernate、JDBC
难度:
★★★☆☆
本章重点:
了解Criteria Query的使用
掌握Hibernate查询语言(HQL)的使用
一 、了解Criteria Query的使用
1、概述
是通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query 可以看作是传统SQL的对象化表示,如下范例所示
2、Criteria Query范例
Criteria criteria=session.createCriteria(Person.class);
criteria.add(Expression.eq(“name”,”wms”));
criteria.add(Expression.eq(“sex”,new Integer(1));
这里的criteria实例本质上是对SQL”Select * from t_user where name=’wms’ and sex=1”的封装。
Hibernate在运行期会自动根据Criteria中指定的查询条件(也就是上面代码中通过criteria.add方法添加的查询表达式)生成相应的SQL语句。
这种方式的特点是比较符合java程序员的编码习惯,并且具备清晰的可读性。
数据库脚本
create table person(
id int identity(1,1) primary key,
name varchar(20) not null,
age int,
sex varchar(2)
)
insert into person values('张三',20,'男');
insert into person values('王五',25,'男');
insert into person values('李四',30,'女');
insert into person values('小明',31,'男');
insert into person values('小花',50,'女');
select * from person
3、Criteria 查询表达式
Criteria本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。
如前面所示,Expression对象具体描述了查询条件。针对SQL语法,Expression提供了对应的查询限定机制,见下表。
Criteria 查询表达式(1)
Criteria 查询表达式(2)
Criteria 查询表达式(3)
方法 属性
Expression.in 对应SQL “field in...”表达式
Expression.or or关系组合。如:
Expression.or(Expression.eq(“name”,”张三”), Expression.eq(“name”,”李四”))
Expression.and
and关系组合。如:
Expression.and(Expression.eq(“name”,”张三”), Expression.eq(“age”,20))
注意:in操作最实用,官方推荐的
二、掌握Hibernate查询语言(HQL)的使用
1、HQL语法结构
◇[select/update/delelte...]
[from ...]
[where...]
[group by...[having...]]
[order by...]
其中update/delete为hibernate3.0引入的
2、查询操作
HQL中使用distinct
Query query=session.createQuery(“select distinct p.age from Person as p”);
HQL中使用count()
Query query=session.createQuery(“select count(*) from Person as p”);
Query query=session.createQuery(“select count(p.id) from Person as p”);
HQL中使用avg()
Query query=session.createQuery(“select avg(p.age) from Person as p”);
HQL中使用upper()
Query query=session.createQuery(“select upper(p.name) from Person as p”);
HQL中使用where子句
1)可以使用where子句来限定查询的条件,除了=运算之外,还有>、>=、<、<=、!=或<>等比较运算,例如:
Query query=session.createQuery(“from Person as p where p.name=’wms’”);
2)可以在where子句上进行表达式:
from Person p where (p.age/10=3)
3)可以在where子句上使用and、or:
from Person p where(p.age>20) and (p.name=’wms’)
4)is not null与is null则可以测试字段值是否为空值
from Person p where p.name is not null
5)between可以测试字段值是否在指定的范围之内
from Person p where p.age between 20 and 30
6)使用in或not in来测试字段值是否在指定的集合中
from Person p where p.name in(‘wms’,’accp’)
7)like与not like可以进行模糊条件搜寻:
from Person p where p.name like ‘w%’
对查询结果使用order by进行排序
from Person p order by p.age
1)使用desc反排序:
from Person p order by p.age desc
2)同时指定两个以上的排序方式,例如先按照”age”反序排列,如果
“age”相同,则按照”name”顺序排列:
from Person p order by p.age desc,p.name
配合GROUP BY子句,自动将指定的字段依相同的内容群组:
select p.sex,avg(p.age) from Person p group by p.sex
可以结合having子句,例如只将平均大于20的数据分组显示出来
"select p.sex,avg(p.age) from Person p "+
"where p.age>0 "+
"group by p.sex "+
"having avg(p.age)>35";
3、绑定参数
给定参数名
String hql="from Person as p where p.name=:name";
q.setString("name", "张三");
给定参数位置
String hql="from Person as p where p.name=?";
Query q=session.createQuery(hql);
q.setString(0, "张三");
4、更新、删除
更新:
update User set name=’wms’ where name=’accp’
注意不用使用别名
删除:
delete Person where name=’wms’
5、hibernate分页
在Hibernate的Criteria和Query接口中提供了以下两个方法,
用于完成分页功能
◇setFirstResult(100);从第几个行开始取,下标从0开始
◇setMaxResults(20); 取多少个行
Criteria
Criteria cri=session.createCriteria(Person.class);
cri.setFirstResult(0);
cri.setMaxResults(2);
List all=cri.list();
参数绑定与语句简写
Query
public List findBySpecialBoardAndPageSize(Board board, int pageSize,
int pageNo) {
String queryString = "from persistent.module.Topic as t where t.board=:board order by t.postTime desc ";
List postList = getSession().createQuery(queryString)
.setEntity("board", board)
.setFirstResult(pageSize * (pageNo - 1))
.setMaxResults(pageSize)
.list();
log.info("PostList size ="+postList.size());
return postList;
}
思考题:
Query的高级查询
关联查询:
引用查询:在xml中配置sql语句
联合查询:使用join
投影查询:只取几列
子查询:实现关联查找
- Hibernate数据检索 QB查询
- Hibernate之数据检索- -
- hibernate 数据检索
- hibernate数据检索策略
- hibernate QBC检索方式查询
- Hibernate检索策略,Hibernate查询方式
- 【Hibernate】4.hibernate查询与检索
- Hibernate的数据检索问题
- 数据检索-子查询(subselect)
- 使用子查询检索数据
- Hibernate 3.2 学习笔记 查询和检索
- Hibernate 检索查询的几种方式
- Hibernate之HQL检索(查询)方式
- Hibernate之QBC检索(查询)方式
- Hibernate之SQL检索(查询)方式
- Hibernate检索方式:离线条件查询
- Hibernate检索总结和查询方式总结
- Hibernate学习:Hibernate数据查询
- js大小写字母转换
- gentoo系统启动初始化
- linux 中openOffice 的安装
- GetMaxRecord_4_zhong_Method.sql
- 不应该不知道C++的常用库
- Hibernate数据检索 QB查询
- 网摘
- cli()/sti()移除指南
- Hibernate的数据关联多对多
- GROUP BY 子句
- 万字的最笨画法
- 10个你闻所未闻的奇趣网站
- Linux 中JDK的安装
- MySQL master-slave高可靠方案