|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。本文次要先容一种数据库相干类的计划形式。并先容在J2EE框架中的详细完成,和在事件处置方面的一些思索。
1、计划形式简介
在开辟J2EE使用程序时,一般是要找出使用程序中触及到的各类信息,好比一个公司的产物目次,或一个网站的用户信息,我们会将这些信息放在数据库里。
在一般的计划中,我们要剖析这些数据的属性和干系,然落后行数据库的逻辑计划,把各类信息用分歧的表来存储。好比,要开辟一个图手札息查询体系。能够创立上面两个表来分离暗示书和出书社。
tableBook(ID,Name,ISBN,Author,PublisherID,Price,Volume)
tablePublisher(ID,Name,Telephone,Address,Postcode)
表Book包括了ID,书名,书号,作者,出书社ID,代价,页数。表Publisher包括ID,社名,德律风,地点,邮编。这两个表经由过程出书社ID相干。
上面我们来先容一种数据库相干类的计划的形式。
数据库相干类能够分红实体类(EntityClass)和会话类(SessionClass)。
实体类对应于一个表的纪录的封装,也就是该类的一个实例对应于表中的一个纪录。并且,该类中的属性和纪录中的字段是逐一对应的。
会话类对应于对一个表中的一切纪录的操纵。好比增添一笔记录,删除一笔记录,查找纪录和更新一笔记录。
经由过程利用这类计划形式,使程序加倍模块化,便于开辟和保护。固然,也能够利用其他计划形式。
2、程序完成
在详细完成下面的这类形式时,常常依据详细的使用程序来选用分歧的手艺来完成。看到下面的形貌形式后,我们很简单就发明,能够用EJB来完成(EJB分两种,实体EJB和会话EJB)。
我们晓得,EJB提出来的目标是用于供应一种散布式组件体系的开辟。假如我们的使用程序是一个散布式的使用体系,那末毫无疑问,利用EJB来完成能年夜年夜加重编程的事情量。同时,经由过程利用EJB容器的一些初级特征,可使使用程序加倍牢靠,扩大性也年夜年夜增强。如许一来,开辟职员就不用体贴一些底层手艺,好比事件处置,平安等各个方面,而是把重点放在如何完成营业逻辑上。可是我们应当注重,假如开辟的使用不是散布式的情形下,那末接纳EJB有大概年夜年夜下降体系的功能。由于,EJB挪用的开支很年夜。
本文将切磋在倒霉用EJB手艺的情形下怎样来完成下面先容的这个形式。
上面以开辟图手札息查询体系为例。
1.实体类
如后面讲到的,实体类的每一个实例与表中一个纪录对应。如许,实体类的属性应当和表的每一个字段逐一对应。必需注重的是,实体类的实例是每一个纪录在内存中的对应,因而,在程序中对实例的操纵其实不即刻反响到数据库的纪录中。
在该类中,只是对数据的包装,因而,该类仅必要一些基础的办法,即setXX()和getXX()办法。
上面是一个实体类,是对Book表的封装。
classBook{
protectedint ID;
protectedStringName;
protectedStringISBN;
protectedStringAuthor;
protectedint PublisherID;
protecteddoublePrice;
protectedint Volume;
publicvoidsetID(intiID);
publicint getID();
publicvoidsetName(StringsName);
publicStringgetName();
publicvoidsetISBN(StringsISBN);
publicStringgetISBN();
publicvoidsetAuthor(StringsAuthor);
publicStringgetAuthor();
publicvoidsetPublisherID(intiID);
publicint getPublisherID();
publicvoidsetPrice(doubledPrice);
publicdoublegetPrice();
publicvoidsetVolume(intiVolume);
publicint getVolume();
publicBook(intiID,StringsName,StringsISBN,intiPublisherID,doubledPrice,intiVolume);
};
一样地能够对表Publisher举行封装。
2.会话类
会话类次要是对一个表举行处置。这些操纵能够是在表中创立一笔记录,删除一笔记录,更新一笔记录和查找一笔记录。这些操纵的了局是将表中的纪录和内存中的实体类的实例对应起来,或将实例与表中的纪录对应起来。
我们能够看一下对Book表的封装。
classBookTable{
voidAdd(Bookbook);
voidDelete(Bookbook);
voidUpdate(Bookbook);
CollectionfindbyID(intiID);
CollectionfindbyXXXX(XX,XX);
CollectionfindbyPulisherName(StringsPublisherName);
};
下面的类的声名中,Add()用于将内存中的一个Book实例映照到数据库中。Delete()用于删除数据库中的某一个纪录。Update()用于更新表中的一个纪录。而findbyXXXX()则对应于SELECT语句。
关于触及到多个表操纵时,能够有两种体例。一种是象BookTable一样,专门封装一个类。另外一个办法是,间接在BoolTable中写一个findbyPublisherName()。这个办法计划成前往一个Book的汇合。
下面只是复杂的先容了如何完成实体类和会话类。在详细的使用中,还要思索到数据库操纵的分歧性。上面就先容一下事件处置的相干内容。
3、事件处置
为了确保对数据操纵的完全和分歧,在程序计划时要充实思索到事件处置方面的成绩。
1.JDBC中如何将多个SQL语句组分解一个事件。
在JDBC中,翻开一个毗连对象Connection时,缺省是auto-commit形式,每一个SQL语句都被看成一个事件,即每次实行一个语句,城市主动的失掉事件确认。为了能将多个SQL语句组分解一个事件,要将auto-commit形式屏障失落。
在auto-commit形式屏障失落以后,假如不挪用commit()办法,SQL语句不会失掉事件确认。在比来一次commit()办法挪用以后的一切SQL会在办法commit()挪用时失掉确认。
上面的代码是一个树模:
con.setAutoCommit(false);
PreparedStatementupdateSales=con.prepareStatement("UPDATECOFFESSETSALES=?WHERECOF_NAMELIKE?");
updateSales.setInt(1,50);
updateSales.setString(2,"Colombian");
updateSales.executeUpdate();
PreparedStatementupdateTotal=con.prepareStatement("UPDATECOFFEESSETTOTAL=TOTAL+?WHERECOD_NAMELIKE?");
updateTotal.setInt(1,50);
updateTotal.setString(2,"Colombian");
updateTotal.executeUpdate();
con.commit(0;
con.setAutoCommit(true);
2.J2EE平分布式事件处置
在J2EE中,程序里可使用JTA来挪用底层的JTS(JAVATransactionService供应者服务)来处置散布式的事件处置。别的,假如利用EJB,能够经由过程在形貌文件中指定transaction的属性来完成。
有关散布式事件处置的详细内容,请拜见J2EE标准。
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。 |
|