一、先介绍几个名词:
Criteria:在线查询容器
DetachedCriteria:离线查询容器
Example:作为查询容器德参数,创建查询对象的模版
Restrictions:作为查询容器的参数,设置封装限制条件、查询条件的模版,返回类型为Criterion
Order:作为查询容器的参数,用于排序
Projections:作为查询容器的参数,用于统计,对应数据库中的聚会函数
二、QBC、QBE查询方式介绍:
1、QBE方式的在线查询:QBE 查询的关键就是样本对象的创建,样本对象中的所有非空属性均将作为查询条件
Session session = HibernateSessionFactory.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
Criteria criteria = session.createCriteria(Student.class);//创建一个查询容器
Student stu = new Student();
stu.setName("Lily");
Example example = Example.create(stu);//创建一个查询对象模版,模版中封装查询条件,stu解析的形式为key/value,参数可以是一个Map
criteria.add(example);
List list = criteria.list();
transaction.commit();
HibernateSessionFactory.closeSession();
2、QBE方式的离线查询:
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);//获得离线查询器
Student stu = new Student();
stu.setName("Lily");
Example e=Example.create(entity);//创建一个查询对象模版,模版中封装查询对象
dc.add(e);
Session session = HibernateSessionFactory.getSessionFactory().openSession();
Transaction ts = session.beginTransaction();//获得当前session,并开启事务
Criteria criteria=dc.getExecutableCriteria(session);//session作为参数,通过离线查询器获得在线查询器
List list = criteria.list();
transaction.commit();
HibernateSessionFactory.closeSession();
对QBE的Example的一点使用介绍:
example.excludeNone(); 排除对属性值为null的过滤
example.ignoreCase(); 对String类型属性的过滤不区分大小写
example.enableLike(MatchMode.ANYWHERE); 对String类型属性采用完全模糊过滤查询
example.excludeZeroes(); 排除对属性值为0的过滤
example.excludeProperty("entityName"); 排除指定的属性名
3、QBC方式的在线查询:
Session session = HibernateSessionFactory.getSessionFactory().openSession();
Transaction ts =