当前位置:主页 >电竞平台有哪一些

电竞平台有哪一些:J2EE核心:iBatis DAO入门与进阶二

发布时间:02月07日 阅读:676



DAO框架架构

因为有了一个可以运行的示例,让我们得以粗略懂得DAO框架是若何运作的。在图2表示的顺序图中演示了DAO的事情要领:

图2. DAO顺序图

在开始时,调用DaoManagerBuilder.buildDaoManager()并传入DAOMap.xml来初始化DAO框架。在这个措施中DAO框架会读取DAOMap.xml并且由此天生响应的DAOManager工具。这个工具包括了对支持的数据存储机制的描述。哪个接口会被实现,哪个是接口和存储机制结合的实现类?基础上这是和DAOMap.xml文件相等的 Java工具。

当有了DAOManager工具,可以从中获得ContactDAO接口的SQL Map实例。DAO框架会返回一个包装了实现类的DaoProxy工具。在本例子中将给SQLMapContactDAO返回一个DaoProxy工具。这个DaoProxy工具容许DAO框架截获调用商业措施。本例中,当调用 contactDAO.selectContact()时,DAO框架会截获这个调用并反省事务处置惩罚是否已经开始履行,假如没有,它将调用事务治理器中的startTransaction()创建一个新的事务处置惩罚调用。假如处置惩罚已经开始,DaoProxy工具会调用事务中的SQLMapContactDAO中的selectContact()措施。当selectContact()调用返回的时刻,DaoProxy工具截获返回并提交给事务。

假如不盼望事务在措施层上可见,或者盼望在一个事务中调用多个不合的措施,则可在调用ContactDAO中的商业措施前调用daoManager.startTransaction(),然后在daoManager.startTransaction()履行完今后再提交商业措施。

那么现在剩下要关心的工作便是那个模块认真存储机制的初始化并通报节制给存储电竞平台有哪一些机制。在这个例子中,就意味着由哪个模块认真将SqlMapConfig.xml的路径通报给SQL Map框架并给它初始化。同样意味着哪个模块认真和SQL Maps框架进行实际的交互。DAO框架为每种存储供给了Template类,在工程中,可以从这个Template类中承袭实例类,并只要自己的措施中编写商业事务逻辑。然后将节制通报给这个模板类,它将认真和存储机制的交互。在我们的例子中调用super.queryForObject("getContact",new Integer(contactId)),意味着SqlMapDaoTemplate将认真SQL Maps的初始化和与之交互。

初始化存储机制必要相关的一些信息,在例子中初始化必要SqlMapConfig.xml的路径,这个文件中包孕驱动类的名字、JDBC URL、登岸信息之类的信息。这些特定的事务治理器必要的信息将会在DaoMap.xml文件中作为一个属性元素通报给治理器。下一节,我们将评论争论DAO框架支持哪些事务治理器,每个治理器必要哪些初始化信息。

支持的存储治理机制

DAO框架供给了内置的对一些存储治理机制的支持。为了应用此中的一个内置的transactionManagers,必要做两件工作:

1.在DAOMap.xml中增添一个

元向来声明对存储治理机制的支持。

2.在天生DAO实现类的时刻为transactionManager承袭适当的Template类。

下面我们要钻研内置transactionManagers并找出在利用法度榜样中应用若何应用它们。

JDBC

假如不想应用任何存储框架,不想自己写JDBC代码,那么JDBC事务治理器是很好的选择。假如应用JDBC作为存储机制,则可以应用以下三种连接治理之一:

SIMPLE:假如要应用iBatis'自己的连接池实例,可以把SIMPLE作为DataSource元素的值。将平日的JDBC属性(DriverManager类, JDBC URL,等等)传入作为Properties。在iBatis在线文档中查看更多的连接属性。

清单5:

value="com.ibm.db2j.jdbc.DB2jDriver"/>

value="jdbc:db2j:D:\cloudscape\wpsdb"/>

value="db2admin"/>

value="db2admin"/>

value="true" />

DBCP:应用Apache DBCP作为连接治理。请查看DAO在线指示得到若何设置设置设备摆设摆设DBCP连接池的信息。

JNDI:当要应用利用办事器的连接池,那么要做的是供给连接池的JNDI名,DAO框架则应用这个名称得到一个连接。

清单6:

value="java:comp/env/jdbc/MyDataSource"/>

然后要建立一个类承袭JdbcDaoTemplate.java来实现事务措施饰辞。在示例中,我们建立了JDBCContactDAO.java。在事务措施中,可以调用getConnection()向父类哀求连接。由于我们没有应用任何存储框架,以是我们只能建立并履行我们自己的SQL哀求。

清单7:

public int updateContact(Contact contact) {

try {

Connection conn = getConnection();

PreparedStatement updateStmt =

conn.prepareStatement("UPDATE DB2ADMIN.CONTACT

SET FIRSTNAME=?,LASTNAME=? WHERE CONTACTID=?");

updateStmt.setString(1, contact.getFirstName());

updateStmt.setString(2, contact.getLastName());

updateStmt.setInt(3, contact.getContactId());

return updateStmt.executeUpdate();

} catch (SQLException ex) {

throw new DaoException(ex);

}

}

应用J电竞平台有哪一些DBC transactionManager的时刻,DAO框架会调用Connection 工具中的commit和rollback措施来节制事务处置惩罚。以是事务会在Connection层被处置惩罚,而不介入全局事务处置惩罚。

JTA

假如项目是J2EE利用,那么应用利用办事器供给的连接池会更有利,由于它将比SIMPLE 或者DBCP 连接池有更好的机能。同样的,应用J2EE利用,RDBMS是独一的处置惩罚源,除了RDBMS还必要包孕JCA、MQ Server等功能。由于不能在连接层开始和处置惩罚事务,而要特其余在全局事务处置惩罚时在一个UserTransaction工具中调用begin()和commit()措施。以是对付这类哀求,可以应用JTA 作为transctionManager,既可以向JNDI URL供给数据源连接池,也可以在里面包孕UserTransaction工具。

清单8:

value="java:comp/env/jdbc/MyDataSource"/>

value="java:comp/env/UserTransaction"/>

Hibernate

由于Hibernate是很常见的存储框架,iBatis DAO也供给了对它的支持。为了在项目中应用Hibernate,像下面那样在DAOMap.xml增添

元素:

清单9:

value="net.sf.hibernate.dialect.Cloudscape"/>

value="com.ibm.db2j.jdbc.DB2jDriver"/>

value="jdbc:db2j:D:\cloudscape\wpsdb"/>

value="db2admin/>

value="db2admin"/>

value="com.sample.contact.Contact"/>

同样的,必要建立一个DAO类承袭HibernateDaoTemplate。在这个DAO内,可以经由过程调用getSession()措施来得到Hibernate Session工具的进口。

SQL MAP

请查看示例(在资本小节中)懂得若何在项目中应用SQL Map存储框架的细节。

外部治理

外部的事务治理器容许事务处置惩罚在外部被DAO框架节制。这种行径有利于处置惩罚和非关系数据库数据源的交互。下一节,我们将评论争论若何用DAO框架处置惩罚以XML文件作为数据源的环境。

支配xml事务Map

你可能也常常碰到这种环境:必要从xml中读取数据,而不是从RDBMS中读取,假想你正在从事一个银行项目,你并不能够直接打仗到银行的数据库,所有的用户信息暂时都邑经由过程一个XML文件传输给你,你必须应用这个XML文件进行开拓,开拓完毕再支配到真正的应用RDBMS的情况中,

这样的话,你必要做一下改变:

1. 在DAOMap.xml 中增添对外部的transactionManager 的支持。

2. 新建一个XMLContactDAO.java文件:

清单10:

public class XMLContactDAO implements ContactDAO {

public static final String

CONTACTXMLNAME = "c:\\Contact.xml";

public XMLContactDAO(DaoManager manager) {

super(manager);

}

public int insertContact(Contact contact) {

HashMap 电竞平台有哪一些contactMap 电竞平台有哪一些= loadChanges();

if (contactMap.get(new Integer

(contact.getContactId())) == null)

contactMap.put(new

Integer(contact.getContactId()), contact);

saveChanges(contactMap);

return contact.getContactId();

}

public Contact selectContact(int contactId) {

HashMap contactMap = loadChanges();

return (Contact) contactMap.get(

new Integer(contactId));

}

public HashMap loadChanges() {

HashMap contactMap = null;

try {

XStream xstream = new XStream(new DomDriver());

xstream.alias("contact", Contact.class);

contactMap =

(HashMap) xstream.fromXML(

new FileReader(CONTACTXMLNAME),HashMap.class);

} catch (FileNotFoundException e) {

e.printStackTrace();

return new HashMap();

}

return contactMap;

}

public void saveChanges(HashMap contactMap) {

try {

XStream xstream = new XStream();

xstream.alias("contact", Contact.class);

xstream.to电竞平台有哪一些XML(contactMap,

new FileWriter(CONTACTXMLNAME));

} catch (IOException e) {

e.printStackTrace();

}

}

}

这个例子中,XMLContactDAO实现了ContactDAO事务接口。由于我们应用了一个EXTERNAL事务治理器,以是不能应用任何已经存在的Template类。在我们的类中,我们应用XStream框架新建了两个简单的措施——loadChanges()和saveChanges()——实现对XML文件的读写。XStream是一个开源框架,实现将一个XML文件看作一个工具来读取,将工具保存为XML文件的功能。

结论

当今,有很多新的存储框架呈现。这对付一个法度榜样员既有好处也有坏处。好处是有更多的选择余地。坏处是由于你必须作出一个选择,更糟糕的是不得不在项目开始的时刻就选择一种框架,这就意味着你可能不能完全清楚的懂得项目的需求,或者不能完全确信这种框架是否能完全满意项目的需求。DAO是一种轻易应用并且功能强大年夜的框架能够处置惩罚存储机制的改变。你在前期作出了付出,然则它肯定会在着末对你有赞助的。



上一篇:雷竞技下载官方版:一棵小草的坚守新闻频道中国青年网
下一篇:电竞下载app送彩金:《环球时报》社评:向李文亮医生致以敬意