Hibernate 框架的查询方法
除了通过 session.get() 方法进行查询外,Hibernate 框架还提供了其他的查询方式
Query 查询对象
query 查询对象可以通过设置查询条件进行查询,使用 HQL 语言(Hibernate Query Language),是 Hibernate 的面向对象查询语言,最终底层要转成面向数据库查询语言
//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 层
//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
SQLQuery query = session.createSQLQuery("select * from t_user");
文件逻辑优化
使用工具类
将重复代码封装进工具类中
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();
}
}