在hql中关键字不区分大小写,但是属性和类名区分大不写
简单属性查询[重要]
1 单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致
List students
=
session.createQuery(
"
select name from Student
"
).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(Iterator iter
=
students.iterator();iter.hasNext();)
{
String name=(String)iter.next();
System.out.println(name);
}
2 多个属性查询,返回的集合元素是对象数组
数组元素的类型和对应的属性在实体类中的类型一致
数组的长度取决于select中属性的个数
List students
=
session.createQuery(
"
select id, name from Student
"
).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(Iterator iter
=
students.iterator();iter.hasNext();)
{
Object[] obj=(Object[])iter.next();
System.out.println(obj[0]+":"+obj[1]);
}
3 对象化查询,可以采用hql动态实例化Student对象,此时list中为Student对象集合
注意,必须有在实体类中有相应的构造方法
List students
=
session.createQuery(
"
select new Student(id, name) from Student
"
).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(Iterator iter
=
students.iterator();iter.hasNext();)
{
Student stu=(Student)iter.next();
System.out.println(stu.getId()+":"+stu.getName());
}
4 别名查询,可以使用as命名别名
List students
=
session.createQuery(
"
select s.id, s.name from Student as s
"
).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(Iterator iter
=
students.iterator();iter.hasNext();)
{
Object[] obj=(Object[])iter.next();
System.out.println(obj[0]+":"+obj[1]);
}
5 实体属性
setEntity();
实体对象查询[重要]
1 忽略select,返回Student对象的集合,可以忽略select
List students
=
session.createQuery(
"
from Student
"
).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(Iterator iter
=
students.iterator();iter.hasNext();)
{
Student stu=(Student)iter.next();
System.out.println(stu.getName()+":"+stu.getCreateTime());
}
2 使用别名,返回Student对象的集合,可以使用别名,两种方式都支持:空格或as
List students
=
session.createQuery(
"
from Student s
"
).list();
List students
=
session.createQuery(
"
from Student as s
"
).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(
.)
{
.}
3 使用select,返回Student对象的集合,使用select用,必须使用别名
List students
=
session.createQuery(
"
select s from Student as s
"
).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(
.)
{
.}
4 不支持select * from...这样的查询
[X]List students
=
session.createQuery(
"
select * from Student s
"
).list();
//
错误的[X]
5 使用query.iterate查询
在默认情况下,使用query.iterate查询,有可能出现N+1问题
所谓N+1是在查询的时候发出N+1条sql语句
* 1:先发出查询id的sql
* N:再依次发出根据id查询Student对象的sql
Iterator iter
=
session.createQuery(
"
from Student
"
).iterate();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
while
(iter.hasNext())
{
Student stu=(Student)iter.next();
System.out.println(stu.getName()+":"+stu.getCreateTime());
}
6 使用query.list查询,返回Student对象的集合
在默认情况下list每次都会向数据库发出查询对象的sql,除非配置查询缓存,
但list默认情况下不会利用缓存,而是每次发出sql
在默认情况下,list会向缓存中放入数据,但不会利用数据
List students
=
session.createQuery(
"
from Student
"
).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(
.)
{
.}
7 list和iterate的区别
* list:在默认情况下每次都会向数据库发出sql,list会向缓存中放入数据,但不会利用缓存中的数据
* iterate:在默认情况下会利用缓存中的数据,但缓存中不存在数据,有可能出现N+1问题
条件查询[重要]
* 方法链编程
Query query
=
session.createQuery(
"
select id,name from Student where name like ?
"
);
query.setParameter(
0
,
"
%1%
"
);
List students
=
query.list();
//
等效于:
List students
=
session.createQuery(
"
select id,name from Student where name like ?
"
)
.setParameter(
0
,
"
%1%
"
)
.list();
1 拼字符串
可以采用拼字符串的方式组织查询条件
List students
=
session.createQuery(
"
select id,name from Student where name like '%1%'
"
).list();
2 ?传递参数
可以采用?占位符来传递参数,参数的索引从0开始,传递的参数值不用单引号引起来
List students
=
session.createQuery(
"
select id,name from Student where name like ?
"
)
.setParameter(
0
,
"
%1%
"
)
.list();
3 “:参数名” 传递参数
可以采用“:参数名称”的方式传递参数,效果等同于?占位符方式
List students
=
session.createQuery(
"
select id,name from Student where name like :myname
"
)
.setParameter(
"
myname
"
,
"
%1%
"
)
.list();
4 支持in,采用(:参数名)传递参数数组
支持in,使用“(:参数名称)”的方式传递数组,用setParameterList()设置数组参数
List students
=
session.createQuery(
"
select id,name from Student where id in (:myids)
"
)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
.setParameterList(
"
myids
"
,
new
Object[]
{1,2,3,4,5,6}
)
.list();
5 支持and和between
List students
=
session.createQuery(
"
select id,name from Student where name like :myname and id=:myid
"
)
.setParameter(
"
myname
"
,
"
%1%
"
)
.setParameter(
"
myid
"
,
12
)
.list();
SimpleDateFormat sdf
=
new
SimpleDateFormat(
"
yyyy-MM-dd HH:mm:ss
"
);
List students
=
session.createQuery(
"
select id,name from Student where createTime between ? and ?
"
)
.setParameter(
0
, sdf.parse(
"
2008-01-10 00:00:00
"
))
.setParameter(
1
, sdf.parse(
"
2008-02-15 00:00:00
"
))
.list();
6 在hql中可以使用数据库中的函数
不建议使用
List students
=
session.createQuery(
"
select id,name from Student where date_format(createTime,'%Y-%m')=?
"
)
.setParameter(
0
,
"
2008-02
"
)
.list();
原生sql查询
List students
=
session.createSQLQuery(
"
select * from t_student).list();
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
for
(Iterator iter
=
students.iterator();iter.hasNext();)
{
Object[] obj=(Object[])iter.next();
System.out.println(obj[0]+":"+obj[1]);
}
外置命名查询
* 在映射文件中采用<query>标签来定义hql,可以在任何一个映射文件中,name属性名能重复
<
query
name
="searchStudents"
>
<![CDATA[
select s from Student s where s.id<?
]]>
</
query
>
* 在程序中采用session.getNameQuery()方法得到hql查询串
List students
=
session.getNamedQuery(
"
searchStudents
"
)
.setParameter(
0
,
10
)
.list();
查询过滤器
* 在映射文件中定义过滤器参数
<
filter-def
name
="filtertest"
>
<
filter-param
name
="myid"
type
="integer"
/>
</
filter-def
>
* 在类的映射中使用这些参数
<
class
name
="com.my.hibernate.Student"
>
<
filter
name
="filtertest"
condition
="id < :myid"
/>
</
class
>
* 在程序中起用过滤器,传入参数
session.enableFilter(
"
filtertest
"
).setParameter(
"
myid
"
,
10
);
List students
=
session.createQuery(
"
from Student
"
).list();
分页查询[重要]
List students
=
session.createQuery(
"
from Student
"
)
.setFirstResult(
0
)
.setMaxResults(
3
)
.list();
//
setFirstResult()从0开始
//
setMaxResults()每页显示多少条数据
对象导航查询,在hql中采用“.”进行导航[重要]
List students
=
session.createQuery(
"
select s.name from Student s where s.classes.name like '%1%'
"
).list();
连接查询[重要]
* 内连接
List students
=
session.createQuery(
"
select c.name,s.name from Student s join s.classes c
"
)
.list();
//
inner可以省略
List students
=
session.createQuery(
"
select c.name,s.name from Student s inner join s.classes c
"
)
.list();
* 外连接(左连接/右连接)
//
左:
List students
=
session.createQuery(
"
select c.name,s.name from Classes c left join c.students s
"
).list();
//
右:
List students
=
session.createQuery(
"
select c.name,s.name from Classes c right join c.students s
"
).list();
统计查询[重要]
List stu
=
(List)session.createQuery(
"
select count(*) from Student
"
).list();
//
uniqueResult()查询单一值,返回Long类型
Long count
=
(Long)session.createQuery(
"
select count(*) from Student
"
).uniqueResult();
//
分组查询问
List students
=
(List)session.createQuery(
"
select c.name,count(s) from Student s join s.classes c group by c.name order by c.name
"
).list();
session.createQuery(
"
update Student s set s.name=? where s.id<?
"
)
.setParameter(
0
,
"
田田田
"
)
.setParameter(
1
,
5
)
.executeUpdate();
简单属性查询[重要]
1 单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
数组元素的类型和对应的属性在实体类中的类型一致
数组的长度取决于select中属性的个数
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
注意,必须有在实体类中有相应的构造方法
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
setEntity();
实体对象查询[重要]
1 忽略select,返回Student对象的集合,可以忽略select
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
在默认情况下,使用query.iterate查询,有可能出现N+1问题
所谓N+1是在查询的时候发出N+1条sql语句
* 1:先发出查询id的sql
* N:再依次发出根据id查询Student对象的sql
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
在默认情况下list每次都会向数据库发出查询对象的sql,除非配置查询缓存,
但list默认情况下不会利用缓存,而是每次发出sql
在默认情况下,list会向缓存中放入数据,但不会利用数据
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
* list:在默认情况下每次都会向数据库发出sql,list会向缓存中放入数据,但不会利用缓存中的数据
* iterate:在默认情况下会利用缓存中的数据,但缓存中不存在数据,有可能出现N+1问题
条件查询[重要]
* 方法链编程
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
可以采用拼字符串的方式组织查询条件
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
可以采用?占位符来传递参数,参数的索引从0开始,传递的参数值不用单引号引起来
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
可以采用“:参数名称”的方式传递参数,效果等同于?占位符方式
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
支持in,使用“(:参数名称)”的方式传递数组,用setParameterList()设置数组参数
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
不建议使用
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
原生sql查询
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ca75c07623e1b494fee67e8f316fc310.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
外置命名查询
* 在映射文件中采用<query>标签来定义hql,可以在任何一个映射文件中,name属性名能重复
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
查询过滤器
* 在映射文件中定义过滤器参数
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
分页查询[重要]
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
对象导航查询,在hql中采用“.”进行导航[重要]
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
连接查询[重要]
* 内连接
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
统计查询[重要]
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
DML风格的查询
批量修改、删除、插入,可能会出现脏数据,尽量少用,和缓存不同步
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
其他
is null, and, or, not, in, between
Restrictions.like("bookname","a",MatchMode.START);
关键字不区分大小写,类名区分大小写,类名不能用关键字,类名可以用全名
select s from Student s where s.name like '%李%'
select s from Student s where s.name like ?
query.setString(0,"%李%").list();
query.setEntity(classes);//对象实体参数
注意jdbc中perstmt参数从1开始
from Student s where s.id between :dd and :dr
query.setInt(dd,1);
query.setInt(dr,2);
select j from Tjd j,Tfw f where f.jd=j and fw.lxr='王先生'
select s from Strudent s,Classes c where s.classes=c //联表查询
分页
query.setFirstResult(0);//默认从0开始
query.setMaxResult(int size);