`
sw1982
  • 浏览: 511479 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate3-语法速查

阅读更多
 发信人: lightning (秦兽部落十大神器--秦之昆仑镜), 信区: Java
标  题: hql的使用
发信站: 武汉白云黄鹤站 (2008年10月30日18:52:05 星期四), 站内信件


抄自《深入浅出hibernate》

hql语法结构(hibernate3):
[select/update/delete ...] [from ...] [where ...] [group by ...]
[having ...] [order by ...]



1,实体查询
String hql="from TUser";
Query query=session.createQuery(hql);
List userList=query.list();
如果有相同类名的话,要用完全类名,比如"from
com.redsaga.hibernate.db.entity.TUser"

有where的:
from TUser user where user.age>20
from TUser user where user.age in (18,28)
from TUser user where user.name like 'Er%'
from TUser user where (user.age>20) and (user.name like 'Er%')

2,属性查询
实际上有没有别名都无关紧要
List list=session.createQuery("select user.name from TUser user").list();
每个element都是String

如果是
select user.name,user.age from ...
那么list的每个element是Object[]

你说这个是不是很丑陋,所以有这种hsql
select new TUser(user.name,user.age) ....

前提是TUser类中有这种构造器
出来的对象是自由态的,就是没有跟session发生关联,没有被hibernate管理。
所以出来的对象如果你又save,会产生insert的效果。
出来的对象其他的属性会是null

属性查询最方便的是用于统计
select count(*),min(user.age) from ...
取出Object[]来处理

甚至可以用原生sql函数例如:
select upper(user.name) from ...
加distinct关键字
select distinct user.name from ...

3,实体更新和删除
hibernate2中只能取得持久态对象而后用setter改变最后save

但是hibernate3中的hql支持update和delete了
比如:
String hql="update TUser set age=18 where id=1";
Query query=session.createQuery(hql);
query.executeUpdate();

删除:
delete from...where age>18

4,分组和排序
hql支持order by ,group by,having
所以:
from TUser order by name desc
会得到名字降序的实体对象
当然也可以多个排序对象
from TUser ordery by name,age

group by:
select count(user),user.age from TUser group by user.age
having:
select count(user),user.age from TUser group by user.age having count(user)>10


5,参数绑定:
Session.find:
session.find("from TUser user where user.name=?","Erica",Hibernate.STRING);
多参数Session.find:
Object[] args=new Object[]{"Erica",new Integer(20)};
Type[] types=new Type[]{Hibernate.STRING,Hibernate.INTEGER};
session.find("from TUser user where user.name=? and user.age>?",args,types);

通过Query接口:
Query query=session.createQuery("from TUser user where user.name=? and
user.age>?");
query.setString(0,"Erica");
query.setInteger(1,20);
还可以用引用占位符:
String hql="from TUser where name=:name";
Query query=session.createQuery(hql);
query.setParameter("name","Erica");

甚至还可以用JavaBean封装参数
class UserQuery{
private String name;
pivate Integer age;
//getter_setter
}
String hql="from TUser where name=:name and age=:age";
Query query=session.createQuery(hql);
UserQuery uq=new UserQuery();
uq.setName("Erica");
uq.setAge(new Integer(20));
query.setProperties(uq);

分享到:
评论

相关推荐

    java培训-Hibernate

    3.懒加载和立即加载:Hibernate支持懒加载策略,即关联的数据在需要时才加载,这可以提高应用性能。而立即加载则是在查询时就加载关联数据。 4.缓存机制:Hibernate内置了第一级缓存(Session缓存)和第二级缓存...

    史上最全api,大多数是中文版

    15、OracleSQL语法速查.chm 16、oracle函数大全.chm 17、ORACLE九阴真经.chm 18、ORACLE命令速查8i.chm 19、Spring-Reference_zh_CN.chm 20、SQL.CHM 21、XML指南.chm 22、Apache.chm 23、aspx.chm 24、Java设计模式...

    Java Programming Cheatsheet

    Java编程速查表 在Java编程中,掌握关键概念、语法和最佳实践是至关重要的。这份Java编程速查表旨在帮助开发者快速回顾和查找必要的信息,以提高编程效率。以下是一些核心知识点: 1. **基础语法** - **变量**:...

    ehcache-2.10.3-distribution.tar.gz

    3. **帮助文档**: 包含了关于如何使用Ehcache、配置选项、API参考等信息,对初学者和经验丰富的开发者来说都是宝贵的资源。 Ehcache的主要特性包括: - **内存管理**:自动管理缓存中的对象,当内存达到预设限制时...

    黑马面试宝典知识点复习

    3. **执行查询**:按照优化后的计划执行查询。 4. **返回结果集**:将查询结果返回给客户端。 #### 存储过程 - **定义**:一组为了完成特定功能的SQL语句集,存储在数据库中以便多次使用。 - **优点**: - 提高...

    Java工程师面试宝典

    #### 3. 类加载 ##### 3.1 类的加载过程 - **加载**:将类的.class文件读入内存,并转化为二进制数据流。 - **验证**:确保.class文件的字节流包含的信息符合当前虚拟机的要求。 - **准备**:为类的静态变量分配...

    API_XIAXINWEN

    3. **oracle命令速查v2.chm**:这是关于Oracle数据库管理系统的命令参考手册。Oracle是世界上最广泛使用的商业数据库系统之一,这个文档可能包含了大量的SQL查询和数据库管理命令,如DML(数据操纵语言)、DDL(数据...

    java学习路线.docx

    **目标:** 理解Java语言的基本语法,掌握基本的编程技巧。 1. **Java开发环境搭建:** - **JDK(Java Development Kit)安装:** JDK是Java开发的基础工具包,包含了编译器、解释器、文档工具等。安装JDK时,需要...

    java分布式电商教程视频,保证能看,有问题私聊

    - **丰富的库支持**:Java拥有庞大的开源社区,提供了大量成熟的库和框架,如Spring、Hibernate等,大大简化了分布式系统的开发难度。 #### 2. Java在分布式电商系统中的具体应用 - **服务端开发**:使用Spring ...

    jjava数据库

    同时,熟悉SQL语言的基本语法,如DML(数据操纵语言,包括INSERT、UPDATE、DELETE)、DDL(数据定义语言,如CREATE TABLE)和DQL(数据查询语言,SELECT)也是必备技能。 总之,Java数据库编程是一个广泛且实用的...

    JAVA上百实例源码以及开源项目源代码

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

    Java工程师面试题集合

    5. MyBatis与Hibernate的不同:MyBatis是一种持久层框架,而Hibernate是一种ORM框架。 6. #{}和${}的区别是什么?#{}是用于参数占位符,而${}是用于字符串替换。 7. 当实体类中的属性名和表中的字段名不一样,怎么办...

    1000道 互联网Java工程师面试题

    * Java语法基础:变量、数据类型、运算符、控制语句、函数等。 MyBatis框架 * MyBatis是什么:MyBatis是一个基于Java的持久层框架,提供了数据库交互的解决方案。 * MyBatis的优点:灵活、可扩展、支持多种数据库...

Global site tag (gtag.js) - Google Analytics