Generic Data Access Objects
普通数据访问对象,这个是Hibernate官方网站上面的一个DAO类的设计模式,基于JDK5.0范型支持,文章地址如下:
http://www.hibernate.org/328.html
|
|
|||
我下面的代码与Hibernate官网上提供的有点不同。
首先定义DAO类的接口IGenericDAO,该接口定义了共同的CRUD操作:
java 代码
- /**
- * 定义通用的CRUD操作
- * @author rainlife
- */
- public interface IGenericDAO 〈T, ID extends Serializable〉
- {
- // 通过主键标识查找某个对象。
- public T findById(ID id);
- // 通过主键标识查找某个对象,可以锁定表中对应的记录。
- T findById(ID id, boolean lock);
- //得到所有的对象。
- List
findAll(); - //通过给定的一个对象,查找与其匹配的对象。
- List
findByExample(T exampleInstance); - //持久化对象。
- T makePersistent(T entity);
- //删除对象。
- void makeTransient(T entity);
- }
下面是使用Hibernate针对该接口的实现GenericDAOHibernate:
java 代码
- /**
- * 这是针对IGenericDAO接口的Hibernate实现,完成通用的CRUD操作。
- * @author rainlife
- * @param
POJO类 - * @param
POJO类的主键标识符 - * @param
针对每一个POJO类的DAO类实现 - */
- public abstract class GenericDAOHibernate 〈T,ID extends Serializable, DAOImpl extends IGenericDAO〈T,ID〉〉
- implements IGenericDAO〈T,ID〉
- {
- private Class
persistentClass; - protected Session session;
- public GenericDAOHibernate()
- {
- this.persistentClass = (Class
) ((ParameterizedType) getClass() - .getGenericSuperclass()).getActualTypeArguments()[0];
- }
- @SuppressWarnings("unchecked")
- public DAOImpl setSession(Session s)
- {
- this.session = s;
- return (DAOImpl)this;
- }
- protected Session getSession()
- {
- if (session == null)
- throw new IllegalStateException(
- "Session has not been set on DAO before usage");
- return session;
- }
- public Class
getPersistentClass() - {
- return persistentClass;
- }
- @SuppressWarnings("unchecked")
- public T findById(ID id)
- {
- return (T) getSession().load(getPersistentClass(), id);
- }
- @SuppressWarnings("unchecked")
- public T findById(ID id, boolean lock)
- {
- T entity;
- if (lock)
- entity = (T) getSession().load(getPersistentClass(), id, LockMode.UPGRADE);
- else
- entity = findById(id);
- return entity;
- }
- @SuppressWarnings("unchecked")
- public List
findAll() - {
- return findByCriteria();
- }
- @SuppressWarnings("unchecked")
- public List
findByExample(T exampleInstance) - {
- Criteria crit = getSession().createCriteria(getPersistentClass());
- Example example = Example.create(exampleInstance);
- crit.add(example);
- return crit.list();
- }
- @SuppressWarnings("unchecked")
- public List
findByExample(T exampleInstance, String[] excludeProperty) - {
- Criteria crit = getSession().createCriteria(getPersistentClass());
- Example example = Example.create(exampleInstance);
- for (String exclude : excludeProperty)
- {
- example.excludeProperty(exclude);
- }
- crit.add(example);
- return crit.list();
- }
- @SuppressWarnings("unchecked")
- public T makePersistent(T entity)
- {
- getSession().saveOrUpdate(entity);
- //getSession().save(entity);
- return entity;
- }
- public void makeTransient(T entity)
- {
- getSession().delete(entity);
- }
- @SuppressWarnings("unchecked")
- protected List
findByCriteria(Criterion... criterion) - {
- Criteria crit = getSession().createCriteria(getPersistentClass());
- for (Criterion c : criterion)
- {
- crit.add(c);
- }
- return crit.list();
- }
- @SuppressWarnings("unchecked")
- /**
- * 增加了排序的功能。
- */
- protected List
findByCriteria(Order order,Criterion... criterion) - {
- Criteria crit = getSession().createCriteria(getPersistentClass());
- for (Criterion c : criterion)
- {
- crit.add(c);
- }
- if(order!=null)
- crit.addOrder(order);
- return crit.list();
- }
- @SuppressWarnings("unchecked")
- protected List
findByCriteria( int firstResult,int rowCount,Order order,Criterion... criterion) - {
- Criteria crit = getSession().createCriteria(getPersistentClass());
- for (Criterion c : criterion)
- {
- crit.add(c);
- }
- if(order!=null)
- crit.addOrder(order);
- crit.setFirstResult(firstResult);
- crit.setMaxResults(rowCount);
- return crit.list();
- }
- }
相关图文阅读
频道图文推荐
相关专题
·Fedora Linux中配置JDK5或JDK6环境变量 (0次浏览)
·用信号量Semaphore实现互斥锁Mutex (0次浏览)
·详细解读Java编程中的IO系统 (0次浏览)
·java初学者都应该搞懂的六个问题 (0次浏览)
·JSF:Java中面向Web开发的生旦净末丑 (0次浏览)
·Java技巧:实例讲解Servlet的图象处理 (0次浏览)
·详细介绍在tomcat中配置数据源原理 (0次浏览)
·用Hibernate3.1实现XML和数据库的同步 (0次浏览)
·搜索引擎之中文分词实现(java版) (0次浏览)
·Java IDE鱼龙混杂,我们该如何选择呢? (0次浏览)
·用信号量Semaphore实现互斥锁Mutex (0次浏览)
·详细解读Java编程中的IO系统 (0次浏览)
·java初学者都应该搞懂的六个问题 (0次浏览)
·JSF:Java中面向Web开发的生旦净末丑 (0次浏览)
·Java技巧:实例讲解Servlet的图象处理 (0次浏览)
·详细介绍在tomcat中配置数据源原理 (0次浏览)
·用Hibernate3.1实现XML和数据库的同步 (0次浏览)
·搜索引擎之中文分词实现(java版) (0次浏览)
·Java IDE鱼龙混杂,我们该如何选择呢? (0次浏览)
·JavaFX Script With Eclipse (94次浏览)
·Jakarta POI 3.0—访问微软Office格式Java AP (30次浏览)
·JavaFX应用程序制作工具JFXBuilder (30次浏览)
·Java和.NET互操作究竟有什么用? (19次浏览)
·对于Spring初学者的学习建议 (17次浏览)
·Java软件架构设计概论 (14次浏览)
·企业应用开发中的JAVA开源项目 (14次浏览)
·使用Java Swing界面实现数据库基本操作 (14次浏览)
·Java Servlet 和 JSP入门教程 (13次浏览)
·如何使用JXTA技术建立P2P网络 (12次浏览)
·Jakarta POI 3.0—访问微软Office格式Java AP (30次浏览)
·JavaFX应用程序制作工具JFXBuilder (30次浏览)
·Java和.NET互操作究竟有什么用? (19次浏览)
·对于Spring初学者的学习建议 (17次浏览)
·Java软件架构设计概论 (14次浏览)
·企业应用开发中的JAVA开源项目 (14次浏览)
·使用Java Swing界面实现数据库基本操作 (14次浏览)
·Java Servlet 和 JSP入门教程 (13次浏览)
·如何使用JXTA技术建立P2P网络 (12次浏览)
·Java SE 6中XML数字签名标准Java接口 (379次浏览)
·java中文件操作大全 (300次浏览)
·JPCAP——JAVA中的数据链路层控制 (206次浏览)
·JAVA加密解密---自定义类加载器应用 (130次浏览)
·基于WEB应用开发的Java程序员必备工具 (115次浏览)
·Eclipse Template用法探讨 (112次浏览)
·java中使用MD5加密算法进行加密 (102次浏览)
·JavaFX Script With Eclipse (94次浏览)
·关于JAVA匿名内部类的一点讨论 (85次浏览)
·《精通SOA:基于服务总线的Struts+EJB+Web Se (78次浏览)
·java中文件操作大全 (300次浏览)
·JPCAP——JAVA中的数据链路层控制 (206次浏览)
·JAVA加密解密---自定义类加载器应用 (130次浏览)
·基于WEB应用开发的Java程序员必备工具 (115次浏览)
·Eclipse Template用法探讨 (112次浏览)
·java中使用MD5加密算法进行加密 (102次浏览)
·JavaFX Script With Eclipse (94次浏览)
·关于JAVA匿名内部类的一点讨论 (85次浏览)
·《精通SOA:基于服务总线的Struts+EJB+Web Se (78次浏览)
最新技术文档
·Hibernate Search:全文检索你的领域模型 06-27
·Struts配置文件详细讲解 06-27
·实例演示:Java和C语言哪个更快? 06-27
·Eclipse插件开发之定制向导学习 06-27
·解析Tomcat下应用JMS开发技巧 06-27
·.NET和JAVA 在安全功能的比较 06-27
·java与其他web开发编程语言的比较 06-27
·.NET和Java 之碰撞火花:到底谁快 06-27
·.NET与 JAVA 在前途上面的比较 06-27
·Hyperic——基于java的跨平台管理系统 06-27
·Struts配置文件详细讲解 06-27
·实例演示:Java和C语言哪个更快? 06-27
·Eclipse插件开发之定制向导学习 06-27
·解析Tomcat下应用JMS开发技巧 06-27
·.NET和JAVA 在安全功能的比较 06-27
·java与其他web开发编程语言的比较 06-27
·.NET和Java 之碰撞火花:到底谁快 06-27
·.NET与 JAVA 在前途上面的比较 06-27
·Hyperic——基于java的跨平台管理系统 06-27
站内各频道最新更新文档
站内最新制作专题
|
|||
| ·win98频道 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 ·安全频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
热门关键字导读
站内频道文章精选
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |
百度推荐,商机无限
搜索您感兴趣的内容




