随着一点一点的学习.再回过头来看以前的博客.
觉得自己当初多么可笑.
最近越来越懒.好久没有写博客记录学习笔记了.
今天把以前早就打算写的DetachedCriteria 查询做个整理.
认识还不够.有什么不对的地方希望大神指出.
通过网上了解,还有这段时间的使用.只是知道DetachedCriteria 可以用于查询.
至于好在哪.或者是效率高在哪.完全不知道.
只是会用.觉得DetachedCriteria 可以完成的hql也可以完成.
其他不说了.下面是学习中的一些记录:
我常用的有DetachedCriteria 的如下方法:
createAlias(String associationPath, String alias)
目前我只用了这三个方法.
add
首先初始化一个DetachedCriteria对象:
DetachedCriteria dc = DetachedCriteria.forClass(Car.class);
dc.add(Restrictions.eq("carNo", "川A88888"));//查询carNo为"川A88888"的对象
dc.add(Restrictions.like("carName","%奔驰%"));//模糊查询carName为奔驰的对象
dc.add(Restrictions.between("date", date1, date2));//查询日期在date1与date2之间的对象,当然不止可以查询日期
dc.add(Restrictions.isNotNull("driver"));//查询driver不为空的,当然对应的还有isNull,isEmpty等
其他常用方法:
allEq(Map propertyNameValues) | 使用Map完成多个对比(其实个人觉得多做几次eq也是可以的) |
and(Criterion lhs, Criterion rhs) | 同sql语句中的and |
ge(String propertyName, Object value) | >= |
gt(String propertyName, Object value) | > |
in(String propertyName, Collection values) | 同sql中的in |
le(String propertyName, Object value) | <= |
lt(String propertyName, Object value) | < |
or(Criterion lhs, Criterion rhs) | 同sql中的or |
sqlRestriction(String sql) | 使用sql语句查询 |
addOrder(Order order)
排序
dc.addOrder(Order.desc("createdDate"));//根据createDate排序,当然肯定有Order.asc
createAlias
我用于有外键关联的查询
假如Car.class中有一个属性:
public class Car{
private User driver;
getter and setter...
}
User.class:
public class User{
private String name;
getter and setter...
}
做好映射关联后就可以查询Car中driver.name为陈师傅的了
dc.add(Restrictions.like("driver.name","%陈%"));//当然eq,between等其他方法都可以
dc.createAlias("driver", "driver");
查询
Criteria criteria = dc.getExecutableCriteria(getSession());
List<Car> cars = criteria.list();
一次查询就完成了.
有什么不对或者不懂的地方希望大家留言讨论
Zemo手打,转载请标明出处:
http://blog.csdn.net/zemochen/article/details/23962687
参考文档:
DetachedCriteria API文档:http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/criterion/DetachedCriteria.html
Restrictions API文档:http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/criterion/Restrictions.html
以前学习的时候还参考了好多网友的博客,现在已经找不到了.谢谢大家.