Hibernate-HQL

Categories:

HQL是面向对象的查询语言,提供了丰富灵活的查询特性,Hibernate官方推荐查询方式。HQL查询主体是:映射配置的持久化类及其属性,SQL查询主体是:数据库表。


list查询

public void getList() {
	Query query = session.createQuery("from Employee");
	List<Employee> list = query.list();
	for (Employee employee : list) {
		System.out.println(employee.getName());
	}
}

 

iterator查询

public void getIterator() {
	Query query = session.createQuery("from Employee");
	Iterator<Employee> iterate = query.iterate();
	while (iterate.hasNext()) {
		System.out.println(iterate.next().getName());
	}
}

 

绑定位置参数查询

public void testHql() {
	String hql = "from Employee where name like ? and salary > ?";
	Query query = session.createQuery(hql);
	query.setParameter(0, "%四%");
	query.setParameter(1, 5000.00);
	List<Employee> list = query.list();
	for (Employee employee : list) {
		System.out.println(employee.getName());
	}
}

 

绑定名称参数查询

public void testHql2() {
	String hql = "from Employee where name like :name and salary > :salary";
	Query query = session.createQuery(hql);
	query.setParameter("name", "%四%");
	query.setParameter("salary", 5000.00);
	List<Employee> list = query.list();
	for (Employee employee : list) {
		System.out.println(employee.getName());
	}
}

 

绑定集合查询

public void testHql3() {
	String hql = "from Employee where name like :name and salary > :salary";
	Query query = session.createQuery(hql);
	Map<String, Object> map = new HashMap<>();
	map.put("name", "%四%");
	map.put("salary", 5000.00);
	query.setProperties(map);
	List<Employee> list = query.list();
	for (Employee employee : list) {
		System.out.println(employee.getName());
	}
}

 

绑定对象查询

public void testHql4() {
	String hql = "from Employee where name like :name and salary > :salary";
	Query query = session.createQuery(hql);
	Employee employee = new Employee("%四%", 5000.00);
	query.setProperties(employee);
	List<Employee> list = query.list();
	for (Employee emp : list) {
		System.out.println(emp.getName());
	}
}

 

单条结果查询

public void testUnique() {
	String hql = "from Employee where id = 2";
	Query query = session.createQuery(hql);
	Employee employee = (Employee) query.uniqueResult();
	System.out.println(employee.getName());
}

 

关联查询

public void testRelation() {
	String hql = "from Employee where dept.name = '泡面部'";
	Query query = session.createQuery(hql);
	List<Employee> list = query.list();
	for (Employee emp : list) {
		System.out.println(emp.getName());
	}
}

 

内连接查询

public void testInner() {
	String hql = "select e from Employee e inner join e.dept where e.dept.name='泡面部'";
	Query query = session.createQuery(hql);
	List<Employee> list = query.list();
	for (Employee emp : list) {
		System.out.println(emp.getName());
	}
}

 

外链接查询

public void testLeft() {
	String hql = "select e from Employee e left join e.dept";
	Query query = session.createQuery(hql);
	List<Employee> list = query.list();
	for (Employee emp : list) {
		System.out.println(emp.getName());
	}
}

 

分页排序查询

public void testPageAndSort() {
	String sql = "from Employee order by id desc";
	Query<Employee> query = session.createQuery(sql, Employee.class);
	query.setFirstResult(1);//起始位置 
	query.setMaxResults(2);//分页查询数量
	List<Employee> list = query.list();
	for (Employee emp : list) {
		System.out.println(emp.getName());
	}
}

 

分组统计查询

public void testTeam() {
	Long count = (Long) session.createQuery("select count(id) from Employee ").uniqueResult();
	System.out.println("总记录数:" + count);
	//List<Object> objs = session.createQuery("select dept.id, avg(salary) from Employee group by dept.id").list();
	Query query = session.createQuery("select new Employee(e.dept, avg(e.salary)) from Employee e, Dept group by e.dept.id");
	List<Employee> objs = query.list();
	for (Employee obj : objs) {
		System.out.println(obj.getSalary() + "--" + obj.getDept().getId());
	}
}

 

投影查询

——封装Object

public void testObject() {
    String hql = "select name from Employee";
    Query query = session.createQuery(hql);
    List<String> nameList = query.list();
    for (String name : nameList) {
        System.out.println(name);
    }
}

 

——封装ObjEct数组

public void testObjects() {
    String hql = "select id,name from Employee";
    Query query = session.createQuery(hql);
    List<Object[]> objList = query.list();
    for (Object[] obj : objList) {
        System.out.println("id="+obj[0]+",name="+obj[1]);
    }
}

 

——封装对象

public void testConstructor() {
    String hql = "select new Employee(id,name) from Employee";
    Query query = session.createQuery(hql);
    List<Employee> empList = query.list();
    for (Employee emp : empList) {
        System.out.println("id=" + emp.getId() + ",name=" + emp.getName());
    }
}