- 浏览: 21235 次
- 性别:
- 来自: 北京
最新评论
1.实体查询
String hql = " from TUser";
执行这条语句会返回TUser以及TUser子类的纪录。
注: 如果 TUser 类具有外键, 查询会报错!
解决方法: select 别名.属性 from 类 as 别名. 没有别名.属性仍然报错!
hql = "from java.lang.Object"
会返回数据库中所有库表的纪录。
where 语句
hql = "from TUser as user where user.name='yyy'";
其中,as可以省略也一样
hql = "from TUser user where user.name='yyy'";
where子句中,我们可以通过比较运算符设定条件,如:
=, <>, >, <, >=, <=, between, not between, in, not in, is, like等。
2.属性查询
List list = session.createQuery("select user.name, user.age from TUser as user").list();
还可以在HQL中动态构造对象实例的方法,将数据封装。
List list = session.createQuery("select new TUser(user.name, user.age) from TUser as user").list();
Iterator it = list.iterator();
while(it.hasNext() ) {
TUser user = (TUser)it.next();
System.out.println(user.getName());
}
但是要注意这里的TUser对象只是对name和age属性的封装,其他状态均未赋值,所以不能用它来进行更新操作。
也可以在HQL的Select子句中使用统计函数
"select count(*) ,min(user.age) from TUser as user"
也可以使用distinct关键字来删除重复纪录。
select distinct user.name from TUser as user;
3.实体的更新与删除
hibernate 2中需要先查询出实体,设置属性后再保存。
hibernate 3中,提供了更灵活的方式(bulk delete/update)
更新:
Query query = session.createQuery("update TUser set age=18 where id=1");
query.executeUpdate();
删除:
session.createQuery("delete TUser where age>=18");
query.executeUpdate();
4.分组与排序
Order by子句:
from TUser user order by user.name, user.age desc
Group by子句和Having子句
"select count(user), user.age from TUser user group by user.age having count(user)>10"
5.参数邦定
通过顺序占位符?来填充参数:
1)hibernate 2 中通过session.find方法来填充
session.find("from TUser user where user.name=?", "Erica", Hibernate.STRING);
多个参数的情况:
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);
2)通过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;
private Integer age;
//getter and 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); //会调用里面的getter?
query.iterate();
6.联合查询
也可以使用 inner join,left outer join, right out join, full join
排列组合:form TUser, TAddress
String hql = " from TUser";
执行这条语句会返回TUser以及TUser子类的纪录。
注: 如果 TUser 类具有外键, 查询会报错!
解决方法: select 别名.属性 from 类 as 别名. 没有别名.属性仍然报错!
hql = "from java.lang.Object"
会返回数据库中所有库表的纪录。
where 语句
hql = "from TUser as user where user.name='yyy'";
其中,as可以省略也一样
hql = "from TUser user where user.name='yyy'";
where子句中,我们可以通过比较运算符设定条件,如:
=, <>, >, <, >=, <=, between, not between, in, not in, is, like等。
2.属性查询
List list = session.createQuery("select user.name, user.age from TUser as user").list();
还可以在HQL中动态构造对象实例的方法,将数据封装。
List list = session.createQuery("select new TUser(user.name, user.age) from TUser as user").list();
Iterator it = list.iterator();
while(it.hasNext() ) {
TUser user = (TUser)it.next();
System.out.println(user.getName());
}
但是要注意这里的TUser对象只是对name和age属性的封装,其他状态均未赋值,所以不能用它来进行更新操作。
也可以在HQL的Select子句中使用统计函数
"select count(*) ,min(user.age) from TUser as user"
也可以使用distinct关键字来删除重复纪录。
select distinct user.name from TUser as user;
3.实体的更新与删除
hibernate 2中需要先查询出实体,设置属性后再保存。
hibernate 3中,提供了更灵活的方式(bulk delete/update)
更新:
Query query = session.createQuery("update TUser set age=18 where id=1");
query.executeUpdate();
删除:
session.createQuery("delete TUser where age>=18");
query.executeUpdate();
4.分组与排序
Order by子句:
from TUser user order by user.name, user.age desc
Group by子句和Having子句
"select count(user), user.age from TUser user group by user.age having count(user)>10"
5.参数邦定
通过顺序占位符?来填充参数:
1)hibernate 2 中通过session.find方法来填充
session.find("from TUser user where user.name=?", "Erica", Hibernate.STRING);
多个参数的情况:
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);
2)通过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;
private Integer age;
//getter and 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); //会调用里面的getter?
query.iterate();
6.联合查询
也可以使用 inner join,left outer join, right out join, full join
排列组合:form TUser, TAddress
发表评论
-
遮盖层覆盖整个页面
2015-07-08 10:45 553html代码: <body topmargin= ... -
spring注解+restlet
2014-08-26 13:32 605spring注解精解: http://www.douban.c ... -
Spring使用程序方式读取properties文件
2014-07-03 10:37 487Spring使用程序方式读取properties文件 在sp ... -
用javascript取当前系统时间(年、月、日等全)
2013-07-25 14:56 527var myDate = new Date(); myDate ... -
sql--查询数据库的连接数
2013-06-07 14:04 552Oracle: select * from v$sessio ... -
jQuery中设置form表单中action值的方法
2013-04-28 18:16 1083html代码: <form id="myFo ... -
java filter
2013-04-24 23:17 830一、使浏览器不缓存页面的过滤器 Java代码 impo ... -
sql count
2013-04-23 14:33 668连接该服务器的个数: SELECT count(*) FRO ... -
关闭打开页js(兼容浏览器)
2013-04-22 13:17 809<script> function closeSe ... -
sql-修改表
2013-04-11 10:19 645如需在表中添加列,请使用下列语法: ALTER TABLE t ... -
wget 爬虫
2012-11-13 13:34 1415wget 使用指南 wget是一个从网络上自动下载文件的自由工 ... -
Struts2的整理
2012-11-13 13:31 8181、任何表现层框架都是用来帮我们实现MVC model1(js ... -
dwr的使用
2012-11-11 12:38 744Dwr使用说明 1. 将dwr的ja ... -
Ajax的使用
2012-11-11 12:37 662ajax的使用步骤: 1.需要通过JavaScript创建XM ... -
JAVA数据库连接池
2012-11-09 00:02 693JAVA数据库连接池 基 ... -
事务传播特性和事务隔离级别
2012-11-08 23:48 561事务传播特性了解事务 ... -
ibatis
2012-11-08 23:45 712ibatis: ibatis中dao中的方法在使用sqlMap ... -
懒加载
2012-11-07 19:03 595get和load默认的时候都是立即检索,只有设置lazyloa ... -
类的加载和反射
2012-11-07 18:57 6371. 类的加载、连接和初始 a) 类的加载 i. 当程序主动使 ... -
部分重要SQL语句
2012-11-06 20:13 690TO_CHAR(date, 'fmt') 用于将 ...
相关推荐
HQL语句大全HQL语句大全HQL语句大全HQL语句大全HQL语句大全
hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全
非常详细直接实用的HQL语句的功能介绍 看过的人保准都说好
HQL语句 HQL语句 HQL语句 HQL语句 HQL语句
hibernate-HQL语句大全
HQL语句大全
HQL语句的语法,很基础
解析内容清晰简单,让你对hql语句半天就可以掌握!!
hql语句大全
HQL语句的用法,关于HQL与SQL语句的比较及其用法。
HQL语句查询
HQL语句(结合实例)HQL语句(结合实例)HQL语句(结合实例)HQL语句(结合实例)HQL语句(结合实例)
hql语句常规 方法 使用 了解hql语句
常见HQL语句的示例包括输出结果,以及语句的分析总结
HQL语句(结合实例).doc HQL语句(结合实例).doc HQL语句(结合实例).doc
下面介绍HQL语句的语法 1.from子句 2.select子句 3.聚集函数 4.多态查询 5.where子句 6.表达式 7.order by子句 8.group by子句 9.子查询语句 10.fetch关键字 11.命名查询
汇集了hql语句中大部分常用的函数 ABS(n) 取绝对值数学函数 数学函数 JPAQL HQL ABS(column_name[数字类型对象属性])
完整的HQL 语句形势如下: Select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc 其中的update/delete 为Hibernate3 中所新添加的功能
Hibernate案例与专题-HQL语句。详细介绍了HibernateHQL语句。
这里介绍了HQL语句详细的用法,在网上找的值得一看的介绍HQL用法的文章