Hibernate Gossip: 建立SQL查詢

本文介绍如何在Hibernate中使用原生SQL查詢,并通过实例演示了如何设置SQL查詢语句、别名及参数,同时还展示了如何在映射文件中定义SQL查詢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
b.gif
Hibernate Gossip: 建立SQL查詢
b.gifHibernate提供了對SQL的支援,您可以指定您所要建立的SQL,並將實體類別與資料表格關聯,舉個例子來說,如果您打算使用像以下的SQL語句:<wbr style="LINE-HEIGHT: 1.3em">
SELECT * FROM user WHERE age > 20


則您可以如下建立SQL查詢:
// SQL,並指定別名為user
String sql = "select {user.*} from User user where user.age > 20";Session session = sessionFactory.openSession();
// 建立 SQLQuerySQLQuery sqlQuery = session.createSQLQuery(sql);
// 將別名user與實體類User關聯在一起sqlQuery.addEntity("user", User.class);Iterator iterator = sqlQuery.list().iterator();while(iterator.hasNext()) {    User user = (User) iterator.next();    System.out.println(user.getAge() + "\t" + user.getName());}        session.close();


addEntity()是將實體類別與別名連結在一起的方法,大括號指定要查詢的資料,Hibernate根據所給定的SQL自動生成以下的句子:
select user.id as id0_, user.name as name0_0_, user.age as age0_0_ from User user where user.age > 20


返回的結果則由Hibernate進行封裝為所指定別名關聯之實體類,如此您可以得到使用SQL的彈性,但無需處理繁瑣的ResultSet。

您也可以將SQL語句定義在映射文件中,例如:
  • User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="onlyfun.caterpillar.User" table="user">
        ....
    </class>

    <sql-query name="onlyfun.caterpillar.QueryUser">        <![CDATA[            select {user.*} from User user where user.age > 20          ]]>        <return alias="user" class="onlyfun.caterpillar.User"/>    </sql-query>
</hibernate-mapping>

定義的時候,使用<return>標籤指定別名與實體類之關聯,配合映射文件中的定義,您可以如下運行Hibernate:
Session session = sessionFactory.openSession();Query query = session.getNamedQuery("onlyfun.caterpillar.QueryUser");        Iterator iterator = query.list().iterator();while(iterator.hasNext()) {    User user = (User) iterator.next();    System.out.println(user.getAge() + "\t" + user.getName());}        session.close();


也可以設定查詢參數,例如:
....<sql-query name="onlyfun.caterpillar.QueryUser"><![CDATA[select {user.*} from User user where user.age > :age]]><return alias="user" class="onlyfun.caterpillar.User"/></sql-query>....


使用Hibernate查詢時如下:
Session session = sessionFactory.openSession();Query query = session.getNamedQuery("onlyfun.caterpillar.QueryUser");query.setInteger("age", 20);Iterator iterator = query.list().iterator();while(iterator.hasNext()) {    User user = (User) iterator.next();    System.out.println(user.getAge() + "\t" + user.getName());}        session.close();</wbr>
b.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值