疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Hibernate框架之Criteria 详解


 

   

  有人问我:掌握一种查询语句不就可以吗,为什么还要学Criteria 查询?我回答道:用到特定于数据库的SQL 语句,程序本身会依赖于特定的数据库,不了解SQL 语句,恐怕对使用HQL带来困难。Hibernate提供的Criteria查询帮助我们解决了这种问题。

  下面介绍一下Criteria查询。

  1、Criteria 查询采用面向对象方式封装查询条件,又称为对象查询

  2、对SQL 语句进行封装

  3、采用对象的方式来组合各种查询条件

  4、由Hibernate 自动产生SQL 查询语句

  5、Criteria由Hibernate Session进行创建

  Criteria查询表达式:

  复制代码

  SessionFactory sessionFactory = new Configuration().configure()

  .buildSessionFactory();

  Session session = sessionFactory.openSession();

  Criteria criteria = session.createCriteria(User.class);//创建Criteria对象

  List result = criteria.list();使用Criteria 的list()方法获得数据,list()方法返回List 实例

  Iterator it = result.iterator();

  while (it.hasNext()) {

  User user = (User) it.next();

  System.out.println("用户名:" + user.getName());

  }

  session.close();

  sessionFactory.close();

  复制代码

  Criteria查询排序 :

  Criteria 查询不仅能组合出SQL中where子句的功能,还可以组合出排序查询功能

  使用org.hibernate.criterion.Order对结果进行排序

  排序的方法为:

  1、asc()

  2、desc()

  Criteria查询排序 语法:

  复制代码

  SessionFactory sessionFactory = new Configuration().configure()

  .buildSessionFactory();

  Session session = sessionFactory.openSession();

  Criteria criteria = session.createCriteria(House.class);//创建Criteria对象

  //加入Order 条件

  criteria.addOrder(Order.desc("price"));//以价格降序的方式排列

  List result = criteria.list();

  Iterator it = result.iterator();

  while (it.hasNext()) {

  House house = (House) it.next();

  System.out.println("标题:" + house.getTitle() + " 价格"

  + house.getPrice());

  }

  session.close();

  sessionFactory.close();

  复制代码

  Criteria查询实现分页 :

  复制代码

  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

  Session session = sessionFactory.openSession();

  Criteria criteria = session.createCriteria(House.class);//创建Criteria对象

  criteria.setFirstResult(3);//设定查询返回结果的第一行数据的位置

  criteria.setMaxResults(2);//限定查询返回数据的行数

  List results = criteria.list();

  Iterator it = results.iterator();

  while(it.hasNext()){

  House h = (House)it.next();

  System.out.println("标题:"+h.getTitle()+ " 价格:"+h.getPrice());

  }

  session.close();

  sessionFactory.close();

  复制代码