Hibernate——其他查询方法

Hibernate 框架的查询方法

​ 除了通过 session.get() 方法进行查询外,Hibernate 框架还提供了其他的查询方式

Query 查询对象

​ query 查询对象可以通过设置查询条件进行查询,使用 HQL 语言(Hibernate Query Language),是 Hibernate 的面向对象查询语言,最终底层要转成面向数据库查询语言

1
2
3
4
5
6
7
8
9
10
11
12
//1.查询所有用户
Query query = session.createQuery("From User");

//2.查询符合条件得用户【username 和 password 是 User 对象得属性,而不是表的字段名】
Query query = session.createQuery("From User where username = ? and password = ?");
query.setParameter(0, "lmh");
query.setParameter(1, "123");

//3.分页查询
Query query = session.creatQuery("From User");
query.setMaxResults(3);
query.setFirstResult(3);

Criteria 查询对象

​ QBC(query by criteria),是 hibernate 提供纯面向对象查询得语言,提供直接使用 PO 对象进行操作

​ PO:persistent object,用于与数据库交互数据——dao 层(JavaBean + hbm)

​ BO:business object,业务数据对象——service 层

​ VO:value object 值对象——web 层

1
2
3
4
5
6
7
8
9
10
//Criteria:hibernate 独创的查询对象,全程无 hql 语言
Criteria criteria = session.createCriteria(User.class);

//等于 =
criteria.add(Restriction.eq("lmh", "123"));

//like
criteria.add(Restriction.like("lmh", "%123%"));

//..........

SQLQuery 查询对象

​ SQLQuery:使用原生的 SQL 语句查询

​ 并不是所有的 sql 都能转成 hql

1
SQLQuery query = session.createSQLQuery("select * from t_user");

文件逻辑优化

使用工具类

​ 将重复代码封装进工具类中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
private static SessionFactory sf;

static{
//1.加载配置
Configuration cfg = new Configuration().configure();

//2.创建一个sessionFactory
sf = cfg.buildSessionFactory();

//3.在虚拟机关闭时,释放SessionFactory
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
sf.close();
System.out.println("释放资源");
}
});

}

public static Session openSession(){
return sf.openSession();
}

public static Session getCurrentSession(){
return sf.getCurrentSession();
}
}
-------------本文结束感谢您的阅读-------------