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();