DetachedCriteria对象实现离线查询

Criteria对象在运行时与Session对象绑定,所以二者的生命周期想通,即当Session对象失效后,Criteria对象也失效。Criteria生命期短而且不能重复使用。
DetachedCriteria对象可以实现离线查询可以解决Criteria不足

离线查询在web应用在某些功能实现中很有用,如在分层的web应用中有需要实现动态条件查询。


获取数据库中表中字段某一值的全部记录的代码实例:


/*获取数据库中的ClassMenuEntity表中的字段id=pid的全部记录
这属于web工程里Action类的代码段*/
String pid = request.getParameter("pid");
DetachedCriteria dc = DetachedCriteria.forClass(ClazzMenuEntity.class);//创建实例
dc.add(Restrictions.eq("parentMenuEntity.id", pid));
List<ClazzMenuEntity> menuList = clazzMenuDao.findByExample(dc);         

              

/*
这段为DaoImpl中的代码段
getSessionFactory().getCurrentSession()获取当前的session(spring)
*/
public List findByExample(DetachedCriteria dc) {
     return dc.getExecutableCriteria(getSessionFactory().getCurrentSession()).list();
}


未完成。。。待续

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面分别给出使用JDBC和Hibernate实现嵌套查询和嵌套结果的代码示例。 使用JDBC实现嵌套查询和嵌套结果的示例代码: ```java // 嵌套查询示例代码 String sql = "SELECT * FROM table1 WHERE id IN (SELECT id FROM table2 WHERE name = ?)"; PreparedStatement stmt1 = connection.prepareStatement(sql); stmt1.setString(1, "test"); ResultSet rs1 = stmt1.executeQuery(); while (rs1.next()) { // 处理查询结果 } // 嵌套结果示例代码 String sql2 = "SELECT * FROM table1 WHERE id = ?"; PreparedStatement stmt2 = connection.prepareStatement(sql2); stmt2.setInt(1, 1); ResultSet rs2 = stmt2.executeQuery(); while (rs2.next()) { int id = rs2.getInt("id"); String name = rs2.getString("name"); // 使用前一个查询的结果进行嵌套查询 String sql3 = "SELECT * FROM table2 WHERE id = ?"; PreparedStatement stmt3 = connection.prepareStatement(sql3); stmt3.setInt(1, id); ResultSet rs3 = stmt3.executeQuery(); while (rs3.next()) { String desc = rs3.getString("desc"); // 处理查询结果 } } ``` 使用Hibernate实现嵌套查询和嵌套结果的示例代码: ```java // 嵌套查询示例代码 Criteria criteria1 = session.createCriteria(Table1.class); DetachedCriteria subCriteria = DetachedCriteria.forClass(Table2.class) .add(Restrictions.eq("name", "test")) .setProjection(Projections.property("id")); criteria1.add(Property.forName("id").in(subCriteria)); List<Table1> result1 = criteria1.list(); // 嵌套结果示例代码 Criteria criteria2 = session.createCriteria(Table1.class); criteria2.add(Restrictions.eq("id", 1)); List<Table1> result2 = criteria2.list(); for (Table1 table1 : result2) { int id = table1.getId(); String name = table1.getName(); // 使用前一个查询的结果进行嵌套查询 Criteria criteria3 = session.createCriteria(Table2.class); criteria3.add(Restrictions.eq("id", id)); List<Table2> result3 = criteria3.list(); for (Table2 table2 : result3) { String desc = table2.getDesc(); // 处理查询结果 } } ``` 以上代码仅作为示例,实际使用中需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值