Hibernate_day04--HQL查询

时间:2023-03-09 22:31:53
Hibernate_day04--HQL查询

HQL查询

1 hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通sql很相似,区别:普通sql操作数据库表和字段,hql操作实体类和属性

2 常用的hql语句

(1)查询所有: from 实体类名称

(2)条件查询: from 实体类名称 where 属性名称=?

(3)排序查询: from 实体类名称 order by 实体类属性名称 asc/desc

3 使用hql查询操作时候,使用Query对象

(1)创建Query对象,写hql语句

(2)调用query对象里面的方法得到结果

查询所有

1 查询所有客户记录

(1)创建Query对象,写hql语句

(2)调用query对象里面的方法得到结果

2 查询所有: from 实体类名称

Hibernate_day04--HQL查询

具体:

//演示查询所有
@Test
public void testSelect1() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1 创建query对象
Query query = session.createQuery("from Customer");
//2 调用方法得到结果
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer.getCid()+"::"+customer.getCustName());
}
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally {
session.close();
sessionFactory.close();
}
}

条件查询

1 hql条件查询语句写法:

(1)  from  实体类名称 where 实体类属性名称=? and实体类属性名称=?

from  实体类名称 where 实体类属性名称 like ?

2 代码

            //1 创建query对象
//SELECT * FROM t_customer WHERE cid=? AND custName=?
Query query = session.createQuery("from Customer c where c.cid=? and c.custName=?");
/**
*2 设置条件值
* 向?里面设置值
* setParameter方法两个参数
* 第一个参数:int类型是?位置,?位置从零开始
* 第二个参数:具体参数值
*/
//设置第一个?值
query.setParameter(0, 1);
//设置第二个?值
query.setParameter(1, "小李");
//3 调用方法得到结果
List<Customer> list= query.list();
for(Customer customer : list) {
System.out.println(customer.getCid() + ":" + customer.getCustName());
}

Hibernate_day04--HQL查询

模糊查询

            //1 创建query对象
//SELECT * FROM Customer c c.custName LIKE '%新浪%'
Query query = session.createQuery("from Customer c where c.custName like ?");
//2 设置?的值
// %浪%
query.setParameter(0, "%浪%");
//3 调用方法得到结果
List<Customer> list= query.list();
for (Customer customer : list) {
System.out.println(customer.getCid() + ":"+ customer.getCustName());
}

排序查询

1 hql排序语句写法

(1)from 实体类名称 order by 实体类属性名称 asc/desc

        //1 创建query对象
//SELECT * FROM t_customer ORDER BY cid ASC
Query query = session.createQuery("from Customer c order by cid asc");
//2 调用方法得到结果
List<Customer> list= query.list();
for (Customer customer : list) {
System.out.println(customer.getCid() + ":"+ customer.getCustName());
}

分页查询

1 mysql实现分页

(1)使用关键字 limit实现

Hibernate_day04--HQL查询

0表示从0开始,3表示每页显示3条记录

2 在hql中实现分页

(1)在hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现分页操作

        //1 创建query对象
//写查询所有的语句
Query query = session.createQuery("from Customer");
//2 设置分页数据
//2.1设置开始位置
query.setFirstResult(0);
//2.2设置每页记录数
query.setMaxResults(3);
//3 调用方法得到结果
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer.getCid() + ":"+ customer.getCustName());
}

投影查询

1 投影查询:查询不是所有字段值,而是部分字段的值

2 投影查询hql语句写法:

(1)select 实体类属性名称1, 实体类属性名称2  from 实体类名称

(2)select 后面不能写 * ,不支持的

3 具体实现

        //1 创建query对象
Query query = session.createQuery("select custName from Customer");
//2 调用方法得到结果
List<Object> list = query.list();
for (Object object : list) {
System.out.println(object);
}

聚集函数使用

1 常用的聚集函数

(1)count、sum、avg、max、min

2 hql聚集函数语句写法

(1)查询表记录数

- select count(*) from 实体类名称

        //1 创建query对象
Query query = session.createQuery("select count(*) from Customer");
//2 调用方法得到结果
//query对象里面有方法,直接返回对象形式
Object obj = query.uniqueResult();
//返回int类型
// int count = (int) obj;
//首先把object变成long类型,再变成int类型
Long lobj = (Long) obj;
int count = lobj.intValue();
System.out.println(count);

Hibernate_day04--HQL查询