- 注:这是笔者在学习时的小小记录,只是为了对自己的知识查缺补漏,有可能有些地方写错,仅供参考
HQL语句
在Hibernate中,虽然简单的主键查询语句我们可以直接使用API让Hibernate帮我们生成,但是复杂的查询语句就需要我们自己手写,Hibernate就提供了一种HQL语句给我们使用,HQL是Hibernate Query Language的缩写,HQL是一种比较接近SQL的语句,只不过我们查询的对象不再是数据库的表,而是持久化类。
- 全查语句
/**
* 全查操作
*/
@Test
public void test1() {
//通过自定义工具类获取session,详情见笔记一
Session session = HibernateUtil.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 创建查询语句
* 全查意思是将表中所有数据都查出来
* 使用的HQL语句是“from 类名”,这里的User是持久化类的类名,注意不是表名
* 不能使用select *
*/
Query query = session.createQuery("from User");
/**
* 获取所有数据,返回的是list集合,集合放的是持久化类的对象
*/
List<User> list = query.list();
/**
* 遍历打印每一条数据
*/
for (User user : list) {
System.out.println(user);
}
//提交事务
transaction.commit();
//关闭资源
session.close();
}
- 单列查询
/**
* 单列查找操作
*/
@Test
public void test2() {
//通过自定义工具类获取session,详情见笔记一
Session session = HibernateUtil.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 创建查询语句
* 单列查找意思是将表中某一列的所有数据都查出来
* 使用的HQL语句是“select 类属性名 from 类名”,
* 这里的User是持久化类的类名,注意不是表名,uname是类中的属性名
*/
Query query = session.createQuery("select uname from User");
/**
* 获取所有数据,返回的是list集合,集合放的是Object对象
*/
List<Object> list = query.list();
/**
* 遍历打印每一条数据
*/
for (Object object : list) {
System.out.println(object);
}
//提交事务
transaction.commit();
//关闭资源
session.close();
}
- 多列查询
/**
* 多列查找操作
*/
@Test
public void test3() {
//通过自定义工具类获取session,详情见笔记一
Session session = HibernateUtil.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 创建查询语句
* 多列查找意思是将表中多列的所有数据都查出来
* 使用的HQL语句是“select 类属性名,类属性名 from 类名”,
* 这里的User是持久化类的类名,注意不是表名,uid,uname是类中的属性名
*/
Query query = session.createQuery("select uid,uname from User");
/**
* 获取所有数据,返回的是list集合,集合放的是Object数组对象
*/
List<Object[]> list = query.list();
/**
* 遍历打印每一条数据
*/
for (Object[] object : list) {
System.out.println(Arrays.toString(object));
}
//提交事务
transaction.commit();
//关闭资源
session.close();
}
- 条件查询
/**
* 条件查找操作
*/
@Test
public void test4() {
//通过自定义工具类获取session,详情见笔记一
Session session = HibernateUtil.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 创建查询语句
* 条件查找意思是将表中符合条件的所有数据都查出来
* 使用的HQL语句是“from 类名 where + 条件”,这里可以使用?占位符
* 这里的User是持久化类的类名,注意不是表名,条件的使用与SQL语句类似
*/
Query query = session.createQuery("from User where uname like ?");
//设置占位符的值,从0开始
query.setParameter(0, "小%");
/**
* 获取所有数据,返回的是list集合,集合放的是user对象
*/
List<User> list = query.list();
/**
* 遍历打印每一条数据
*/
for (User user : list) {
System.out.println(user);
}
//提交事务
transaction.commit();
//关闭资源
session.close();
}
- 分页查询
/**
* 分页查找操作
*/
@Test
public void test5() {
//通过自定义工具类获取session,详情见笔记一
Session session = HibernateUtil.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 创建查询语句
* 不使用limit,因为有可能使用数据库不是mysql,可能是其他数据库,limit就不起作用
*/
Query query = session.createQuery("from User");
//设置从第几条数据开始查
query.setFirstResult(1);
//设置每次查询几条数据
query.setMaxResults(2);
/**
* 获取所有数据,返回的是list集合,集合放的是user对象
*/
List<User> list = query.list();
/**
* 遍历打印每一条数据
*/
for (User user : list) {
System.out.println(user);
}
//提交事务
transaction.commit();
//关闭资源
session.close();
}
- 投影查询
/**
* 投影查找操作
*/
@Test
public void test6() {
//通过自定义工具类获取session,详情见笔记一
Session session = HibernateUtil.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 创建查询语句
* 投影查找意思是将表中一列或多列的所有数据都查出来之后封装成持久化对象返回
* HQL语句:select new 类名(一个或多个类属性名) from User
* 注意根据要封装的哪几列属性,在持久化类中要有相应的构造方法,空构造也要保留
*/
Query query = session.createQuery("select new User(uid,uname) from User");
/**
* 获取所有数据,返回的是list集合,集合放的是user对象
*/
List<User> list = query.list();
/**
* 遍历打印每一条数据
*/
for (User user : list) {
System.out.println(user);
}
//提交事务
transaction.commit();
//关闭资源
session.close();
}
- 聚合查询
/**
* 聚合函数操作
*/
@Test
public void test7() {
//通过自定义工具类获取session,详情见笔记一
Session session = HibernateUtil.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 创建查询语句
* 使用的HQL语句是“select 聚合函数 from 类名”,这里的User是持久化类的类名,注意不是表名
* 不能使用select *
*/
Query query = session.createQuery("select count(*) from User");
/**
* 注意聚合函数返回的一般是一个数值,这里使用uniqueResult,返回Object
*/
Object object = query.uniqueResult();
/**
* 遍历打印每一条数据
*/
System.out.println(object);
//提交事务
transaction.commit();
//关闭资源
session.close();
}
- 排序查询
/**
* 排序查询操作
*/
@Test
public void test8() {
//通过自定义工具类获取session,详情见笔记一
Session session = HibernateUtil.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 创建查询语句
* 使用的HQL语句是“from 类名 order by 属性名 desc/asc”,这里的User是持久化类的类名,注意不是表名
* 不能使用select *
*/
Query query = session.createQuery("from User order by uid asc");
/**
* 获取所有数据,返回的是list集合,集合放的是user对象
*/
List<User> list = query.list();
/**
* 遍历打印每一条数据
*/
for (User user : list) {
System.out.println(user);
}
//提交事务
transaction.commit();
//关闭资源
session.close();
}