5、外置命名查询
* 在映射文件中采用<query>标签来定义hql
* 在程序中采用session.getNamedQuery()方法得到hql查询串
参见:Student.hbm.xml、NameQueryTest.java
6、查询过滤器
* 在映射文件中定义过滤器参数
* 在类的映射中使用这些参数
* 在程序中启用过滤器
参见:Student.hbm.xml、FilterQueryTest.java
7、分页查询【重要】
* setFirstResult(),从0开始
* setMaxResults,每页显示多少条数据
参见:PageQueryTest.java
8、对象导航查询,在hql中采用 . 进行导航【重要】
参见:ObjectNavQueryTest.java
9、连接查询【重要】
* 内连
* 外连接(左连接/右连接)
参见:JoinQueryTest.java
10、统计查询【重要】
参见:StatQueryTest.java
11、DML风格的操作(尽量少用,因为和缓存不同步)
参见:DMLQueryTest.java
/**
* 外置命名查询
* @author Administrator
*
*/
<query name="searchStudents">
<![CDATA[
SELECT s FROM Student s where s.id<?
]]>
</query>放在任何一个映射文件
List students = session.getNamedQuery("searchStudents")
.setParameter(0, 10)
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
/**
* 查询过滤器
* @author Administrator
*
*/
<class name="com.bjsxt.hibernate.Student" table="t_student">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="createTime"/>
<many-to-one name="classes" column="classesid"/>
<filter name="filtertest" condition="id < :myid"/>
</class>
<filter-def name="filtertest">
<filter-param name="myid" type="integer"/>
</filter-def>
session.enableFilter("filtertest")
.setParameter("myid", 10);
List students = session.createQuery("from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
/**
* 分页查询
* @author Administrator
*
*/
List students = session.createQuery("from Student")
.setFirstResult(1)//从哪里开始
.setMaxResults(2)//每页显示多少条数据
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
/**
* 对象导航查询
* @author Administrator
*
*/
List students = session.createQuery("select s.name from Student s where s.classes.name like '%1%'").list();
/**
* 连接查询
* @author Administrator
*
*/
//List students = session.createQuery("select c.name, s.name from Student s join s.classes c").list();
List students = session.createQuery("select c.name, s.name from Student s inner join s.classes c").list();
List students = session.createQuery("select c.name, s.name from Classes c left join c.students s").list();
/**
* 统计查询
* @author Administrator
*
*/
// List students =session.createQuery("select count(*) from Student").list();
// Long count = (Long)students.get(0);
// System.out.println(count);
Long count = (Long)session.createQuery("select count(*) from Student").uniqueResult();
System.out.println(count);
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();
/**
* DML风格的操作
* @author Administrator
*
*/
session.createQuery("update Student s set s.name=? where s.id < ?")
.setParameter(0, "李四")
.setParameter(1, 5)
.executeUpdate();
浙公网安备 33010602011771号