Hibernate的查询方式知多少 二
来源:互联网 发布:图象扭曲算法 编辑:程序博客网 时间:2024/04/30 10:16
继上篇博客,我们继续说Hibernate的后边几个查询方式。
四、DetachedCriteria
这种查询叫做动态分离查询。即,业务和DAO实现分离的一种方式,查询条件是需求,千变万化,但是实现很简单,绑定条件后,只要使用一个list方法就发送了请求,所以我们可以把查询条件从实现的代码中分离出来。业务逻辑和访问数据库的实现分离,需要的时候,再结合,体现的是松耦合的思想。
看代码示例:
// 底层实现static List accessDB(DetachedCriteria dc) { Session s = HibernateUtil.getSession(); Criteria c = dc.getExecutableCriteria(s); List rs = c.list(); s.close(); return rs; } // 业务DetachedCriteria dc = DetachedCriteria.forClass(User.class); int id = 1; if (id != 0) dc.add(Restrictions.eq("id", id)); Date age = new Date(); if (age != null) dc.add(Restrictions.le("birthday", age)); List users = accessDB(dc); System.out.println("离线查询返回结果:" + users);
上例中,第一个方法是数据库访问的代码,第二个方法是 业务查询的定义,在其他中,将DetachedCriteria定义好后,调用了执行数据库访问的操作:List users = accessDB(dc)。
适用情况:
面向对象操作,
分离业务与底层,
不需要字段属性摄入到Dao实现层。
缺点:
同Criteria一样,适用面较HQL有限。
五、命名查询
有点像ibatis轻量级框架的操作,具体的实现是把查询语句从java类中转移到了hbm配置文件中。在配置文件中,通过标签来定义查询语句。
看如下示例代码:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="com.sy.vo.User" table="user" catalog="news"> </class> <!-- 命名查询:定义查询条件 --> <query name="getUserById"> <![CDATA[from User where id=:id]]> </query> <!-- 命名查询中使用sql,不推荐使用,影响跨数据库 <sql-query name="getUserById2"> <![CDATA[select * from User where ]]> </sql-query> --></hibernate-mapping>
读取配置文件的代码:
static List namedQuery(int id) { Session s = HibernateUtil.getSession(); Query q = s.getNamedQuery("getUserById"); q.setInteger("id", id); return q.list(); }
PS: 配置文件中的query的name一定要和 java中要拿的 名字对应上。
如图:
优点:
- 方便维护。
将查询语句,写到xml中,后期改动方便,不用重现编译,发布系统。
缺点:
- 比起Criteria来说,不面向对象。
总结:
各种查询方式有各自的优势,系统中使用的时候,也不是只能使用一种,我们要会在合适的时候使用的合适的查询方式,来达到我们实现需求的目的。
0 0
- Hibernate的查询方式知多少 二
- Hibernate查询方式知多少 一
- Hibernate查询方式(二)
- Hibernate的查询方式
- hibernate的查询方式
- hibernate的查询方式
- Hibernate的查询方式
- Hibernate的查询方式
- Hibernate的查询方式
- hibernate的查询方式
- hibernate的查询方式
- hibernate的查询方式
- hibernate的查询方式
- Hibernate的查询方式
- Hibernate的查询方式
- hibernate框架的查询方式QBC(二十)
- hibernate框架的查询方式sql语句(二十一)
- hibernate框架的查询方式hql的多表查询(二十二)
- muduo网络库源码学习————日志滚动
- 操作系统中的进程与线程
- PHP生成验证码时“图像因其本身有错无法显示”的解决方法
- XAMPP+TestLink安装步骤和测试流程
- Ubuntu14.04增加右键菜单=>“run_on_python”
- Hibernate的查询方式知多少 二
- 4. Median of Two Sorted Arrays
- 线性表、栈和队列
- 程序员总结:帮助你早些明白一些道理
- Unity调用Android
- Python爬虫学习记录(1)——Xiami全站播放数
- HDFS snapshot操作实战
- BitMap
- 找工作时该注意的事情