一:实体对象查询
from Book 或者 指定一个别名 from Book book
测试用例:查询Book对象的所有信息
private static void HibernateHqlQuery() {
Session session = HibernateUtil.getSession();
Query query = session.createQuery("from Book");
List<Book> stus = query.list();
for (Book book : stus) {
System.out.println(book.getName());
}
}
控制台打印结果:
查看下数据库表的数据是否一致
二:条件查询
private static void HibernateHqlQuery() {
Session session = HibernateUtil.getSession();
Query query = session.createQuery("from Book book where book.id=1001");
List<Book> stus = query.list();
for (Book book : stus) {
System.out.println(book.getName());
}
}
三:HQL参数绑定
1:利用顺序占位符?代替具体参数(不提倡)
private static void HibernateHqlQuery() {
Session session = HibernateUtil.getSession();
Query query = session.createQuery("from Book book where book.name=?");
query.setParameter(0, "英语");
List<Book> stus = query.list();
for (Book book : stus) {
System.out.println(book.getName());
System.out.println(book.getId());
}
}
2:引用占位符 :parameter,也就是 : 与自定义参数名的组合
private static void HibernateHqlQuery() {
Session session = HibernateUtil.getSession();
Query query = session.createQuery("from Book book where book.name=:name");
query.setParameter("name", "英语");
List<Book> stus = query.list();
for (Book book : stus) {
System.out.println(book.getName());
System.out.println(book.getId());
}
}
四:HQL排序查询
asc正序,desc降序
Query query = session.createQuery("from Book book order by book.id asc");
五:分组方法
Query query = session.createQuery("select stu.sex, count(*) from Student stu group by stu.sex");
List list = query.list();
Iterator it = list.iterator();
while (it.hasNext()) {
Object[] object = (Object[]) it.next();
System.out.println("性别:" + object[0]);
System.out.println("人数:" + object[1]);
}
六:联合查询
公民表与身份证一对一映射关系,HQL左连接查询获取关联信息,前几篇博客介绍了映射关系,这里直接查看已经建立好的映射关系数据表的信息,如图
HQL左连接查询方式:
Query query = session.createQuery("select peo.id, peo.name, peo.sex, peo.age, c.idcard_code from People peo left join peo.idcard c");
List list = query.list();
Iterator it = list.iterator();
while (it.hasNext()) {
Object[] object = (Object[]) it.next();
System.out.println(object[0]);
System.out.println(object[1]);
System.out.println(object[2]);
System.out.println(object[3]);
System.out.println(object[4]);
}
HibernateUtil.closeSession();
控制台结果打印:
七:子查询
子查询必须被()圆括号包围起来
例如:利用子查询获取
Query query = session.createQuery("from Student stu where stu.id = (select min(id) from Student)");
List<Student> stus = query.list();
for (Student book : stus) {
System.out.println(book.getName());
System.out.println(book.getId());
System.out.println(book.getSex());
System.out.println(book.getAge());
System.out.println(book.getSno());
System.out.println(book.getSchool());
}
数据库数据
控制台打印结果: