Hibernate的检索方式主要有5种,分别为导航对象图检索方式、OID检索方式、HQL检索方式、QBC检索方式和SQL检索方式。其中前两者比较简单,比如OID检索方式是指Session对象的get()和load()方法。HQL是Hibernate Query Language的缩写,是官方推荐的查询语言。QBC是Query By Criteria的缩写,是Hibernate提供的一个接口。Hibernate还允许用原始的SQL查询数据库。
HQL的检索方式的步骤如下,相信学过SQL语句和面向对象的应该能看懂以下代码。
1)、有Session对象的craeteQuery()方法创建一个Query对象,该对象包含一个HQL的查询语句,此语句可以包含参数,如?参数占位符。
2)、由Query对象的setParameter()方法为参数赋值,该方法的第一个参数表示占位符的位置,从0开始。
3)、有Query对象的list()方法执行查询语句。该方法将范虎iList类型的结果集,在List集合中存放了而符合查询条件的持久化对象。
String queryString = "from Admin as model where model." + propertyName + "=?";
Query query = getSession().createQuery(queryString);
query.setParameter( 0, value);
return query.list();
以上代码还能写成如下形式; return getSession().createQuery("from Admin as model where model." + propertyName + "=?").setParameter(0, value).list();
这些是HQL常用语句用法:
1 多态查询。Strng queryString = "from Cat";和SQL语句不同,省略了select关键字,查找父类就会自动查找该类的子类实例。
2 投影查询。哟啊用select关键字。String queryString = "select a.username,a.password from Admin a";
3 排序和消除重复记录的用法与SQL相同,都是分别用order by 和distinct关键字。
4 调用函数。HQL定义了5个常用的聚集函数:count() avg() min() sum() max()
5 分组关键字和运算符均与SQL相同,分别是group by...having...and or not in is null, between...and...
6 动态查询和动态实例查询。动态实例查询是动态的实例化查询,查询的结果是java对象。如chaxun学生的id,name,number如下方式:
String queryString = " select new Student(s.id, s.name, s.name) from Student as s“;要注意的是要有Sutdent的相关构造方法。
动态查询则是之查询之前不知道查询内容二十在运行时才知道查询内容的查询。
7 分页查询。分别用两个方法实现即可。setFirstResult(int firstResult)方法设置开始检索的起始对象、setMaxResults(int maxResults)设置每次返回的最大对象数。
8 嵌套子查询,和SQL中的查询类似,都是放在where字句下。
9 多表查询。内连接(inner join可以简写join)String query="from Student st join st.scores sc where sc.score > 85"; 抓举内连接(inner join fetch)
String query="from Student st inner join fetch st.scores sc where sc.score > 85"; 左外连接(left join)String query = " from Student st left join st.scores sc";抓取做外连接就在左外连接上加了fetch关键字。交叉连接(主要是用于不存在关联关系的对象)。String query = " from Student s. Admin a where s.id = a.id ";