因胸联盟 发表于 2015-1-18 11:48:04

JAVA网页编程之从Jpetstore 入手下手IBATIS之旅

JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。
前一阵在研讨O/RMAPPING,以为HIBERNATE和IBATIS都是好工具,但IBATIS更简单上手,并且跟数据库打交道的时分只需把SQL语句设置在XML里便可,不象HIBERNAMTE要写复合其标准的HQL。固然如今HIBERNATE年夜行其道一定是有事理的,我过一阵子也盘算好勤学习一下。
手艺开展的太快,进修办法是很主要的。(看来开源的确增进了临盆力的开展啊,由此揣度,共产主义社会一定会完成的啦。)我以为必需摒弃抱本书墨守成规的进修办法,而应当是STUDYINACTION,在理论中进修,缺啥补啥,年夜不了不休重构好了。固然条件是有必定的手艺堆集了。为了进修IBATIS,除大抵看了一下IBATIS的官方文档,我把次要精神放在研讨作者的典范JPETSTORE上了,人人能够道WWW.IBATIS.COM往下载4.0版本的例子,3.X的不要下了,代码写的没有4.0的幽美。然后再往下载MYSQL,TOMCAT,安装调试让JETSTORE跑起来。这个历程我就不讲了,人人动动头脑找点成绩感吧。工欲善其事,必先利其器。我用的是JBUILDER9,由于我之前用DELPHI的对BORLAND的产物有情感啊(固然BORLAND不会对我有情感,由于。。。。。。^_^,中国特征)。建一个新项目,保留后关失落PROJECT,然后把JPETSTORE的代码包拷贝到:projectrc下,再翻开方才的项目,顺遂的话你就可以看到项面前目今的一堆包啦。如今编译一定是有成绩的,别急别急,在项目里加载上JPETSTORE源码LIB目次下的一切.JAR和SERVLET.JAR,为了连MYSQL,你还得加载MYSQL的JDBC驱动。详细做法,你能够在JBUILDER9Toolsconfiglibraries新建三个LIB,好比IBATISLIB里放上JPETSTORE源码LIB目次下的一切.JAR,servlet就不要建了,JB9里带了,再建一个MYSQLLIB放上MYSQL的JDBC驱动的.jar,然后修正JPETSTORE源码SRCPROPERTIESdatabase.properties的内容,比方,我的是driver=org.gjt.mm.mysql.Driverurl=jdbc:mysql://localhost/jpetstoreusername=jpetstorepassword=ibatis9977如今MAKEPROJECT应当能够经由过程了。好啦,翻开com.ibatis.jpetstore底下的一切.java文件吧。Domain目次下放的是JAVABEAN,通常为跟表绝对应的。Persistence目次下放的是DAO接口和详细完成类,DAO即数据会见对象(DATAACCESSOBJECT),是用来跟数据库打交道的。IBATIS的O/RMAPPING的利用办法也就在这个目次内里。Presentation目次下放的是FORMBEAN,前面还要说到JPETSTORE典范对STRUTS的制造性利用。Service目次下放的是SERVICE类,经由过程SERVICE对象挪用DAO对象的办法来会见数据库的,这是一种经常使用的计划形式。罕见的STRUTS编程应当是一个举措对应一个ACTION,比方写一个结交网站,用户登录和用户查询就得写分离写两个ACTION来处置。而JPETSTORE的作者克林顿(ClintonBegin,名字够嘹亮的)写了一个ACTION静态的挪用FORMBEAN的分歧办法来处置分歧的举措。代码以下,注重execute()的写法!
publicclassBeanActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,
ActionFormform,HttpServletRequestrequest,
HttpServletResponseresponse)
throwsException{
Stringforward="success";
try{
ActionContext.initialize(request,response);
if(form!=null){
//ExplicitMethodMapping
Methodmethod=null;
StringmethodName=mapping.getParameter();
if(methodName!=null&&!"*".equals(methodName)){
try{
method=form.getClass().getMethod(methodName,
null);forward=(String)method.invoke(form,null);
}catch(Exceptione){
thrownewBeanActionException("Errordispatching
beanactionviamethodparameter("+methodName+").
Cause:"+e,e);
}
}
//PathBasedMethodMapping
if(method==null&&!"*".equals(methodName)){
methodName=mapping.getPath();
if(methodName.length()>1){
intslash=methodName.lastIndexOf("/")+1;
methodName=methodName.substring(slash);
if(methodName.length()>0){
try{
method=form.getClass().getMethod
(methodName,null);
forward=(String)method.invoke(form,null);
}catch(Exceptione){
thrownewBeanActionException("Errordispatching
beanactionviaURLpattern("+methodName+").
Cause:"+e,e);
}
}
}
}
}
}catch(Exceptione){
request.setAttribute("BeanActionException",e);
throwe;
}
returnmapping.findForward(forward);
}
}

也就是经由过程对struts-config.xml的设置信息的读取来决意挪用的办法,大概是不挪用任何办法。比方:当ACTIONSERVLET收到哀求/shop/viewCategory.shtml,(JPETSTORE里后缀界说的是“.shtml”)挪用catalogBean的viewCategory办法。怎样,有创意吧,假如你乐意,就不再用写那末多的ACTION了。上面谈一谈IBATIS的O/RMAPPING吧。请人人翻开目次yourprojectcomibatisjpetstorepersistenceqlmapdaoql,看到了甚么?除设置文件sql-map-config.xml之外,是一些和JAVABEAN绝对应的XML,翻开sql-map-config.xml和Acount.xml看看吧,再返到yourprojectcomibatisjpetstorepersistence目次,翻开dao.xml发明他们的干系了吧。大概这时候你弄不清这些XML有甚么用途,别急,IBATIS官方文档里说的很分明(有中文版的哦)。我大抵说一下跟JAVABEAN对应的那些XML文件的感化吧,好比Acount.xml,是映照JAVABEAN和数据库的表的文件。你能够依照IBATIS的标准在内里写恣意的SQL语句,参数和前往值能够是基础范例及其包装类,MAP,自界说的类。最经常使用确当然是前往自界说类实例了。不外假如前往值是自界说的类实例的话,你就必要先界说resultMap,好比:<resultMapid="accountResult"class="account"><resultproperty="username"column="USERID"/><resultproperty="email"column="EMAIL"/><resultproperty="firstName"column="FIRSTNAME"/><resultproperty="lastName"column="LASTNAME"/><resultproperty="status"column="STATUS"/><resultproperty="address1"column="ADDR1"/><resultproperty="address2"column="ADDR2"/><resultproperty="city"column="CITY"/><resultproperty="state"column="STATE"/><resultproperty="zip"column="ZIP"/><resultproperty="country"column="COUNTRY"/><resultproperty="phone"column="PHONE"/><resultproperty="languagePreference"column="LANGPREF"/><resultproperty="favouriteCategoryId"column="FAVCATEGORY"/><resultproperty="listOption"column="MYLISTOPT"/><resultproperty="bannerOption"column="BANNEROPT"/><resultproperty="bannerName"column="BANNERNAME"/><resultMap>然后再援用:<selectid="getAccountByUsername"resultMap="accountResult"parameterClass="string">selectSIGNON.USERNAMEasUSERID,ACCOUNT.EMAIL,ACCOUNT.FIRSTNAME,ACCOUNT.LASTNAME,ACCOUNT.STATUS,ACCOUNT.ADDR1,ACCOUNT.ADDR2,ACCOUNT.CITY,ACCOUNT.STATE,ACCOUNT.ZIP,ACCOUNT.COUNTRY,ACCOUNT.PHONE,PROFILE.LANGPREF,PROFILE.FAVCATEGORY,PROFILE.MYLISTOPT,PROFILE.BANNEROPT,BANNERDATA.BANNERNAMEfromACCOUNT,PROFILE,SIGNON,BANNERDATAwhereACCOUNT.USERID=#value#andSIGNON.USERNAME=ACCOUNT.USERIDandPROFILE.USERID=ACCOUNT.USERIDandPROFILE.FAVCATEGORY=BANNERDATA.FAVCATEGORY<select>再翻开AccountSqlMapDao.java看看:
publicAccountgetAccount(Stringusername){return(Account)queryForObject("getAccountByUsername",username);}
思索一下,看分明个中的联系关系了吧。翻开AccountService.JAVA:
publicAccountgetAccount(Stringusername){
returnaccountDao.getAccount(username);
}
翻开AccountBean.java:
publicStringnewAccount(){
try{
accountService.insertAccount(account);
account=accountService.getAccount
(account.getUsername());//在这挪用的
myList=catalogService.getProductListByCategory
(account.getFavouriteCategoryId());
authenticated=true;
repeatedPassword=null;
return"success";
}catch(Exceptione){
thrownewBeanActionException("Therewasaproblem
creatingyourAccountInformation.Cause:"+e,e);}
}
看了半天,写个例子尝尝吧
packagecom.ibatis.jpetstore.service;
importcom.ibatis.dao.client.DaoManager;
importcom.ibatis.jpetstore.domain.*;
importcom.ibatis.jpetstore.persistence.DaoConfig;
importcom.ibatis.common.util.PaginatedList;
importcom.ibatis.jpetstore.persistence.iface.*;
importjava.util.*;
publicclassIbatisTest{
privateDaoManagerdaoManager=
DaoConfig.getDaomanager();
privateAccountDaoaccountDao;
publicIbatisTest(){
accountDao=(AccountDao)daoManager.getDao
(AccountDao.class);
Accountaccount=accountDao.getAccount("j2ee","j2ee");
System.out.println(account.getFirstName());
}
publicstaticvoidmain(String[]args){
IbatisTestibatisTest=newIbatisTest();
}
}
你还能够尝尝insert,update,delete。IBATIS里但是撑持分页的,用起来很爽的,人人有空仍是花点工夫研究一下吧。关于DEBUG:我前两天照搬JPETSTORE的架构试着写了一个结交网站,基础上挺顺遂,只是感到DEBUG对照贫苦,一般为了找一个错花上几个小时。JBUILDER带的DEBUG我没用过,但但是一定一定和DELPHI上的DEBUG是有大相径庭的。并且JUNIT我也是刚入手下手学,也没用上。这里,我把本人对照土的举措先容一下:一,当你写了新的O/RMAPPING的时分,能够先写个包括MAIN办法的类测试一下,就向我下面的测试例子一样。二,当你想跟踪变量值的时分,你能够使用IBATIS带的工具类ActionContext把变量写到SESSION里,好比你有你个FORMBEAN:UserBean.java,个中有一个办法是处置用户登录的,你为了跟踪用户的用户名和暗码,能够如许写:
publicStringlogon(){
try{
user=userService.getUser(user.getUsername(),
user.getPassword());
if(user==null){
clear();
return"failure";
}else{
user.setPassword(null);
authenticated=true;
user.setMessageCount
(messageService.getMessageNewCount(user.getUserId()));
ActionContext.getActionContext().setSimpleMessage
("newCount="+newCount.toString()+"
toUserId="+user.getUserId());//写进SESSION
return"failure";}//导进到Error.jsp
}catch(Exceptione){
thrownewBeanActionException("Therewasaproblem
logoningyourAccountInformation.Cause:"+e,e);
}
}
固然你必要包括上面的语句
importcom.ibatis.struts.ActionContext;
Error.jsp:
<%@tagliburi="struts-logic"prefix="logic"%>
<%@tagliburi="struts-bean"prefix="bean"%>
<%@tagliburi="struts-html"prefix="html"%>
<%@pageimport="java.io.PrintWriter"%>
<logic:presentname="message">
<bean:write

name="message"/>
</logic:present>
//输入你必要的信息
<logic:presentname="errors">
<logic:iterateid="error"name="errors">


<bean:writename="error"/>

</logic:iterate>
</logic:present>
<logic:notPresentname="BeanActionException">
<logic:notPresentname="message">
Somethinghappened...
Butnofurtherinformationwasprovided.
</logic:notPresent>
</logic:notPresent>


<logic:presentname="BeanActionException">>
Error!

再见西城 发表于 2015-1-21 15:14:32

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

冷月葬花魂 发表于 2015-1-30 20:13:06

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

精灵巫婆 发表于 2015-2-1 17:05:19

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

谁可相欹 发表于 2015-2-7 10:32:05

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

若相依 发表于 2015-2-21 18:39:04

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

admin 发表于 2015-2-26 12:40:41

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

老尸 发表于 2015-2-26 21:16:32

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

莫相离 发表于 2015-2-28 07:27:31

Java 编程语言的风格十分接近C、C++语言。

乐观 发表于 2015-3-4 00:29:27

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

兰色精灵 发表于 2015-3-15 19:35:26

是一种突破用户端机器环境和CPU

小妖女 发表于 2015-3-20 20:21:04

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

若天明 发表于 2015-4-8 15:20:11

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

因胸联盟 发表于 2015-4-10 10:07:24

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

蒙在股里 发表于 2015-4-12 05:03:30

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

灵魂腐蚀 发表于 2015-4-27 10:13:45

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

简单生活 发表于 2015-5-6 15:10:37

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

海妖 发表于 2015-6-10 05:38:21

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

再现理想 发表于 2015-7-7 23:37:56

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

透明 发表于 2015-7-18 22:23:31

是一种为 Internet发展的计算机语言
页: [1]
查看完整版本: JAVA网页编程之从Jpetstore 入手下手IBATIS之旅