J2EE核心:iBatis DAO入门与进阶一
在核心j2ee模式中是这样介绍dao模式的:为了建立一个健壮的j2ee应用,应该将所有对数据源的访问操作抽象封装在一个公共api中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
比如考虑在ibatis: sql maps中的应用例子。这是一个struts应用允许对一个关系表执行select, insert, update和delete的sql请求。在这个应用中,使用sql maps做持续性框架。现在我们要修改这个应用,将这个关系表储存在一个xml文件中而不是存在关系数据库中,或者使用hibernate来实现select请求,而用sql map来执行其他请求,因为hibernate提供了对高速缓存更好的支持。这样的修改很难实现,或者即使我们能修改而实现了这个功能,也会是很混乱的解决方案。
对于这类问题更好的解决方法是建立一个contactdao接口,在这个接口中定义处理select, insert, update, 和delete 请求的事务方法。然后根据不同的事务逻辑建立不同的类实现各个方法。所以可能会有一个类处理使用sql maps同关系表进行交互的情况,而另外一个类处理用xml文件存放关系表而不是关系数据库的情况,等等。在项目中,根据实际的需要从不同的contactdao中选择相应的实现。这种关系见
ibatis dao是由apache主持的开源框架项目,主要目标是为了解决这类问题。它允许在工程中以dao模式为基础建立应用。这就意味着可以建立一个xml文件,并声明xmlcontactdao.java是contactdao的实现类,这个类知道如何从xml文件中读写数据。sqlmapcontactdao则知道如何用sql maps作为持续化框架与关系表进行交互。在工程中,如果向dao框架提交一个需要xml的contactdao请求,框架则会返回一个xmlcontactdao对象。同样的dao框架提供了唯一的接口处理事务管理,这个接口能实现与数据的存储方式无关。它同样考虑了底层连接管理细节和初始化存储框架。
这篇文章是关于如何一步一步的在项目中应用ibatis dao框架的基础指导。我们将由如何把sql maps一文中的应用实例改为应用dao框架入手。然后,我们要讨论dao框架的构造。再下一步,我们关注事务管理是如何在dao框架中得到支持的。最后一部分是关于如何建立自己的事务管理模块。
示例应用
首先,我们将sql maps一文中的例子改为应用dao框架。
1. 将ibatis-dao-2.jar文件复制到web-inf/lib目录下。
2. 在java源程序的目录里新建一个如下的daomap.xml文件
清单1:
"com/sample/contact/dao/sqlmap/sqlmapconfig.xml"/>
implementation=
"com.sample.contact.dao.sqlmap.sqlmapcontactdao"/>
daomap.xml是发布ibatis dao框架的配置文件。是根元素,每个元素描述了一种存储机制。在这个例子中只使用了sql maps来存储,所以我们这里只有一个元素。每种存储机制必须包含一个元素,这个元素描述连接它后面的数据存储所用的管理器,并且标记事务的界限。我们将在稍后再讨论transactionmanager。
元素还包括一组dao用于描述其他的存储管理机制。在这个例子中,我们将生成一个使用sql maps存储的contactdao,所以在配置文件中添加一个ie标记来定义sqlmapcontactdao。
3. 建立contactdao.java,如下:
单2:
public interface contactdao extends dao {
public int insertcontact(contact contact);
public int updatecontact(contact contact);(文章来源 www.iocblog.net)
public contact selectcontact(int contactid);
public int deletecontact(int contactid);
}
contactdao.java定义了用户和一个关系表进行交互所需要用到的所有事务处理方法。请注意到contactdao.java中的所有方法都将一个contact对象作为参数,这是一个用来携带数据的数据传递对象。
Tag: ibatis ,DAO
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。