IBATISDWR构建webapp.doc_第1页
IBATISDWR构建webapp.doc_第2页
IBATISDWR构建webapp.doc_第3页
IBATISDWR构建webapp.doc_第4页
IBATISDWR构建webapp.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IBATIS+DWR构建webapp2009.10.11王凡WW1. 简介1.1. Ibatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。1.2. DwrDwr(Direct Web Remoting):是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.1.3. 准备Ibatis最新版是3.0beta,不太成熟,选择较近的版本,下载地址为:/ibatis/binaries/ibatis.java/ibatis-26.zipDwr最新版本为3rc1,下载地址为:/files/documents/2427/120387/dwr.jar2. 配置首先是在eclipse中新建一个webapp。我们要达到的目标很简单,就是直接在前端用js调用后面的sql。2.1. Ibatis配置在src下面新建一个sqlMapComfig.xml文件作为Ibatis的配置文件,内容很简单:property name=JDBC.ConnectionURLvalue=jdbc:oracle:thin:2:1521:bidev2.2. Dwr的配置在web-info目录下面找到web.xml,在其中添加以下两段:dwr-invokerDWR ServletDirect Web Remoter Servletorg.directwebremoting.servlet.DwrServletdebugtruedwr-invoker/ts/*红色部分可以替换为自己项目的名称。然后在当前目录下建立一个dwr.xml得文件启动项目可以查看下:http:/localhost:8008/youapp/ts3. 认识Ibatis需要一个factory的类,首先编写一个factory类,代码如下:package .tsingtao;import java.io.Reader;import java.nio.charset.Charset;import org.apache.log4j.Logger;import mon.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;public class sqlFactory private static SqlMapClient sqlMapper;private static Logger log = Logger.getLogger(sqlFactory.class );statictryString resource = sqlMapConfig.xml;Resources.setCharset(Charset.forName(UTF-8);Reader reader = Resources.getResourceAsReader(resource);sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);catch(Exception e)System.out.println(e);log.error(e); throw new RuntimeException(e);public static SqlMapClient getSqlMapClient()return sqlMapper;3.1. 认识ibatis在上面的sqlmap的配置文件中,红色部分为调用外部的sqlmap文件,我们的sql代码写在里面。先写句简单的:select abc from dualJava中调用的代码为:System.out.print(sqlFactory.getSqlMapClient().queryForObject(test);3.2. 认识Dwr在dwr.xml文件中添加:红色是在allow中添加一个对应关系。新建一个test类,路径为上面的value。package .tsingtao;public class test public String getname()return wangfan;打开地址:http:/localhost:8008/oracledimn/ts打开这个超链接。找到刚刚新建的方法:运行它看下它的执行代码: getname( ); var reply0 = function(data) if (data != null & typeof data = object) alert(dwr.util.toDescriptiveString(data, 2); else dwr.util.setValue(d0, dwr.util.toDescriptiveString(data, 1); Reply0为回调函数。4. DWR进阶4.1. Dwr与pojo新建一个pojo类package .tsingtao.pojo;public class user private String NAME;private int AGE;public void setNAME(String name)NAME=name;public void setAGE(int age)AGE=age;public String getNAME()return NAME;public int getAGE()return AGE;返回一个user类的数组:public user changeu(user u)user uss=new user10;for(int i=0;i10;i+)user us=new user();us.setNAME(u.getNAME()+HI+i);us.setAGE(u.getAGE()+10+i);ussi=us;return uss;页面调用代码function testp()var user=;user.NAME = WF; user.AGE = 21; test.changeu(user, reply2)var reply2 = function(data) if (data != null & typeof data = object) alert(dwr.util.toDescriptiveString(data, 2); else alert(dwr.util.toDescriptiveString(data, 1);在这里调用成功的话,直接转换为字符串弹出。使用复杂的数据类型需要在dwr里面加个转换4.2. Dwr与ArrayList依旧是在test中写一个函数:public Map getmap()Map mp=new HashMap();mp.put(a,b);return mp;public List getlist()List li=new ArrayList();li.add(getmap();li.add(getmap();return li;在dwr中加转换:页面调用:function testli() test.getlist(reply1); var reply1=function(data) alert(data.length); 4.3. 小结在这里dwr将pojo和map,list装换成了json。5. DWR,ibatis在这里的主要思路是将ibatis查询出的结果放到一个list中,再将list的结果以json的形式传到前台工js使用。5.1. Sqlmap在sqlmap的result类型中一般是resultType和resultClass,在开始的时候我们返回的是String型,所以选择的是String,选择我们要返回一个List,但是单挑记录可以组成HashMap 。select sa.agent_name,sa.host_port,sad.agent_desc from snp_agentsa,snp_agent_desc sad where sad.i_agent(+)=sa.i_agent order bysa.i_agent5.2. 中间层中间我们可以写个通用的java方法:package .tsingtao;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class sqlBase public List getList(String QueryName) throws SQLExceptionArrayList al = (ArrayList) sqlFactory.getSqlMapClient().queryForList(QueryName);return al;在dwr中添加映射5.3. 前台function sqllist() sqlbase.getList(agentList,reply); var reply=function(data) if (data != null & typeof data = object) options=data; dwr.util.removeAllOptions(agentOption);/将返回的结果填充到listbox中 dwr.util.addOptions(agentOption, data, HOST_PORT,AGENT_NAME, escapeHtml:false ); selectChanged(document.getElementById(agentOption); else alert(dwr.util.toDescriptiveString(data, 1); 5.4. 正在加载的代码Dwr提供正在加载的文字,已经封装好了,在body标签中onload的事件中添加dwr.util.useLoadingMessage(正在读取数据,请稍候!);需要图片的则需要另外的代码function useLoadingImage(imageSrc,txtd) var loadingImage; var txt=正在加载.; if (imageSrc) loadingImage = imageSrc; else loadingImage = /images/Loading.gif; if(txtd) txt=txtd dwr.engine.setPreHook(function() var disabledImageZone = $(disabledImageZone); if (!disabledImageZone) disabledImageZone = document.createElement(div); disabledImageZone.setAttribute(id, disabledImageZone); disabledImageZone.style.position = absolute; disabledImageZone.style.zIndex = 1000; disabledImageZone.style.left = 0px; disabledImageZone.style.top = 0px; disabledImageZone.style.width = 100%; disabledImageZone.style.height = 100%; var imgDiv=document.createElement(div); var imageZone = document.createElement(img); imageZone.setAttribute(id, imageZone); imageZone.setAttribute(src, imageSrc); imageZone.style.position = absolute; var w = document.body.clientWidth; var h = document.body.clientHeight; var t = h / 2 - 10; var r = w / 2 - 10; imageZone.style.top = t+px; imageZone.style.right = r+px; imgDiv.appendChild(imageZone); var txtDiv=document.createElement(div); txtDiv.style.position = absolute; t=t+70; r=r-10; txtDiv.style.top = t+px; txtDiv.style.right = r+px; txtDiv.innerText=txt; txtDiv.style.color=red; dis

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论