Hibernate-DetachedCriteria离线查询

会话是在数据访问dao层运用的!
会话是跟数据库打交道的。Criteria是放在dao层做的。

数据访问层无非就是增删改查,要做的单纯些。

同样的增加,你不同的类,你又要写不同的新方法,这样就好累了- -
比如说部门写一个,账单写一个,员工写一个。。。
增删改查的方法都是一样的,只是类型不一样
可以直接传Object过来统一save。

查询的个性,员工 部门可能会不一样,但里面也有很多相同的方法。
任何动态查询啥的,最后都是执行一条查询list();

当然你要是把所有的动态查询拼接放到dao,那肯定就只能一个部门一个方法啦~~合不起来啊 = =

而业务层就应该考虑这些业务的事情啊。

因为Criteria需要会话。
可以把DetachedCriteria作为方法参数传递来构造查询条件
有大量重复的方法,一次性实现好。
做方法通用化!把业务条件排斥掉!
list()它都是一样的查询啊。

    // 超级简单的通用dao
    @SuppressWarnings("unchecked")
    public List findEmps(DetachedCriteria c) {

        return c.getExecutableCriteria(HibernateSessionFactory.getSession()).list();

        //不管是谁,我执行一个就OK啦~~这样就很通用了。
        //可以在没有session去构建离线查询
        //创建不要求session,执行再绑定session啦~

    }

。。。。突然我写注释很智障啊!= =

biz

public List<Emp> findEmps(Map<String, Object> args) {
        DetachedCriteria c=DetachedCriteria.forClass(Emp.class);
        //这里就可以放动态查询的那些条件啦~

        return dao.findEmps(c);
    }

这里写图片描述
除了以前讲过的Restrictions来添加条件,现在又整了一个Property.forName来添加条件。。。

离线查询的结果 可以做为子查询啊- -
添加条件必须用Property
Hibernate-DetachedCriteria离线查询_第1张图片

最后总结Criteria
Hibernate-DetachedCriteria离线查询_第2张图片

你可能感兴趣的:(Hibernate)