j2EE 使用DAO模式对数据库操作(jsp程序)

DAO(数据库操作对象)设计模式是JavaEE数据层的操作。之前使用JDBC操作数据库,都是直接在

JSP页面中写JDBC代码。这样导致JSP页面中包含大量的HTML代码和Java代码,显示和功能代码混在一起,难以维护。这样的设计是非常不合理的,JSP只应关注数据的显示,而不需要去关注数据是从哪里来的。

 

使用Data Access Object(DAO)设计模式可以很好的解决上述问题。DAO抽象与封装所有对数据源的访问;负责管理对数据源的连接,以及数据的存取。

 DAO包括五个重要的部分,分别如下:

 (1)数据库连接类

 (2)VO类 

(3)DAO接口

 (4)DAO实现类

(5)DAO工厂类

  1.数据库连接类
数据库连接类的主要功能是连接数据库并获得连接对象,以及关闭数据库。通过数据库连接类,可以大大的简便开发,在需要进行数据库连接时,只需创建该类的实例,并调用其中的方法就可以获得数据库连接对象和关闭数据库,不必再进行重复操作。

示例:DataBaseConnection.java 

 

 2.VO类
VO类是一个包含属性和表中字段完全对应的类。并在该类中提供set和get方法来设置并获得该类中的属性。一个vo类与一个数据库中的表相对应,也就是说,有多少表,就应该有多少vo类。而实例化的vo对象则代表一个表中的一行数据。

示例:User.java 

 

3.DAO接口
DAO接口中定义了所有的用户的操作,如添加记录、删除记录以及查询记录等。不过因为是接口,所以仅仅是定义,需要子类来实现。
示例:UserDAO.java  

 

4.DAO实现类 
DAO实现类实现了DAO接口,并实现了DAO接口中定义的所有方法。在DAO实现中通过连接数据库进行数据库操作。 一个Dao实现类对应一个表,如UserDao类对应user表,该类中将定义对该表的所有的操作。
示例:UserDAOImpl.java   

 

5.DAO工厂类
在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库操作,对于后期的修改非常不便。有时要修改所有的使用DAO实现类的代码。
使用DAO工厂类可以很好的解决后期修改的问题,可以通过该DAO工厂类的一个静态方法来获得DAO实现类实例。这时如果需要替换DAO实现类,只需修改该DAO工厂类中的方法代码,而不必修改所有的操作数据库代码。

    在DAO模式中用户不需要知道底层的具体实现,只需要操作接口;同时实现了前台和后后台的分离;(DAO中只需要操作对象);有利于代码的重用.(如果用户需要增加新的功能时候,我只需要在DAO这接口中添加的抽象的方法,然后在DAOImpl中实现用户所增加的功能,就能很好的完成添加用户功能的。

 

DAO的整体设计流程:JSP--->DAO工厂-->具体实现类-->完成数据库的具体操作。

总结:为什么使用DAO
1.数据存储逻辑的分离 
通过对数据访问逻辑进行抽象,为上层机构提供抽象化的数据访问接口。业务层无需关心具体的select,insert,update操作,这样,一方面避免了业务代码中混杂JDBC调用语句,使得业务落实实现更加清晰,另一方面,由于数据访问几口语数据访问实现分离,也使得开发人员的专业划分成为可能。
2.数据访问底层实现的分离 
DAO模式通过将数据访问计划分为抽层和实现层,从而分离了数据使用和数据访问的地称实现细节。这意味着业务层与数据访问的底层细节无关,也就是说,我们可以在保持上层机构不变得情况下,通过切换底层实现来修改数据访问的具体机制,常见的一个例子就是,我们可以通过仅仅替换数据访问层实现,将我们的系统部署在不同的数据库平台之上。
3.资源管理和调度的分离 
在数据库操作中,资源的管理和调度是一个非常值得关注的主题。大多数系统的性能瓶颈往往并非集中于业务逻辑处理本身。在系统涉及的各种资源调度过程中,往往存在着最大的性能黑洞,而数据库作为业务系统中最重要的系统资源,自然也成为关注的焦点。DAO模式将数据访问逻辑从业务逻辑中脱离开来,使得在数据访问层实现统一的资源调度成为可能,通过数据库连接池以及各种缓存机制(Statement Cache,DataCache等,缓存的使用是高性能系统实现的一个关键所在)的配合使用,往往可以保持上层系统不变的情况下,大幅度提升系统性能。
  4数据抽象
       在直接基于JDBC调用的代码中,程序员面对的数据往往是原始的RecordSet数据集,诚然这样的数据集可以提供足够的信息,但对于业务逻辑开发过程而言,如此琐碎和缺乏寓意的字段型数据实在令人厌倦。DAO 模式通过对底层数据的封装,为业务曾提供一个面向对象的接口,使得业务逻辑开发员可以面向业务中的实体进行编码。通过引入DAO模式,业务逻辑更加清晰,且富于形象性和描述性,这将为日后的维护带来极大的便利。试想,在业务曾通过Contact.getName方法获得客户姓名,相对于直接通过SQL语句访问数据库表并从ResultSet中获得某个字符型字段。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值