hibernate3学习笔记(十)SQL支援

还是最初的那个例子:http://blog.csdn.net/kunshan_shenbin/archive/2008/09/02/2864883.aspx

示例代码如下:

1.package com.hb3.pack_01;<br />2.<br />3.import java.util.Iterator;<br />4.5.import org.hibernate.Query;<br />6.import org.hibernate.SQLQuery;<br />7.import org.hibernate.Session;<br />8.import org.hibernate.SessionFactory;<br />9.import org.hibernate.cfg.Configuration;<br />10.11.import com.hb3.pack_01.model.User;<br />12.13.public class BusinessService {<br />14.15.    public static void main(String[] args) {<br />16.<br />17.        Configuration config = new Configuration().configure();<br />18.        SessionFactory sessionFactory = config.buildSessionFactory();<br />19.        Session session = sessionFactory.openSession();<br />20.<br />21.        String sql = "select {user.*} from User user where user.age > ?";<br />22.        SQLQuery sqlQuery = session.createSQLQuery(sql);<br />23.        sqlQuery.setParameter(0, 20);<br />24.        sqlQuery.addEntity("user", User.class);<br />25.        Iterator<?> iterator = sqlQuery.list().iterator();<br />26.        while(iterator.hasNext()) {<br />27.            User user = (User) iterator.next();<br />28.            System.out.println(user.getAge() + "/t" + user.getName());<br />29.        }<br />30.<br />31.        Query query = session.getNamedQuery("com.hb3.pack_01.model.User.SQLQueryUser");<br />32.        query.setInteger("age", 20);<br />33.        iterator = query.list().iterator();<br />34.        while(iterator.hasNext()) {<br />35.            User user = (User) iterator.next();<br />36.            System.out.println(user.getAge() + "/t" + user.getName());<br />37.        }<br />38.39.        session.close();<br />40.        sessionFactory.close();<br />41.    }<br />42.}

修改User.hbm.xml文件如下:

1.<?xml version="1.0" encoding="UTF-8"?><br />2.3.<!DOCTYPE hibernate-mapping PUBLIC<br />4.    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />5.    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">6.7.<hibernate-mapping>8.    <class name="com.hb3.pack_01.model.User" table="user"<br />9.        dynamic-insert="true"<br />10.        dynamic-update="true"<br />11.    >12.        <id name="id" column="id" type="java.lang.Integer" unsaved-value="null">13.            <generator class="native" />14.        </id>15.<br />16.        <property name="name" column="name" type="java.lang.String" />17.<br />18.        <property name="age" column="age" type="java.lang.Integer" />19.    </class>20.<br />21.    <query name="com.hb3.pack_01.model.User.QueryUser">22.        <![CDATA[<br />23.            from User as user where user.age > :minAge<br />24.        ]]>25.    </query>26.<br />27.    <sql-query name="com.hb3.pack_01.model.User.SQLQueryUser">28.        <![CDATA[<br />29.            select {user.*} from User user where user.age > :age<br />30.        ]]><br />31.        <return alias="user" class="com.hb3.pack_01.model.User"/>32.    </sql-query>33.<br />34.</hibernate-mapping>

运行结果:

17:20:40,859  WARN ConfigurationFactory:127 - No configuration found. Configuring ehcache from ehcache-failsafe.xml  found in the classpath: jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml<br />17:20:41,281  WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.UpdateTimestampsCache]; using defaults.<br />17:20:41,312  WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.<br />Hibernate: select user.id as id0_0_, user.name as name0_0_, user.age as age0_0_ from User user where user.age > ?<br />28 shenbin<br />24 chenyan<br />23 shenyi<br />23 yangye<br />22 chenyong<br />Hibernate: select user.id as id0_0_, user.name as name0_0_, user.age as age0_0_ from User user where user.age > ?<br />28 shenbin<br />24 chenyan<br />23 shenyi<br />23 yangye<br />22 chenyong

另外,我们还可以自定义insert、update、delete时的SQL文而不使用Hibernate3自动生成的SQL文。

修改User.hbm.xml文件如下:

1.<?xml version="1.0" encoding="UTF-8"?><br />2.3.<!DOCTYPE hibernate-mapping PUBLIC<br />4.    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />5.    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">6.7.<hibernate-mapping>8.    <class name="com.hb3.pack_01.model.User" table="user"<br />9.        dynamic-insert="true"<br />10.        dynamic-update="true"<br />11.    >12.        <id name="id" column="id" type="java.lang.Integer" unsaved-value="null">13.            <generator class="native" />14.        </id>15.<br />16.        <property name="name" column="name" type="java.lang.String" />17.<br />18.        <property name="age" column="age" type="java.lang.Integer" />19.<br />20.        <sql-insert>21.            <!-- INSERT INTO user (name, age) VALUES (?, ?) -->22.            INSERT INTO user VALUES (?, ?)   <br />23.        </sql-insert>24.        <sql-update>25.            UPDATE user SET name=?, age=?, WHERE id=?<br />26.        </sql-update>27.        <sql-delete>28.            DELETE FROM user WHERE id=?<br />29.        </sql-delete>30.<br />31.    </class>32.<br />33.    <query name="com.hb3.pack_01.model.User.QueryUser">34.        <![CDATA[<br />35.            from User as user where user.age > :minAge<br />36.        ]]>37.    </query>38.<br />39.    <sql-query name="com.hb3.pack_01.model.User.SQLQueryUser">40.        <![CDATA[<br />41.            select {user.*} from User user where user.age > :age<br />42.        ]]><br />43.        <return alias="user" class="com.hb3.pack_01.model.User"/>44.    </sql-query>45.<br />46.</hibernate-mapping>

示例代码:

1.package com.hb3.pack_01;<br />2.<br />3.import org.hibernate.Session;<br />4.import org.hibernate.SessionFactory;<br />5.import org.hibernate.Transaction;<br />6.import org.hibernate.cfg.Configuration;<br />7.8.import com.hb3.pack_01.model.User;<br />9.10.public class BusinessService {<br />11.12.    public static void main(String[] args) {<br />13.<br />14.        Configuration config = new Configuration().configure();<br />15.        SessionFactory sessionFactory = config.buildSessionFactory();<br />16.        Session session = sessionFactory.openSession();<br />17.18.        User user = new User();<br />19.        user.setName("yanfeng");<br />20.        user.setAge(21);<br />21.        Transaction tx = session.beginTransaction();<br />22.        session.save(user);<br />23.        tx.commit();<br />24.<br />25.        session.close();<br />26.        sessionFactory.close();<br />27.    }<br />28.}

测试结果如下:

17:29:03,781 WARN ConfigurationFactory:127 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml17:29:04,328 WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.UpdateTimestampsCache]; using defaults.17:29:04,359 WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.Hibernate: insert into user (name, age) values (?, ?)

可见,在实行保存操作时的SQL确实是我们在配置文件中定义的SQL文。

将来靠自己双掌;愿你用双掌开拓出美好的梦想。

hibernate3学习笔记(十)SQL支援

相关文章:

你感兴趣的文章:

标签云: