<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html#t1" target="_blank">写在前面</a>
<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html#t2" target="_blank">文档与系列文章</a>
<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html#t3" target="_blank">条件查询</a>
<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html#t4" target="_blank">一个例子</a>
<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html#t5" target="_blank">总结</a>
上篇文章介绍了hql查询,我个人觉得使用orm框架就是为了让少些sql,提高开发效率,而再使用hql就好像还是使用sql,就觉得有点又回到使用sql的年代。但是完全不用hql也不是绝对的,hql更接近原生态的sql,对于一些比较复杂的查询,hql的作用就体现出来了。作为使用面向对象语言的程序员,有时更愿意采用面向对象的方式去思考问题,去实现查询,这就是本篇文章要学习的条件查询(criteria query)。
<a href="http://www.cnblogs.com/wolf-sun/p/3694592.html">[nhibernate]体系结构</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3694901.html">[nhibernate]isessionfactory配置</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3704012.html">[nhibernate]持久化类(persistent classes)</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3705229.html">[nhibernate]o/r mapping基础</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3720259.html">[nhibernate]关联映射</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3721528.html">[nhibernate]parent/child</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3724052.html">[nhibernate]缓存(nhibernate.caches)</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3734249.html">[nhibernate]nhibernate.tool.hbm2net</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3734313.html">[nhibernate]nullables</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3956802.html">[nhibernate]nhibernate如何映射sqlserver中image字段</a>
criteria query通过面向对象化的设计,将数据查询条件封装为一个对象。再直白点讲就是,criteria query可以看作是传统sql的对象化表示。
在nhibernate中提供了条件查询的criteria api,在程序中可以通过isession创建icriteria实例,并在icriteria对象上设置一个或者多个表达式,然后从数据库
中查询获得对象的列表。
创建icriteria对象
代码描述:通过isession创建一个icriteria实例,然后返回最多50条客户信息的集合。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
使用条件查询icriteria,可以通过restrictions添加限制条件来限制结果集。
criteria query常用的查询限制方法
方法
描述
restrictions.eq()
equal,=
restrictions.alleq()
使用key/value进行多个等于的对比,等价于使用多个restrictions.eq()的效果
restrictions.gt()
greater-than, >
restrictions.lt()
less-than, <
restrictions.le()
less-equal, <=
restrictions.between()
在什么之间,类似sql中的between
restrictions.like()
类似sql中的like,模糊查询
restrictions.in()
在什么之内,类似于sql中的in
restrictions.and()
并且
restrictions.or()
或者
restrictions.isnull()
是否为null
restrictions.isnotnull()
是否不为null,与上相反。
order.asc()
根据传入的字段进行升序排序。
order.desc()
根据传入的字段进行降序排序。
matchmode.exact
字符串精确匹配,相当于“like 'value'”
matchmode.anywhere
字符串在中间位置,相当于“like '%value%'”
matchmode.start(end)
字符串在最前面的位置,相当于“like 'value%'”("like '%value'")
首先引入命名空间
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
看一下生成的sql是什么?
同样在criteria 查询中使用fetchmode来实现连接限制,这里就不再举例了,感兴趣的可以自己试一试。
说实话,在项目中从没发现使用条件查询的地方,一些查询的方法都是千篇一律的,时间久了,绝对会腻了。如过你在项目中采用了该种方式,是不是瞬间觉得高大上了?我还是引用自己在前面说过的那句话,实现一个业务有a,b,c三种方式,而a是你经常用的,闭着眼都能把每个单词背出来了,你还在用,为啥不尝试一下b和c两种方式。
通过本篇的学习,我们了解了条件查询,在限制结果集方面做的还是非常好的,提供了常用的限制方法,更接近咱们的思维方式,何不在项目中使用起来,也让咱们的代码充满灵气,而不是千篇一律,死气沉沉的代码。
博客地址:
<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>
博客版权:
本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。
转载:http://www.cnblogs.com/wolf-sun/p/4046672.html