Hibernate 的查询语言 Criteria 和Query
2010-05-21 21:20
375 查看
crieria.uniqueResult();代表结果唯一取出结果
lazy加载,只要不适用就不进行加载(根据配置文件的策略)
有时要覆盖配置文件的策略-------左连接的引入《》
两个检索语句同时写代表and关系
sql1 and sql2 、
Expression.eq 等于
Expression.alleq
Expression.gt 大于
Expression.in 需要一个集合add(Expression.in())
Set set =new TreeSet();
set.add(new Integer(3));
set.add(new Integer(2));
in的用法
crieria.add(Expression.in("id",set));查询id在2和3之间的数据,or
第二种写法
crieria.add(Expression.or(Expression.eq("id",new Integer(1)),Expression.eq("id",new Integer(1))))
and操作
crieria.add(Expression.add(lhs,rhs))
模糊操作
crieria.add(Expression.like("name","%s%"))
Hibername 的分页技术
crieria.setFirstResult(2);
crieria.setMaxResult(2);
List list =crieria.list();
list 中就是第二页的list集合
Criteria只能对一个对象进行查询(当查询条件比较动态的时候) 所以引入query
HQL语句查询
hql的语句有Hibernate来完成,查询的也是对象
可以把关系的表在内存中模拟成为封装好的面向对象的数据库,所以直接可以看过查询对象
实体查询
String hql="from Demo a where a.id=1";//类名字和属性名字如Demo需要区分大小写,而关键字from不区分大小写
Query query=session.createQuery(hql);
属性查询(需要select)
如果只想取出属性中的一部分就需要用到select了,select user.name from User user。
String hql="select n.name,n.id from Demo n ";
Query query=session.createQuery(hql);
List list=query.list;
for(int i=0;i<list.length;i++)
Objext[] vv=(Object[])list.get(i);
System.out.println((String)vv[0]);
System.out.println((Integer)vv[1]);
String hql="select new Demo(n.name) from Demo n ";前提是Demo中有个参数是String的构造方法
删除操作
hql="delete from Demo where name='lisi'"
Query query=session.createQuery(hql);
query.executeUpdate();//需要使用Update
trx.commit();(commit中包括一个session.flush())
当数据行数很多的时候
int num=query.executeUpdate();
if(num%25==0)
session.flush();
意思是每25行进行一次操作
如何写sql语句中的count(*)
String hql ="select count(a.id) from Room"
Query query=session.createQuery(hql);
Object o=query.uniqueResult();取出的结果应该是一个long的数值
Integer num=(Long)o;
System.out.println(num.longValue());
实现连接查询(Test30)
String hql ="from Room a left join a.stuSet b where a.id=1"(Room和学生的集合想关联)
这时候检索出来的是数组,list中每一个都是一个数组0是Room,而1是Student,有多少个学生就会有多少条记录
for(int i=0;i<list.size();i++)
{
Object[] vv=(Object[])list.get(i);
Room room=(Room) vv[0];
Student stu=(Student) vv[1];
}
加入关键字fetch(Test31)迫切左外连接
from Room a left join fetch a.stuSet b where a.id=1
这时就直接取出一个Room对象,在Room的stu集合中是有数据的
这个fetch会覆盖掉配置中的lazy属性
填充数据,类似preparestatement
方法1.“from User user where user.name=? And user.age=?”
Query query=session.createQuery
方法2...........................
总结
criteria适合对一个对象进行查血 只能进行检索 动态的实现条件查询
作业:建立以学生的表(超多属性)复杂查询的分页语句
query
select update delete
实体查询 from 属性检索 select
left outer join
left outer join fetch
lazy加载,只要不适用就不进行加载(根据配置文件的策略)
有时要覆盖配置文件的策略-------左连接的引入《》
两个检索语句同时写代表and关系
sql1 and sql2 、
Expression.eq 等于
Expression.alleq
Expression.gt 大于
Expression.in 需要一个集合add(Expression.in())
Set set =new TreeSet();
set.add(new Integer(3));
set.add(new Integer(2));
in的用法
crieria.add(Expression.in("id",set));查询id在2和3之间的数据,or
第二种写法
crieria.add(Expression.or(Expression.eq("id",new Integer(1)),Expression.eq("id",new Integer(1))))
and操作
crieria.add(Expression.add(lhs,rhs))
模糊操作
crieria.add(Expression.like("name","%s%"))
Hibername 的分页技术
crieria.setFirstResult(2);
crieria.setMaxResult(2);
List list =crieria.list();
list 中就是第二页的list集合
Criteria只能对一个对象进行查询(当查询条件比较动态的时候) 所以引入query
HQL语句查询
hql的语句有Hibernate来完成,查询的也是对象
可以把关系的表在内存中模拟成为封装好的面向对象的数据库,所以直接可以看过查询对象
实体查询
String hql="from Demo a where a.id=1";//类名字和属性名字如Demo需要区分大小写,而关键字from不区分大小写
Query query=session.createQuery(hql);
属性查询(需要select)
如果只想取出属性中的一部分就需要用到select了,select user.name from User user。
String hql="select n.name,n.id from Demo n ";
Query query=session.createQuery(hql);
List list=query.list;
for(int i=0;i<list.length;i++)
Objext[] vv=(Object[])list.get(i);
System.out.println((String)vv[0]);
System.out.println((Integer)vv[1]);
String hql="select new Demo(n.name) from Demo n ";前提是Demo中有个参数是String的构造方法
删除操作
hql="delete from Demo where name='lisi'"
Query query=session.createQuery(hql);
query.executeUpdate();//需要使用Update
trx.commit();(commit中包括一个session.flush())
当数据行数很多的时候
int num=query.executeUpdate();
if(num%25==0)
session.flush();
意思是每25行进行一次操作
如何写sql语句中的count(*)
String hql ="select count(a.id) from Room"
Query query=session.createQuery(hql);
Object o=query.uniqueResult();取出的结果应该是一个long的数值
Integer num=(Long)o;
System.out.println(num.longValue());
实现连接查询(Test30)
String hql ="from Room a left join a.stuSet b where a.id=1"(Room和学生的集合想关联)
这时候检索出来的是数组,list中每一个都是一个数组0是Room,而1是Student,有多少个学生就会有多少条记录
for(int i=0;i<list.size();i++)
{
Object[] vv=(Object[])list.get(i);
Room room=(Room) vv[0];
Student stu=(Student) vv[1];
}
加入关键字fetch(Test31)迫切左外连接
from Room a left join fetch a.stuSet b where a.id=1
这时就直接取出一个Room对象,在Room的stu集合中是有数据的
这个fetch会覆盖掉配置中的lazy属性
填充数据,类似preparestatement
方法1.“from User user where user.name=? And user.age=?”
Query query=session.createQuery
方法2...........................
总结
criteria适合对一个对象进行查血 只能进行检索 动态的实现条件查询
作业:建立以学生的表(超多属性)复杂查询的分页语句
query
select update delete
实体查询 from 属性检索 select
left outer join
left outer join fetch
相关文章推荐
- Hibernate条件查询(Criteria Query)
- Hibernate 之 Criteria 、 Query 查询
- hibernate的多条件查询——Criteria Query的应用
- (详细)Hibernate查询技术(Query、Session、Criteria),Hibernate的三种状态,Hibernate集合struts2实现登录功能(二)
- (详细)Hibernate查询技术(Query、Session、Criteria),Hibernate的三种状态,Hibernate集合struts2实现登录功能(二)
- hibernate简单事例,注意事项,保存,更新,删除,session,Query,Criteria查询_Hql与Criteria查询的补充知识
- Hibernate条件查询(Criteria Query)
- Hibernate的 SessionFactory,Configuration,Query ,Criteria接口简介,及Query的查询方法
- hibernate中的Query查询和criteria查询的区别
- Hibernate框架第二天(一级缓存、Query和Criteria查询接口)
- Hibernate条件查询(Criteria Query)
- 第十一章 Hibernate的查询 Query by Criteria(QBC)
- Hibernate动态条件查询(Criteria Query)
- 项目中Hibernate中Criteria和Query查询和模式引用
- Hibernate动态条件查询(Criteria Query)
- Criteria Query—Hibernate之面向对象查询
- 【转】Hibernate动态条件查询(Criteria Query)
- [转]Hibernate条件查询(Criteria Query)
- Hibernate和Spring整合中数据查询hql与Criteria Query
- hibernate高级查询之 HQL(Hibernate Query Language)和QBC(Query By Criteria)的分析与研究