【知识整理】Hibernate-QBC查询

QBC查询:QBC查询就是使用hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口。 

一.QBC查询步骤:

  Employee、Department持久化类代码如下:(Employee与Department为双向多对一关联关系)

package com.lyn.hibernate.qbc;

public class Employee {
	private Integer id;
	private String name;
	private float salary;
	private String email;
	private Department department;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getSalary() {
		return salary;
	}
	public void setSalary(float salary) {
		this.salary = salary;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Department getDepartment() {
		return department;
	}
	public void setDepartment(Department department) {
		this.department = department;
	}
	@Override
	public String toString() {
		return "Employee [id=" + id + ", name=" + name + "]";
	}
}
package com.lyn.hibernate.qbc;

import java.util.HashSet;
import java.util.Set;

public class Department {
	private Integer id;
	private String name;
	private Set<Employee> employee = new HashSet<Employee>();
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Set<Employee> getEmployee() {
		return employee;
	}
	public void setEmployee(Set<Employee> employee) {
		this.employee = employee;
	}
	@Override
	public String toString() {
		return "Department [id=" + id + ", name=" + name + ", employee=" + employee + "]";
	}
}

 1.创建一个Criteria对象

 Criteria criteria = session.createCriteria(Employee.class);
 2.添加查询条件,在QBC中查询条件使用Criteria来表示

//Criteria可以通过Restrictions的静态方法得到
criteria.add(Restrictions.eq("email", "d.163.com")); //查询出EMPLOYEE表中email为d.163.com且salary大于8000的记录
criteria.add(Restrictions.gt("salary", 8000f));
 3.执行查询
Employee emp = (Employee) criteria.uniqueResult();
System.out.println(emp);

二.and条件查询

Criteria criteria = session.createCriteria(Employee.class);
Conjunction conjunction = Restrictions.conjunction(); //逻辑与
conjunction.add(Restrictions.like("name", "e", MatchMode.ANYWHERE));
Department department = new Department();
department.setId(6);
conjunction.add(Restrictions.eq("department", department));  //查询EMOLOYEE表中name字段中含"e"字母且department字段为id=6的Department对象
criteria.add(conjunction);
List<Employee> list = criteria.list();
System.out.println(list);
三.or条件查询

Criteria criteria = session.createCriteria(Department.class);
Disjunction disjunction = Restrictions.disjunction(); //逻辑或
disjunction.add(Restrictions.like("name", "术", MatchMode.ANYWHERE));
disjunction.add(Restrictions.idEq(2));   //查询DEPARTMENT表中name字段含"术"字或id为2的记录
criteria.add(disjunction);
List<Department> dept = criteria.list();
System.out.println(dept);
四.统计查询(使用Projection表示,可以由Projections的静态方法得到)

Criteria criteria = session.createCriteria(Employee.class);
criteria.setProjection(Projections.min("salary")); //查询EMPLOYEE表中salary最低的记录
System.out.println(criteria.uniqueResult());
五.排序查询
Criteria criteria = session.createCriteria(Employee.class);
criteria.addOrder(Order.asc("salary"));  //按salary升序
criteria.addOrder(Order.desc("email"));  //按email降序
//添加分页
criteria.setFirstResult(2).setMaxResults(9); //从第3条记录开始共查询9条记录
List<Employee> list = criteria.list();
System.out.println(list);



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值