Hibernate查询
在Hibernate中提供了丰富的查询下面讲解一下其中的一种HQL
如果我们不知道所要寻找的对象的持久化标识(id),那么就无法通过load()和get()方法来获取持久化对象,就需要使用查询。
HQL的语法很像SQL的语法但是HQL是一种面向对象的查询语言,然而SQL的操作对象是数据表和列等数据对象,而HQL操作的对象是类,实例,属性。
HQL基础
1:HQL查询依赖于Query类,每一个Query实例对应一个查询的对象,使用HQL的步骤是:
1:获取Session对象
2:编写HQL语句
3:以HQL语句作为参数,调用Session的createQuery方法创建查询的对象。
4:如果HQL语句包含参数,调用Query的setXXX()方法为参数赋值。
5:调用Query对象的list等方法遍历查询结果。
实例代码:
/** * 分页 */ @Test public void testQuery7(){ String hql = "from Person p"; Query query = session.createQuery(hql); query.setMaxResults(10);//设置分页返回的数据条数 query.setFirstResult(0);//表示才什么位置开始获取数据,注意会忽略0,从1开始。 ListpersonList = query.list(); for(Person p :personList){ System.out.println(p); } } @Test public void testQuery6(){ String hql = "from Person p"; Query query = session.createQuery(hql); //如果数据只要唯一的一条,可以使用uniqueResult()方法进行操作 //但是如果有超过 1 条数据,将报异常 Person person =(Person)query.uniqueResult(); System.out.println(person); } @Test public void testQuery5(){ String hql = "from Person p"; Query query = session.createQuery(hql); //获得查询结果集中的第一条记录(其实就是List.get(0)操作) Person person =(Person)query.list().get(0); System.out.println(person); } @Test public void testQuery4(){ //当查询需要返回的是一个对象时候可以在 hql中使用new Person(写需要获得的属性name) //但是需要注意:在Person类中一定要有一个与hql 中写的new Person(Type...) 对应的构造器 String hql = "select new Person(p.id, p.name) from Person p"; Query query = session.createQuery(hql); List personList = query.list(); for(Person p : personList){ System.out.println(p); } } @Test public void testQuery3(){ String hql = "select p.id, p.name from Person p"; Query query = session.createQuery(hql); //如果查询返回的属性是多个属性,那么接收的时候list中的数据类型就是Object[]数据类型 //obj[0] = p.id //obj[1] = p.name List