Hibernate查询
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开始。 List<Person> personList = 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<Person> 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<Object[]> persons = query.list(); for(Object[] objs : persons){ System.out.println("id="+objs[0]+"----name"+objs[1]); } } @Test public void testQuery2(){ String hql = "select p.name from Person p"; Query query = session.createQuery(hql); //如果查询返回的属性是单属性,那么接收的时候list中的数据类型就是属性的数据类型 List<String> personNames = query.list(); for(String name : personNames){ System.out.println(name); } } @Test public void testQuery(){ //sql: select * from t_person; //Hql语句是基于 面向对象 的方式进行操作的 //所以在写的时候 都是 对象 和 属性 String hql = "from Person"; Query query = session.createQuery(hql); /*List list = query.list(); for(Object o : list){ Person p = (Person)o; System.out.println(p); }*/ List<Person> personList = query.list(); for(Person p : personList){ System.out.println(p); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。