版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010871004/article/details/81436025
criteria
通常我们在进行数据库查询的时候都会加上条件进行数据的筛选,例如where语句,在MySQL中我们还用limit进行数据的分页查询。
利用hibernate进行数据查询
查询所有的数据
通常我们通过criteria.list()方法来查询某个实体类的所有数据
public class App4 {
public static void main(String[] args) {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.getTransaction().begin();
Criteria criteria = session.createCriteria(Employee.class);
List<Employee> employees = criteria.list();
for (int i = 0; i < employees.size(); i++) {
System.out.println(employees.get(i));
}
session.getTransaction().commit();
session.close();
HibernateUtil.closeSessionFactory();
}
}
这样便可以查询出来所有的数据
Employee [id=1, firstName=Yogesh, salary=50000.0, department=Department [id=1, deptName=development]]
Employee [id=2, firstName=Aarush, salary=35000.0, department=Department [id=1, deptName=development]]
Employee [id=4, firstName=Vishal, salary=75000.0, department=Department [id=2, deptName=R&D]]
Employee [id=3, firstName=Varsha, salary=30000.0, department=Department [id=3, deptName=UI/UX]]
添加条件对数据进行筛选
要对数据进行筛选,需要使用到Restrictions类,该类提供了大量的方法,对数据进行筛选。
- gt:数据库字段大于某个值
- ge:数据库字段大于等于某个值
- lt:数据库字段小于某个值
- eq:数据库字段等于某个值
- ne:数据库字段不等于某个值
- like:like匹配
- iLike:忽略大小写like匹配
除了这些,还提供了not,between,in,or,isNull,isNotNull,isEmpty等方法。
public class App4 {
public static void main(String[] args) {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.getTransaction().begin();
Criteria criteria = session.createCriteria(Employee.class);
criteria.add(Restrictions.gt("salary", 35000d));
criteria.add(Restrictions.like("firstName", "%V%"));
List<Employee> employees = criteria.list();
for (int i = 0; i < employees.size(); i++) {
System.out.println(employees.get(i));
}
session.getTransaction().commit();
session.close();
HibernateUtil.closeSessionFactory();
}
}
执行结果
Employee [id=4, firstName=Vishal, salary=75000.0, department=Department [id=2, deptName=R&D]]
分页查询
分页查询需要用到两个方法,criteria.setFirstResult()和criteria.setMaxResults()。setFirstResult是设置从第几个开始查询,setMaxResults是设置每次查询多少条数据。
public class App4 {
public static void main(String[] args) {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.getTransaction().begin();
Criteria criteria = session.createCriteria(Employee.class);
criteria.setFirstResult(1);
criteria.setMaxResults(5);
List<Employee> employees = criteria.list();
for (int i = 0; i < employees.size(); i++) {
System.out.println(employees.get(i));
}
session.getTransaction().commit();
session.close();
HibernateUtil.closeSessionFactory();
}
}
查询结果
Employee [id=2, firstName=Aarush, salary=35000.0, department=Department [id=1, deptName=development]]
Employee [id=4, firstName=Vishal, salary=75000.0, department=Department [id=2, deptName=R&D]]
Employee [id=3, firstName=Varsha, salary=30000.0, department=Department [id=3, deptName=UI/UX]]