HQL分析总结
来源:互联网 发布:网络教育怎么入学考试 编辑:程序博客网 时间:2024/05/22 02:14
HQL分析总结
HQL(Hibernate Query Language)
面向对象的查询语言,于SQL不同,HQL中的对象名是区分大小写的(和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且HQL主要通过Query来操作,Query的创建方式:
Queryq=session.createQuery(hql);
1、实体查询
l fromPerson
l fromUser user where user.name=:name
l fromUser user where user.name=:name and user.birthday<:birthday
l fromUser user where user.age between 20 and 30;
l fromUser user where user.age in (20,30);
l fromUser user where user.name is null;
l fromUser user where user.name like ’%zx%’;
l fromUser user where (user.age%2)=1;
l fromUser user where user.age=20 and user name like ‘%zx%’;
2、实体的更新和删除
这项技术功能是Hibernate3的新加入的功能,在Hibernate2重视不具备的。
Transactiontrans=session beginTransaction();
String hql=”updateUser user set user age=20 whereuser age=18”;
Queryqueryupdate=session.createQuery(hql);
Intret=queryupdate executeUpdate();
Trans commit();
通过这种方式我们可以再Hibernate3中,一次性王成批量数据的更新,对性能的提高是相当的可观。同样可以通过类似的方式来完成delete操作,如下面的代码:
Transactiontrans=session beginTransaction();
String hql=”deletefrom User user where user age=18”;
Queryqueryupdate=session createQuery(hql);
Intret=queryupdate executeUpdate();
Trans commit();
这种操作方式在Hibernate3中称为bulkdelete/update,这种方式能够在很大程度上提高操作的灵活性和运行效率,但是采用这种方式极有可能引起缓存同步上的问题。
3、属性查询
很多时候我们在检索数据是,并不需要获得实体对象所对应的全部数据,而只需要检索实体对象的部分所对应的数据。这时候就可以利用HQL属性查询技术,如下面程序示例:
List list=sessioncreateQuery(“select user name from User user”);
List();
For(int i=0){
System.outprint(list get(i));
}
上面的代码质监所了User实体的name属性对应的数据,此时返回的包含结果集的list中每个条目都是String类型的name属性对应的数据。也可以以此检索多个属性:
List list=sessioncreateQuery(“select user name;user age from User user”);
List();
For(inti=0;i<list length();i++){
Object[]obj=(Object[])
List get(i);
System.out.println(obj[0]);
System.out.println(obj[1]);
}
此时返回的结果集list中,所包含的每个条目都是一个Object[]类型,其中包含对应的属性数据值。作为当今我们这一代深受面向对象思想影响的开发人员,可能会觉得上面返回Object[]不够符合面向对象风格,这时我们可以利用HQL提供的动态构造实例的功能对这些平面数据进行封装,如下面的程序代码:
List list=session createQuery(“select newUser(user name,user age) from User user ”)
list();
for(int i=0;i<list length();i++){
User user=(User)list get(i);
System out println(user getName());
System out println(user getAge());
}
这里我们通过动态构造实例对象,对返回结果进行了封装,使我们的程序更加符合面向对象风格,但是这里有一个问题必须注意,那就是这时所返回的User对象,仅仅只是一个普通的Java对象而以,除了查询结果值之外,其它的属性值都为null(包括主键值id),也就是说不能通过Session对象对此对象执行持久化的更新操作。如下面的代码:
List list=session createQuery(“select newUser(user name,user age) from User user ”)
list();
for(int i=0;i<list length();i++){
User user=(User)list get(i);
user setName(“gam”);
session saveOrUpdate(user);//这里将会实际执行一个save操作,而不会执行update操作,因为这个User对象的id属性为null,Hibernate会把它作为一个自由对象(请参考持久化对象状态部分的论述),因此会对它执行save操作。
}
- HQL分析总结
- HQL总结
- hql总结
- HQL总结
- HQL总结
- HQL总结
- HQL 总结
- HQL总结
- HQL总结
- HQL总结
- Hql语句注意事项总结
- Hql语句注意事项总结
- hibernate HQL总结
- Hibernate----hql总结
- hql 语句总结
- HQL总结(转)
- Hql语句注意事项总结
- hibernate------hql总结
- JAVA对double或者float的浮点数精度计算控制方法
- JAVA—— & 和 &&
- JS与php的区别
- Sencha Touch之Hello World
- perl profile
- HQL分析总结
- 使用jquery+ajax方式实现用户注册时,检测用户名是否存在
- vecto的删除方法
- iPhone游戏编程- 启动画面
- 提高算法水平的办法
- Linux:find
- 维生素A
- visual studio2008中给网页项目添加数据库
- Win32汇编教程1 - 基本概念