Hibernate的集中查询方式 : hql查询,QBC查询和QBE查询
来源:互联网 发布:联通网络破解助手 编辑:程序博客网 时间:2024/05/29 16:31
转载:http://blog.csdn.net/iijse/article/details/6161143
通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询:
1、QBE(Qurey By Example)检索方式
QBE是最简单的,但是功能也是最弱的,QBE的功能不是特别强大,仅在某些场合下有用。一个典型的使用场合就是在查询窗口中让用户输入一系列的 查询条件,然后返回匹配的对象。QBE只支持=和like比较运算符,无法不大区间值,及其或的匹配。在这种情况下,还是采用HQL检索方式或QBC检索 方式。
示例:
1: Session session = SessionFactory.getCurrentSession();
2: User user = null;
3: Transaction ts = session.beginTransaction();
4: try {
5: Query query = session.createQuery("from User as u where name='ijse'");
6: user= (User) query.list().get(0);
7: session.commit();
8: } catch (HibernateException ex) {
9: ts.rollBack();
10: ex.printStackTrace();
11: }
12: System.out.println(user.getName());
QBC(Query By Criteria) 查询方式
这种方式比较面向对象方式,重点是有三个描述条件的对象:Restrictions,Order,Projections。使用QBC查询,一般需要以下三个步骤:
- 使用Session实例 的createCriteria()方法创建Criteria对象
- 使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组。
- 使用Criteria对象的list()方法进行查询并返回结果
Restrictions类的常用方法:
方法名称
描述
Restrictions.eq等于Restrictions.allEq使用Map,Key/Valu进行多个等于的比对Restrictions.gt大于Restrictions.ge大于等于Restrictions.lt小于Restrictions.le小于等于Restrictions.between对应SQL的betweenRestrictions.like对应SQL的likeRestrictions.in对应SQL的inRestrictions.andand关系Restrictions.oror关系Restrictions.sqlRestrictionSQL限定查询Order类的常用方法:
方法名称
描述
Order.asc升序Order.desc降序Projections类的常用方法
方法名称
描述
Projections.avg求平均值Projections.count统计某属性的数量Projections.countDistinct统计某属性不同值的数量Projections.groupProperty指定某个属性为分组属性Projections.max求最大值Projections.min求最小值Projections.projectionList创建一个ProjectionList对象Projections.rowCount查询结果集中的记录条数Projections.sum求某属性的合计示例:
1: Session session = SessionFactory.getCurrentSession();
2: User user = null;
3: Transaction ts = session.beginTransaction();
4: try {
5: Criteria criteria = session.createCriteria(User.class);
6: criteria.add(Restrictions.eq("name","ijse"));
7: user= (User) criteria.list().get(0);
8: session.commit();
9: } catch (HibernateException ex) {
10: ts.rollBack();
11: ex.printStackTrace();
12: }
13: System.out.println(user.getName());
QBE(Query By Example)查询方式
将一个对象的非空属性作为查询条件进行查询。
示例:
1: Session session = SessionFactory.getCurrentSession();
2: User user = new User();
3: user.setName("ijse");
4: Transaction ts = session.beginTransaction();
5: try {
6: Criteria criteria = session.createCriteria(User.class);
7: criteria.add(Example.create(user));
8: user= (User) criteria.list().get(0);
9: session.commit();
10: } catch (HibernateException ex) {
11: ts.rollBack();
12: ex.printStackTrace();
13: }
14: System.out.println(user.getName());
离线查询
离线查询就是建立一个DetachedCriteria对象,将查询的条件等指定好,然后在session.beginTransaction()后将这个对象传入。通常这个对象可以在表示层建立,然后传入业务层进行查询。
示例:
1: DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
2: detachedCriteria.add(Restrictions.eq("name","ijse");
3:
4: Session session = SessionFactory.getCurrentSession();
5: User user = new User();
6: Transaction ts = session.beginTransaction();
7: try {
8: Criteria criteria = detachedCriteria.getExecutableCriteria(session);
9: user= (User) criteria.list().get(0);
10: session.commit();
11: } catch (HibernateException ex) {
12: ts.rollBack();
13: ex.printStackTrace();
14: }
15: System.out.println(user.getName());
复合查询
复合查询就是在原有查询的基础上再进行查询,可以调用Criteria对象的createCriteria()方法在这个Criteria对象的基础上再进行查询。
示例:
1: Session session = SessionFactory.getCurrentSession();
2: User user = new
3: User();
4: Transaction ts = session.beginTransaction();
5: try
6: {
7: Criteria criteria1 =
8: session.createCriteria(Room.class);
9: Criteria
10: criteria2 =criterial1.createCriteria("User");
11:
12: criteria2.add(Restrictions.eq("name",new String("ijse"));
13:
14: user= (User) criteria.list().get(0);
15:
16: session.commit();
17: } catch (HibernateException ex) {
18:
19: ts.rollBack();
20:
21: ex.printStackTrace();
22: }
23: System.out.println(user.getName());
分页查询
分页查询主要是要指定两个参数:从第几条数据开始,取多少条数据。可以通过调用Query或者Criteria对象的setFirstResult()和setMaxResults()方法分别进行设定。
示例:
1: Session session = SessionFactory.getCurrentSession();
2: List userList = null;
3: Transaction ts = session.beginTransaction();
4: try {
5: Criteria criteria = session.createCriteria(User.class);
6: criteria.setFirstResult(0);//从第一个数据开始
7: criteria.setMaxResults(10);//取10条记录
8: userList = (List) criterial.list();
9: session.commit();
10: } catch (HibernateException ex) {
11: ts.rollBack();
12: ex.printStackTrace();
13: }
- Hibernate的集中查询方式 : hql查询,QBC查询和QBE查询
- Hibernate的集中查询方式 : hql查询,QBC查询和QBE查询
- Hibernate 查询方式(HQL/QBC/QBE)汇总
- Hibernate 查询方式(HQL/QBC/QBE)汇总
- Hibernate的HQL、QBC、QBE查询总结
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
- Hibernate的几种查询方式 HQL,QBC,QBE,离线查询,复合查询,分页查询
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
- hibernate Criteria QBC,QBE查询
- 【hibernate框架】面向对象的查询语法(QBE和QBC)
- hibernate查询精典例子(HQL QBC QBE)
- Hibernate查询(Query Language,hql,ejbql,nativeql,qbc,qbe)
- Hibernate的QBE查询方式
- 概括Hibernate HQL和QBC查询
- hibernate QBC查询方式
- 使用BorderLayout布局管理器将组件进行布局
- JFinal使用技巧积累
- 伪类与伪元素
- 操作系统学习(2)
- 1130. Infix Expression (25)[dfs-中序遍历]
- Hibernate的集中查询方式 : hql查询,QBC查询和QBE查询
- map/reduce
- 软件漂亮功能背后的秘密
- “fatal error C1859: “Release\XXXX.pch”意外的预编译头错误,只需重新运行编译器就可能修复此问题”的一个解决办法
- 从分布式一致性谈到CAP理论、BASE理论
- 6.4
- 运行容器的最佳实践
- hunnu11461—数组求和问题(前缀和)
- 简单hibernate5.2.10入门配置