Hibernate 基本查询
Hibernate 聚合查询和分组查询
Hibernate 分页查询和批量查询
Hibernate 命名查询
基本查询
1、Query接口
Query是HIbernate专门用来执行HQl语句的查询接口,使用方式:
Query query = session.createQuery("hql语句");
query.setParameter(...);
List resultList=query.list();
2、HQL基本查询
官方推荐的查询语言,它具有以下功能
1、条件查询
2、支持投影查询
3、分页查询
4、连接查询
5、分组查询
6、子查询
7、内置了一些聚集函数
8、支持动态绑定参数
查询实体类的所有实例对象,方式
查询实体类的单个实例对象,方式;
String hql="from Student";
Query query = session.createQuery(hql).setMaxResults(1).uniqueResult();
3、Hibernate投影查询
即查询类的某几个属性,通过用select语句只选择类的部分属性来实现的。方式:
Query query=session.createQuery("SELECT id,name FROM Student");
List list=query.list();
String hql = "select a.stuName,a.age from Student a";
Query query = sessiohttp://write.blog.csdn.net/postedit/50803033n.createQuery(hql);
List
for(Object obfs[] :list){
for(Object obj:objs){
System.out.println(obj);
}
System.out.println("-----------");
}
实例化投影查询结果:在对应实体类中添加初始化这些属性的构造方法即可。
String hql = "select new Student (a.stuName,a.age) from Student a";
Query query = sessio.createQuery(hql);
List
for(Student stu:list){
System.out.println("stu"); }
指定别名;HQL 可以指定要查询的实体类的别名
1、用关键字AS制定别名;也可以省略AS,直接加别名
String sql="SELECT stu.id,stu.name FROM Student AS stu";
Query query = sessio.createQuery(hql);
List list =query.list();
4、where 条件查询
查询符合条件的对象
1、 .
2、比较运算符
3、模式匹配符
4、逻辑运算符
数学运算符: +, -, *, /
二元比较运算符: =, >=, <=, <>, !=, like
逻辑操作符: and, or, not
字符串连接符: ||
SQL函数,如: upper() and lower()
圆括号: ( )
in, between, is null
JDBC输入参数: ?
范围运算符
in(值1,值2):等于列表中的某一个值
not in(值1,值2):不等于列表中的某一个值
between(值1 and 值2):在值1到值2的范围内(包括值1和值2)
字符串模式匹配:like ‘字符串模式’
字符串模式中可用“%”代表任意长度的字符串, “_”代表任意单个字符
用于集合的运算符:is empty、is not empty
String hql="from Student a where a.id not between 5 and 7";
Query query = sessio.createQuery(hql);
HQL 提供了比较丰富的函数库,经常用的如:
1、字符串相关
2、数字相关
String hql="select new Student (upper(s.stuName)) from Student s";
Query query = sessio.createQuery(hql);
3、集合相关
4、日期和时间
参数绑定:where 子句中经常需要动态设置查询参数,Hibernate 提供了两种参数绑定的方式。
1、按参数名字绑定
2、按参数位置绑定
@Test
public void testHql() {
// 1. 创建query对象
// 基于位置的参数
// query对象调用setXxx方法支持方法链的编程风格
String hql = "FROM Employee e where e.salary > ? AND e.email like ? AND e.dept = ? ORDER BY e.salary";
Query query = session.createQuery(hql);
// 2. 绑定参数
Department dept = new Department();
dept.setId(2);
query.setFloat(0, 6).setString(1, "%%").setEntity(2, dept);
// 3. 执行查询
List emps = query.list();
System.out.println(emps.size());
}
String hql="from Student a where a.id=? and a.stuName=?";
Query query = sessio.createQuery(hql);
query.setinteger(0,3);
query.setString(1,"wangwu");
List
@Test
public void testHqlNamedParameter() {
// 1. 创建query对象
// 基于命名参数
String hql = "FROM Employee e where e.salary > :sal AND e.email LIKE :email";
Query query = session.createQuery(hql);
// 2. 绑定参数
query.setFloat("sal", 6).setString("email", "%%");
// 3. 执行查询
List emps = query.list();
System.out.println(emps.size());
}
String hql="from Student a where a.id=:id and a.stuName=:name";
Query query = sessio.createQuery(hql);
query.setinteger("id",3);
query.setString("name","wangwu");
Listdistinct关键字:可以去掉结果中的重复值
String hql=“SELECT distinct s.age from Student AS s”;
orser by 关键字:对结果进行排序,默认为升序
“FROM Student AS s ORDER BY s.id DESC”