HQL和Criteria都是一种面向对象的数据库查询,使用HQL和Criteria更加符合面向对象的设计思想。
这里先举出两个小实例,分别使用HQL和Criteria进行查询。
HQL(Hibernate Query Language)
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的;HQL查询的是对象而不是表,并且支持多态;HQL主要通过Query操作
public static void query(String name){ Session session=null; try{ session=HibernateUtil.getSession(); String hql="from User as user where user.name=?"; Query query=session.createQuery(hql); query.setString(0,name); List<User> list=query.list();//这里的list 方法和JDBC中的executeQuery()方法相同 for(User user:list){ System.out.println(user.getId()); } }catch(Exception e){ e.printStackTrace(); }finally{ HibernateUtil.sessionClose(session); } }
Query中方法分析:
方法名 |
描述 |
list() |
与JDBC中的executeQuery()方法的作用相同,返回一个List的结果集 |
uniqueResult() |
当确定查找的结果只有一个的时候,使用该种方法更好。返回的是一个对象。 |
使用Criteria方式进行查询。
Criteria是一种更加面向对象的查询,通过对对象的操作来限制条件,而这些限制条件的操作都通过Restrictions类来完成。
/** * 根据用户姓名使用Criteria返回一条记录 * @param name * @return */ public static User cri(String name){ Session session=null; User u=null; try { session=HibernateUtil.getSession(); //Criteria是一种面向对象的查询 Criteria c=session.createCriteria(User.class); //User类中name属性必须等于传递进来的参数 c.add(Restrictions.eq("name",name)); //c.add(Restrictions.lt("birthday",new Date())); u=(User)c.uniqueResult(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(session!=null){ session.close(); } } return u; }
<!--EndFragment--><!--EndFragment--><!--EndFragment-->