Hibernate-HQL
Categories: Hibernate
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());
}
}