HQL

Hibernate语言查询(Hibernate Query LanguageHQL)
它是完全面向对象的查询语句,查询功能非常强大,具备多态、关联等特性 。
Hibernate官方推荐使用HQL进行查询

一般情况下HQL通过创建query对象(有参),当执行list,iterator时发sql语句

HQL独立于任何一个数据库,hibernate根据方言把HQL生成对应数据库相应的sql语句

如何使用

简单例子:查询用户名以“a”开头的所有用户。
例:hibernate_session的test1Query()方法
Query query = session.createQuery(
"from User user where user.name like ‘a%'");
List users = query.list();

复杂例子:从User和Group中查找属于“zte”组的所有用户。
例:hibernate_many2one的testQuery()方法
Query query = session.createQuery(
“from User user where user.group.name=‘zte’”);

  如果用传统的SQL则查询语句如下:
 select user.userId as userId, user.name as name, user.groupId as groupId, user.idCardId as idCardId  from TBL_USER user, TBL_GROUP group where (group.groupName=‘zte'  and user.groupId=group.Id)

Native SQL Queries(原生SQL查询):直接使用sql语句访问数据库,但是依赖数据库
标准SQL语言或跟特定数据库相关的SQL进行查询。

1、简单属性查询【重要】

参见:SimplePropertyQueryTest.java

(1)单一属性查询:返回结果集属性列表,元素类型和实体类中相应的属性类型一致
List students = session.createQuery("select name from Student").list();

(2)多个属性查询:返回的集合元素是对象数组(object数组对象),数组元素的类型和对应的属性在实体类中的类型一致
数组的长度取决与select中属性的个数
List students = session.createQuery("select id, name from Student").list();

如果认为返回数组不够对象化,可以采用hql动态实例化Student对象
List students = session.createQuery("select new Student(id, name) from Student").list();
前提:应在Student类中提供相应的构造方法

(3)条件查询

可以采用拼字符串的方式传递参数
查询名字中包含字符‘1’的对象
List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'").list();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容