HQL是Hibernate提供的一种面向对象的查询语言;
具体就是HQL是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。 HQL 查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作。
HQL的优点和SQL的区别:
面向对象,与数据库无关
语法与SQL类是,比较容易学习
HQL的用法:
获得HibernateSession对象
编写HQL语句
调用Session的createQuery方法创建Query对象执行HQL语句
如果HQL语句包含参数,则调用Query的setXxx方法为参数赋值
调用Query对象的list等方法返回查询结果。
HQL的一些常用示例
1.无参查询所有
String hql="select t from UserEntity t";
//获得query对象,并执行hql语句
Query query = session.createQuery(hql);
//得到查询结果
List<UserEntity> list = query.list();
2,有参查询
String hql="from UserEntity where userName = ?";
List<UserEntity > list =
session.createQuery(hql)
.setParameter(0,"小白")//设置参数替换占位符
.list();
3,有参查询部分列1
String hql="select userName,pwd from UserEntity ";
//查询结果,每一个Object数组代表一行
List<Object[]> list =
session.createQuery(hql).list();
4,有参查询部分列2
String hql="select new map(userName,pwd) from TeacherEntity";
//查询结果,每个map集合代表结果的一行
List<Map> list=
session.createQuery(hql).list();
5,模糊查询
String hql="select new map(userName,pwd) " +
"from UserEntity where userName like ?";
List<Map> list = session.createQuery(hql)
//传参时,需要加上通配符
.setParameter(0,"小%")
.list();
6,连表查询
String hql="select new map(s.studentName,t.teacherName,t.teacherClass) " +
"from StudentEntity s " +
" left join s.teacher t where t.teacherName=?";
List<Map> list=
session.createQuery(hql)
.setParameter(0,"陈老师")
.list();
8,分页查询
String hql="from UserEntity where teacherName like ?";
List<TeacherEntity> list=
session.createQuery(hql)
.setParameter(0,"小%")
.setFirstResult(0) //起始下标
.setMaxResults(5) //每页显示的行数
.list();
9,查询单个对象
String hql="from UserEntity where userName like ?";
TeacherEntity t=
(TeacherEntity) session.createQuery(hql)
.setParameter(0,"小%")
//返回查询的第一条结果
.uniqueResult();
10,删除
String hql="delete from UserEntity where id = ?";
int i = session.createQuery(hql)
.setParameter(0,3)
.executeUpdate(); //执行修改、删除返回受影响的行数
11,修改
String hql="update UserEntityset userName=? where id = ?";
int i= session.createQuery(hql)
.setParameter(0,"小青")
.setParameter(1,5)
//执行,并返回受影响行数
.executeUpdate();