Java代码: List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'").list(); * 可以采用 ?来传递参数(索引从0开始)
Java代码: List students = session.createQuery("select s.id, s.name from Student s where s.name like ?").setParameter(0, "%1%").list(); //可以使用?方式传递参数 //参数的索引从0开始 //传递的参数值,不用单引号引起来 //注意方法链编程 * 可以采用 :参数名 来传递参数 Java代码: List students = session.createQuery ("select s.id, s.name from Student s where s.name like :myname").setParameter("myname", "%1%").list(); * 如果传递多个参数,可以采用setParamterList方法 Java代码: List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)").setParameterList("myids", new Object[]{1, 2, 3, 4, 5}).list(); * 在HQL中可以使用数据库的函数,如:date_format Java代码: List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?").setParameter(0, "2008-02").list(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //查询2008-01-10到2008-02-15创建的学生 List students = session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?") . .setParameter(0, sdf.parse("2008-01-10 00:00:00")) . setParameter(1, sdf.parse("2008-02-15 23:59:59")) .list(); 4、Hibernate HQL查询:直接使用sql进行查询 Java代码: List students = session.createSQLQuery("select * from t_student").list();
不会返回对象,而是所有属性!
5、Hibernate HQL查询:分页查询 * setFirstResult(),从0开始 * setMaxResults,每页显示多少条数据 Java代码: List students = session.createQuery("from Student") .setFirstResult(1) .setMaxResults(2) .list(); 6、Hibernate HQL查询:对象导航查询,在HQL中采用 . 进行导航 7、Hibernate HQL查询:连接查询 * 内连 Sql代码: SELECT s.name, c.name FROM Student s (inner) join s.classes c * 外连接(左连接/右连接)
Sql代码: SELECT s.name, c.name FROM Student s left join s.classes c 8、Hibernate HQL查询:统计查询 Java代码: List students =session.createQuery("select c.name, count(s) from Student s join s.classes c " +"group by c.name order by c.name").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + ", " + obj[1]); } 9、DML风格的操作(尽量少用,因为和缓存不同步) Java代码: session.createQuery ("update Student s set s.name=? where s.id< ?") .setParameter(0, "李四") .setParameter(1, 5) .executeUpdate(); 应当尽量少用,因为和缓存不同步,也就是说,假如在执行上面的语句之前,已经把student封装成一个list曾经拿了出来,再执行上面的语句对 student中的表进行数据更新,然后再list Student表,则此时的list是从缓存中取的数据,而不是从表中找到的数据,也就是 说,list拿到的是update前的数据,所以造成了这种不同步,所以这种风格尽量少用。 从这个方面也可以看得出Hibernate并不适用于聚集性,统计,大量批量的更新,删除等操作
Java代码: List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'").list(); * 可以采用 ?来传递参数(索引从0开始)
Java代码: List students = session.createQuery("select s.id, s.name from Student s where s.name like ?").setParameter(0, "%1%").list(); //可以使用?方式传递参数 //参数的索引从0开始 //传递的参数值,不用单引号引起来 //注意方法链编程 * 可以采用 :参数名 来传递参数 Java代码: List students = session.createQuery ("select s.id, s.name from Student s where s.name like :myname").setParameter("myname", "%1%").list(); * 如果传递多个参数,可以采用setParamterList方法 Java代码: List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)").setParameterList("myids", new Object[]{1, 2, 3, 4, 5}).list(); * 在HQL中可以使用数据库的函数,如:date_format Java代码: List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?").setParameter(0, "2008-02").list(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //查询2008-01-10到2008-02-15创建的学生 List students = session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?") . .setParameter(0, sdf.parse("2008-01-10 00:00:00")) . setParameter(1, sdf.parse("2008-02-15 23:59:59")) .list(); 4、Hibernate HQL查询:直接使用sql进行查询 Java代码: List students = session.createSQLQuery("select * from t_student").list();
不会返回对象,而是所有属性,
5、Hibernate HQL查询:分页查询 * setFirstResult(),从0开始 * setMaxResults,每页显示多少条数据 Java代码: List students = session.createQuery("from Student") .setFirstResult(1) .setMaxResults(2) .list(); 6、Hibernate HQL查询:对象导航查询,在HQL中采用 . 进行导航 7、Hibernate HQL查询:连接查询 * 内连 Sql代码: SELECT s.name, c.name FROM Student s (inner) join s.classes c * 外连接(左连接/右连接)
Sql代码: SELECT s.name, c.name FROM Student s left join s.classes c 8、Hibernate HQL查询:统计查询 Java代码: List students =session.createQuery("select c.name, count(s) from Student s join s.classes c " +"group by c.name order by c.name").list(); for (Iterator iter=students.iterator(); iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + ", " + obj[1]); } 9、DML风格的操作(尽量少用,因为和缓存不同步) Java代码: session.createQuery ("update Student s set s.name=? where s.id< ?") .setParameter(0, "李四") .setParameter(1, 5) .executeUpdate(); 应当尽量少用,因为和缓存不同步,也就是说,假如在执行上面的语句之前,已经把student封装成一个list曾经拿了出来,再执行上面的语句对 student中的表进行数据更新,然后再list Student表,则此时的list是从缓存中取的数据,而不是从表中找到的数据,也就是 说,list拿到的是update前的数据,所以造成了这种不同步,所以这种风格尽量少用。 从这个方面也可以看得出Hibernate并不适用于聚集性,统计,大量批量的更新,删除等操作。