DetachedCriteria dc = DetachedCriteria.forClass(Emp.class);
addJob(dc, job);
addSal(dc, salLow, salHeight);
addDeptno(dc, deptno);
List emps = empDAO.findByCriteria(dc);
request.setAttribute("empList", emps);
-----------------------------------------------------------------------
private void addJob(DetachedCriteria dc, String job) {
if(job != null && !job.equals("")) {
dc.add(Restrictions.eq("job", job));
}
}
private void addSal(DetachedCriteria dc, String sallow, String salheight) {
if(sallow != null && !sallow.equals("") && salheight != null && !salheight.equals("")){
dc.add(Restrictions.ge("sal", Double.parseDouble(sallow)));
dc.add(Restrictions.le("sal", Double.parseDouble(salheight)));
}
}
private void addDeptno(DetachedCriteria dc, String deptno) {
if(deptno != null && !deptno.equals("")) {
dc = dc.createCriteria("dept");
dc.add(Restrictions.eq("deptno", Long.parseLong(deptno)));
}
}
---------------------------------------
public List findByCriteria(DetachedCriteria dc){
Session session = HibernateUtil.openSession();
Criteria c = dc.getExecutableCriteria(session);
return c.list();
}
--------------------
Hibernate二级缓存技术
1,首先在hibernate.cfg.xml中配置
<!-- JDBC批量更新或处理时 设置的批量处理的缓存大小 一级缓存基于session的-->
<property name="jdbc.batch_size">30</property>
<property name="jdbc.fetch_size">50</property>
<property name="cache.use_query_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<mapping resource="cn/veryedu/entity/Dept.hbm.xml" />
<mapping resource="cn/veryedu/entity/Emp.hbm.xml" />
<class-cache class="cn.veryedu.entity.Emp" usage="read-only"/>
<class-cache class="cn.veryedu.entity.Dept" usage="read-only"/>
2,在到每个查询语句中设置
public List findAllDname(){
Session session = HibernateUtil.openSession();
Query query = session.createQuery("select distinct dname from Dept");
query.setCacheable(true);//缓存设置
List result = query.list();
return result;
}