SELECT * FROM user WHERE age > 20则您可以如下建立SQL查询:
// SQL,并指定别名为userString sql = "select {user.*} from User user where user.age > 20"; Session session = sessionFactory.openSession(); // 建立 SQLQuery SQLQuery 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。
<?xml version="1.0" encoding="utf-8"?> </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();