关于Hibernate的查询的总结

最近在做SSH项目,用到了Hibernate的查询方式,自己总结了一下

1.HQL查询方式

   灵活直观,和SQL查询相差不大,唯一不同的就是把表名换成了类或者对象。其它的,包括一些查询函数(count(),sum()等)、查询条件的设定等,全都跟SQL语法一样。

例子:Session session = SessionFactory.getCurrentSession();

           User user = null;

           Transaction ts = session.beginTransaction();

           try{

                  Query query = session.createQuery("from User as u where name = 'lee'");

                  user = (User)query.list().get(0);

                  session.commit();

             }catch(){

                  ts.rollBack();   

            }

2.QBC的查询方式(Query By Criteria)

 面向对象的方式,重点有三个对象Restrictions,Order,Projections,一般步骤

使用Session实例的createCriteria()方法创建Criteria对象,使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组。使用Criteria对象的list()方法进行查询并返回结果

1)Restrictions类的常用方法:

方法名称                         描述

Restrictions.eq                 等于

Restrictions.allEq             使用Map,Key/Valu进行多个等于的比对

Restrictions.gt                  大于

Restrictions.ge                 大于等于

Restrictions.lt                   小于

Restrictions.le                 小于等于

Restrictions.between       对应SQL的between

Restrictions.like               对应SQL的like

Restrictions.in                  对应SQL的in

2)Order类的常用方法:

方法名称            描述

Order.asc           升序

Order.desc         降序

3)Projections类的常用方法

方法名称                                  描述

Projections.avg                        求平均值

Projections.count                     统计某属性的数量

Projections.countDistinct        统计某属性不同值的数量

Projections.groupProperty      指定某个属性为分组属性

Projections.max                      求最大值

Projections.min                        求最小值

Projections.projectionList        创建一个ProjectionList对象

Projections.rowCount              查询结果集中的记录条数

Projections.sum                      求某属性的合计

例子:

      Session session = SessionFactory.getCurrentSession();

      User user = null;

      Transaction ts = session.beginTransaction();

      try{

          Criteria criteria = session.createCtiteria(User.class);

          criteria.add(Restriction.eq("name","lee"));

          user = (User)criteria.list().get(0);

          session.commit();

        }catch(){

               ts.rollBack();

        }

3.离线查询

离线查询就是建立一个DetachedCriteria对象,将查询的条件等指定好

// 使用离线条件查询.
DetachedCriteria criteria = DetachedCriteria.forClass(Product.class);
// 查询热门的商品,条件就是is_host = 1
criteria.add(Restrictions.eq("is_hot", 1));
// 倒序排序输出:
criteria.addOrder(Order.desc("pdate"));
// 执行查询:
List list = this.getHibernateTemplate().findByCriteria(criteria, 0, 10);

4.分页查询

分页查询主要指定两个参数,从第几条数据开始,取多少条数据。可以通过调用Query或者Criteria对象的setFirstResult()和setMaxResults()方法分别进行设定。

例子:Session session =SessionFactory.getCurrentSession();

           List userList = null;

           Transaction ts = session.beginTransaction();

            try {

                   Criteria criteria =session.createCriteria(User.class);

                   criteria.setFirstResult(0);//从第一个数据开始

                   criteria.setMaxResults(10);//取10条记录

                   userList = (List)criterial.list();  

                   session.commit();

            } catch (HibernateException ex) {

                 ts.rollBack();

                 ex.printStackTrace();

           }

或者 List list = this.getHibernateTemplate().findByCriteria(criteria, 0, 10);


           

   

你可能感兴趣的:(心得)