Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
① HQL语言的使用
Query query = session.createQuery(" from User as user where user.id = ?");
② Query接口的set...方法
query.setInteger(0, 1);
③ Query接口的List方法
List<User> list = query.list();
④ 遍历结果集
Iterator<User> i = list.iterator();
while(i.hasNext()){
User user = i.next();
System.out.println(user.getId()+" : "+user.getName());
}
session.getTransaction().commit(); session.close();
1.HQL 语言与Query接口的使用
HQL:Hibernate Query Language
HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。
HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按
如下步骤进行:
(1)获取Hibernate Session对象;
(2)编写HQL语句;
(3)以HQL语句作为参数,调用Session的createQuery方法创建查询对象;
(4)如果HQL语句包含参数,调用Query的setXxx方法为参数赋值;
(5)调用Query对象的list等方法遍历查询结果。
2.命名查询
把查询条件放置在程序之外,避免硬编码; 在*.hbm.xml中使用<query>标签, 在<![CDATE[ code]]> 中写HQL语句
<hibernate-mapping>
<class name="po.User" table="user" catalog="mytest">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="uuid.hex" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="256" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" />
</property>
</class>
<query name="idNameQuery">
<![CDATA[
from User as user where user.id = ?
]]>
</query>
</hibernate-mapping>
使用getNamedQuery()方法根据query的名字属性获取hql语句,以获取Query对象。
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
List<User> list = session.getNamedQuery("idNameQuery").setInteger(0, 1).list();
Iterator<User> i = list.iterator();
while(i.hasNext()){
User user = i.next();
System.out.println(user.getId()+" : "+user.getName());
}
session.getTransaction().commit();
session.close();
3. HQL的参数的绑定方式
Hibernate中对动态查询参数绑定提供了丰富的支持,在Hibernate中共存在4种参数绑定的方式,下面只介绍两种:
A、 按参数名称绑定:
在HQL语句中定义命名参数要用”:”开头,形式如下:
Query query=session.createQuery(“from User user where user.name= :customername and user.age = :customerage”);
query.setString(“customername”,name);
query.setInteger(“customerage”,age);
上面代码中用:customername和:customerage分别定义了命名参数customername和customerage,然后用Query接口的setXXX()方法设定名参数值,setXXX()方法包含两个参数,分别是命名参数名称和命名参数实际值。
B、 按参数位置邦定:
在HQL查询语句中用”?”来定义参数位置,形式如下:
Query query=session.createQuery(“from User user where user.name= ? and user.age = ? ”);
query.setString(0,name);
query.setInteger(1,age);
同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表邦定参数在HQL语句中出现的位置编号(由0开始编号),第二个参数仍然代表参数实际值。
注:在实际开发中,提倡使用按名称邦定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称邦定名参数的方式中是不需要调整程序代码的。
HQL查询语句基础
猜你喜欢
转载自hnhhshun-126-com.iteye.com/blog/1409611
今日推荐
周排行