使用Hibernate设计Dao层的几种方式

数据库访问层的问题,该层操作数据库的实现方式有很多种,当然各有各的好处,选择哪一种,根据你的心情而定,dao层所做的事情就是单纯的数据CRUD,不做别的事情,如果你发现你的dao层存在业务逻辑,那么赶紧在项目没有做大之前改掉吧,因为我就曾今看到过我以为同学,把DAO层和Service层搞混了,dao存在于大多数软件工程中,它已成为程序架构必不可少的组成部分,当然,dao是可拔插的,如果你的dao写死在了某个程序里,那说明你对于dao的理解并不透彻,试着把你的dao移植到别的程序里吧,如果不能做到“一次编写,到处运行”,那就考虑重构你的dao层吧!

第一种:直接写JDBC来实现数据库的操作,这种方式是最原始的,当然,如果你对于写JDBC非常的熟悉,那没问题,但是这并不是一个追求上进的程序员做的事,久而久之,这将是一件痛苦的事,而不是一件值得炫耀的事……

那么以下的几种方法就是直接通过或间接通过hibernate框架来实现dao层的设计了,因为hibernate够强大,够流行,够灵活,曾经试过使用JBoss写DAO,的确不怎么爽!

第二种:使用hibernate的session实现数据库操作,这种方式是使用hibernate的最基础的方式,也是最灵活的一种方式,因为session实现了hibernate的所有数据库操作方法,剩下的就看你如何组装这些语句完成你的程序逻辑了

第三种:继承Spring的HibernateDaoSupport,Spring为Hibernate的Dao提供的工具类,其底层是通过HibernateTemplate来实现数据库的操作,但是使用这个工具类,有些地方,对于数据库的操作并不够灵活,曾经我为了这些问题纠结了很久,也许是我个人对这个类的熟悉度有限,如果有哪位童鞋能灵活的运用此类,还望指点一二

第四种:使用HibernateTemplate,它提供了非常多的常用方法来完成数据库的基本操作,使得持久层访问摸板化,这种方式其实和第三种差不多,不多做解释,但是要灵活的运用该模板,还得知道第五种方式

第五种:Hibernate的复杂用法HibernateCallback回调函数,通过调用回调函数来实现的数据库操作,这种方式可以完全使用Hibernate的 session操作数据库,这也是我最喜欢用的方法,因为它够强大,够灵活,够高深

第六种:使用EntityManager,EntityManager里也封装了hibernate对数据库的操作,可以通过 @PersistenceContext注解为其注入实例,但是本人对于此类的使用方法并不是很熟悉,也只使用过一次而已,还在学习中

以上只是列举了我使用过的DAO层的设计方案,并没有提供具体的实现代码,以上的六种实现方式,都有各的好处,也遇到过一些细节上的问题,只有经过更多的人的使用,才可以找到问题,并且去解决问题,对于有意了解使用以上几种方式的详情的童鞋,可以一起讨论讨论,并提供你的实现源码!

最后还想说,使用JPA来实现DAO也是个不错的选择,因为JPA快要成为规范了哦……

猜你喜欢

转载自huangjian325.iteye.com/blog/1064855