Hibernate5的Query接口浅析

Query接口的基本知识

使用Query对象可以方便的查询数据库中的数据,它主要使用HQL或者本地SQL查询数据。Query对象不仅能查询数据,还可以绑定参数、限制查询记录数量、实现批量删除和批量更新等。

Configuration cfg=new Configuration().configure("hibernate.cfg.xml");
SessionFactory sf=cfg.buildSessionFactory();
Session session=sf.getCurrentSession();
Transaction tx=session.beginTransaction();
Query query=session.createQuery("from UserInfoPO");
List list=query.list();
tx.commit();

上面代码表示Query对象通过Session对象的createQuery()方法创建,方法的参数值"from UserInfoPO"是HQL语言,表示要读取所有UserInfoPO类型的对象,即读取UserInfoPO表中所有的记录,把每一条记录封装成UserInfoPO对象后保存到List对象中并返回List对象。
Query对象在Session对象关闭之前有效,否则会抛出SessionException类型的异常。

Query接口的常用方法
Query接口的常用方法如下所示:

  1. setXxx()方法:用于设置HQL中问号或变量的值。
  2. list()方法:返回查询结果,并把查询结果转换成List对象。
  3. excuteUpdate()方法:执行更新或删除语句。

1、使用setXxx方法为HQL语句设置参数
常用的setXxx方法如下:
(1)、setBoolean():设置类型为boolean的参数。
(2)、setByte():设置类型为byte的参数。
(3)、setDate():设置类型为date的参数。
(4)、setDouble():设置类型为doublu的参数。
(5)、setInteger():设置类型为int的参数。

例:

Query query=session.createQuery("from UserInfoPO u where u.age>? and u.userName like ?");
query.setInteger(0,22);					//设置第一个问号的值
query.setString(1,"%志%"); 				//设置第二个问号的值

2、使用list()方法获取查询结果
Query中的list()方法用于获取查询结果,并将查询结果转变成一个List接口的实例。
例如:

Query query=session.createQuery("from UserInfoPO u where u.age>? ");
query.setInteger(0,22);					
List list=query.list();
for(int i=0;i<list.size();i++){
	ui=(UserInfoPO)list.get(i);
	Systom,out.println(ui.getUserName());
}

3、使用excuteUpdate()方法更新或删除数据
例:

Query query=session.createQuery("delete from UserInfoPO ");
q.excuteUpdate();

4、使用命名查询
可以不将HQL语句写在程序中,而是写入映射文件*.hbm.xml中,这样便于在需要的时候修改HQL。这是需要在映射文件中使用query标记,把HQL语句放入<![CDATA[]]>中。
例:
UserInfoPO.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 解析文件的DTD -->
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
	<!-- 映射文件的根目录 -->
	<hibernate-mapping>
		<class name="PO.UserInfoPO" table="info" catalog="test">
			<id name="id" type="int">
				<column name="id"></column>
				<generator class="increment"></generator>
			</id>
			<property name="userName" type="string">
				<column name="userName" length="30" not-null="true"></column>
			</property>
			<property name="password" type="string">
				<column name="password" length="30" not-null="true"></column>
			</property>
		</class>
		<query name="queryUser_byAgeAndName">
			<![CDATA[from UserInfoPO u where u.age>:minAge and u.userName like :userName]]>
		</query>
	</hibernate-mapping>

query标记的name属性用来设定查询外部HQL时的名称,使用命名查询的实例代码如下:

Query query=session.createQuery("queryUser_byAgeAndName");
query.setInteger("minAge",22);					
query.setString("userName","%志%"); 				
List list=query.list();
for(int i=0;i<list.size();i++){
	ui=(UserInfoPO)list.get(i);
	Systom,out.println(ui.getUserName());
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值