packagecom.hb3.pack_01;
importjava.util.Iterator;
importjava.util.List;
importorg.hibernate.Query;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
importcom.hb3.pack_01.model.User;
importcom.hb3.pack_01.model.UserBak;
publicBusinessService{
publicvoid(Stringargs){
Configurationconfig=Configuration.configure;
SessionFactorysessionFactory=config.buildSessionFactory;
Sessionsession=sessionFactory.openSession;
Queryquery=session.createQuery("fromcom.hb3.pack_01.model.Useruserorderbyuser.agedesc,user.name");//[fromUser]
prUserInfo(query.list);
query=session.createQuery("selectcom.hb3.pack_01.model.UserBak(user.name,user.age)fromUserasuser");
Iterator<?>iterator=query.list.iterator;
.out.prln("_namettname/age");
while(iterator.hasNext){
UserBakuserbak=(UserBak)iterator.next;
.out.prln(userbak.getClz+"t"+userbak.getName+"/"+userbak.getAge);
}
query=session.createQuery("selectupper(user.name)fromUserasuserwhere(user.age/2>=?)and(user.ageisnotnull)");
query.Integer(0,13);
List<?>names=query.list;
iterator= names.iterator;
while(iterator.hasNext){
.out.prln(iterator.next);
}
query=session.createQuery("selectuser.name,user.agefromUserasuserwhereuser.age>:minAge");
query.Integer("minAge",25);
names=query.list;
iterator= names.iterator;
while(iterator.hasNext){
Objectobj=(Object)iterator.next;
.out.prln(obj[0]+"t"+obj[1]);
}
query=session.getNamedQuery("com.hb3.pack_01.model.User.QueryUser");
query.Integer("minAge",25);
prUserInfo(query.list);
Transactiontx=session.beginTransaction;
query=session.createQuery("updateUserage=24wherename='chenyan'");
query.executeUpdate;
tx.commit;
tx=session.beginTransaction;
query=session.createQuery("deleteUserwherename='yaobin'");
query.executeUpdate;
tx.commit;
session.close;
sessionFactory.close;
}
publicvoidprUserInfo(List<?>users){
Iterator<?>iterator=users.iterator;
.out.prln("idtname/age");
while(iterator.hasNext){
Useruser=(User)iterator.next;
.out.prln(user.getId+"t"+user.getName+"/"+user.getAge);
}
}
}
修改User.hbm.xml文件;
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<name="com.hb3.pack_01.model.User"table="user"
dynamic-insert="true"
dynamic-update="true"
>
<idname="id"column="id"type="java.lang.Integer"unsaved-value="null">
<generator="native"/>
</id>
<propertyname="name"column="name"type="java.lang.String"/>
<propertyname="age"column="age"type="java.lang.Integer"/>
</>
<queryname="com.hb3.pack_01.model.User.QueryUser">
<![CDATA[
fromUserasuserwhereuser.age> :minAge
]]>
</query>
</hibernate-mapping>
新建UserBak类
packagecom.hb3.pack_01.model;
publicUserBak{
privateStringclz="UserBak";
privateStringname;
privateIntegerage;
publicUserBak{
}
publicUserBak(Stringname,Integerage){
this.name=name;
this.age=age;
}
publicStringgetName{
name;
}
publicvoidName(Stringname){
this.name=name;
}
publicIntegergetAge{
age;
}
publicvoidAge(Integerage){
this.age=age;
}
publicStringgetClz{
clz;
}
publicvoidClz(Stringclz){
this.clz=clz;
}
}
运行结果:
16:53:02,015 WARN ConfigurationFactory:127 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the path: jar:file:/D:/Java/MyEclipse%206.0/workspace/hb3demo/ehcache-1.2.3.jar!/ehcache-failsafe.xml
16:53:02,437 WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.UpdateTimestampsCache]; using defaults.
16:53:02,468 WARN EhCacheProvider:93 - Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.age as age0_ from user user0_ order by user0_.age desc, user0_.name
id name/age
1 shenbin/28
2 chenyan/26
9 shenyi/23
10 yangye/23
11 chenyong/22
13 chendong/null
12 yaobin/null
Hibernate: select user0_.name as col_0_0_, user0_.age as col_1_0_ from user user0_
_name name/age
UserBak shenbin/28
UserBak chenyan/26
UserBak shenyi/23
UserBak yangye/23
UserBak chenyong/22
UserBak yaobin/null
UserBak chendong/null
Hibernate: select upper(user0_.name) as col_0_0_ from user user0_ where user0_.age/2>=? and (user0_.age is not null)
SHENBIN
CHENYAN
Hibernate: select user0_.name as col_0_0_, user0_.age as col_1_0_ from user user0_ where user0_.age>?
shenbin28
chenyan26
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.age as age0_ from user user0_ where user0_.age>?
id name/age
1 shenbin/28
2 chenyan/26
Hibernate: update user age=24 where name='chenyan'
Hibernate: delete from user where name='yaobin'
注意点:
1.在Hibernate3中可以直接使用HQL指定更新或刪除
2.使用HQL可以自定义返回类型(如:UserBak)
3.使用HQL可以结合各种查询条件使用where子句限定查询条件除了 = 运算的外还有 >、>=、<、<=、!= 或 <>等比较运算:
Query query = session.createQuery("from User user where user.age between 20 and 30");
Query query = session.createQuery("from User user where user.name in('caterpillar', 'momor')");
Query query = session.createQuery("from User user where user.name like 'cater%'");
Query query = session.createQuery("select avg(user.age) from User as user");
Query query = session.createQuery("select count(*) from User as user");
也可以配合GROUP BY子句假设在数据库表中追加个Sex字段
Query query = session.createQuery("select user.sex, avg(user.age) from User user group by user.sex");
运行结果可能是:
+-------------------------------+
| sex | avg(age) |
+-------------------------------+
| male | 30 |
+-------------------------------+
| female | 25 |
+-------------------------------+
可以結合having子句,例如只将平均年龄大于20资料分组显示出来:Query query = session.createQuery("select user.sex, avg(user.age) from User user group by user.sex having avg(user.age) > 20");
使用HQL是官方推荐查询方式
最新评论