Struts+iBatis简例

 先说两句:这个搭配似乎和现在的主流(struts+spring+hibernate)差太远,不过做啥还是从简单来的好,先入门,再深入嘛(其实spring和hibernate我也不会,哦呵呵呵呵....)
开发环境:NetBeans5.5,iBatis版本未知,大概是2.0(汗个...),SQLServer2000
开始:
新建一个web工程,建立的时候记得把struts选上哦~~
建立一个jsp页面,比如叫做iBatisTest.jsp
<% @page contentType="text/html" %>
<% @page pageEncoding="UTF-8" %>
<% @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"  %>
<% @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"  %>
<% @ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"  %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd"
>

< html >
    
< head >
        
< meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8" >
        
< title > iBatis Test </ title >
    
</ head >
    
< body >
    
< h1 > iBatis Test </ h1 >
    
< html:errors />< br >
    
< html:form  action ="/selectUserInfo.do"   >
        username:
< html:text  property ="username"  value ="gao"  size ="40" ></ html:text >< br >
        password:
< html:password  property ="password"  value ="111"  size ="40" ></ html:password >< br >
        
< html:submit  value ="submit"  property ="sub" />
    
</ html:form >< br >
    
< logic:present  name ="user" >
        username:
< bean:write  name ="user"  property ="username" />< br >
        password:
< bean:write  name ="user"  property ="password" />< br >
        userID:
< bean:write  name ="user"  property ="userID" />
    
</ logic:present >
    
</ body >
</ html >
上面是页面代码,简单说明一下,使用的都是标准struts标签,一个表单,下面那些主要是为了在查询数据库成功后接受查询返回的消息的,这些都是小儿科啦,下面主要介绍iBatis的配置:



1.导入必要的jar包,这里导入了六个,三个是iBatis用到的包,三个是数据库驱动包(放在lib文件夹下面就成啦)
ibatis-common-2.jar,ibatis-dao-2.jar,ibatis-sqlmap-2.jar,masqlserver.jar,mabase.jar,mautil.jar
2.建立config文件,我的目录是在工程根目录下com/iBatis/Config/SqlMapConfig.xml这个路径随意,这个xml文件的名字也是随意,只要你自己记住就成了,这个文件是配置文件,具体内容如下:
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd"
>
< sqlMapConfig >
    
< properties  resource ="/com/iBatis/Config/SqlMapConfig.properties"   />
    
< settings
        
cacheModelsEnabled ="true"
        enhancementEnabled
="true"
        lazyLoadingEnabled
="true"
        maxRequests
="32"
        maxSessions
="10"
        maxTransactions
="5"
        useStatementNamespaces
="false"
    
/>
    
< transactionManager  type ="JDBC"   >
        
< dataSource  type ="SIMPLE" >
            
< property  name ="JDBC.Driver"  value ="${driver}" />
            
< property  name ="JDBC.ConnectionURL"  value ="${url}" />
            
< property  name ="JDBC.Username"  value ="${username}" />
            
< property  name ="JDBC.Password"  value ="${password}" />
            
< property  name ="JDBC.DefaultAutoCommit"  value ="true"   />
            
< property  name ="Pool.MaximumActiveConnections"  value ="10" />
            
< property  name ="Pool.MaximumIdleConnections"  value ="5" />
            
< property  name ="Pool.MaximumCheckoutTime"  value ="120000" />
            
< property  name ="Pool.TimeToWait"  value ="500" />
            
< property  name ="Pool.PingQuery"  value ="select 1 from ACCOUNT" />
            
< property  name ="Pool.PingEnabled"  value ="false" />
            
< property  name ="Pool.PingConnectionsOlderThan"  value ="1" />
            
< property  name ="Pool.PingConnectionsNotUsedFor"  value ="1" />
        
</ dataSource >
    
</ transactionManager >
    
< sqlMap  resource ="com/iBatis/SqlMap/Test.xml"   />
</ sqlMapConfig >
< properties  resource ="/com/iBatis/Config/SqlMapConfig.properties"   />
这句是properties文件路径,用来提供数据库连接信息
< sqlMap  resource ="com/iBatis/SqlMap/Test.xml"   />
这句是SqlMap文件路径,用来记录数据库操作语句
其他部分不必改动,上述两个文件的文件名和路径可以自己随意设置,具体内容下面会叙述
3.
properties文件

driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=GaoTest
username=sa
password=infact

说明:
driver指示的是驱动,不必改动
url指示数据库连接串,最后那个DatabaseName是你的数据库名字,我的是GaoTest(鄙姓高,嘎嘎)
username指示的是用户名,password指示密码(就是你数据库的用户名密码,这里需要用数据库身份验证登录)
4.SqlMap文件
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd"
>
< sqlMap  namespace ="GaoTest" >      < select  id ="selectUserInfo"  parameterClass ="com.myapp.Beans.UserBean"  resultClass ="com.myapp.Beans.UserBean" >
        select * from [user] where username=#username# and password=#password#
    
</ select >
</ sqlMap >
这里主要需要注意的是:
这部分语句主要是根据我们在jsp表单里提供的用户名密码来查询用户信息(相当于验证的感觉)
parameterClass和 resultClass 是用来提供查询参数和接收查询结构的javaBean,这个bean的结构也非常简单,只需要将你数据表中的字段分别在bean中声明,并写一下set和get方法就可以了(类型和名称需要和数据表中的字段一致)
这个bean的路径和名字也是随意的,这里的路径是我的程序中的路径
public   class  UserBean  {
    
private int userID;
    
private String username;
    
private String password;
    
public UserBean() {
    }

    
public int getUserID() {
        
return userID;
    }

    
public void setUserID(int userID) {
        
this.userID = userID;
    }

    
public String getUsername() {
        
return username;
    }

    
public void setUsername(String username) {
        
this.username = username;
    }

    
public String getPassword() {
        
return password;
    }

    
public void setPassword(String password) {
        
this.password = password;
    }
    
}

当我们想使用bean中提供的参数时只需在sql语句中用##标识出,比如#username#即表示bean中的username变量,这里还需要说明一下的是,我的表名为user(又不专业了,因为这个是sqlserver的保留字,想用它做表名,需要在查询的时候加上[],如[user],惭愧惭愧
我这里的数据表的结构是
三个字段userID,username,password,表名user
userID是int类型,其他两个是char(写在程序里用String就可以)
5,在程序中操作数据库
通过以上的设置,环境就算搭建完毕,下面是在程序中的调用
import  com.ibatis.common.resources.Resources;
import  com.ibatis.sqlmap.client.SqlMapClient;
import  com.ibatis.sqlmap.client.SqlMapClientBuilder;
import  java.io.IOException;
import  java.io.Reader;
import  java.sql.SQLException;
//类名是随意的
public   class  DBOperation  {
    
private String resource = "com/iBatis/Config/SqlMapConfig.xml";//这个路径是我们放置ibatis配置文件的地方
    
private SqlMapClient sqlMap = null;
    
public DBOperation() {
        Reader reader 
= null;
        
try {
            reader 
= Resources.getResourceAsReader(resource);
        }
 catch (IOException ex) {
            ex.printStackTrace();
        }

        sqlMap 
= SqlMapClientBuilder.buildSqlMapClient(reader);
    }

    
    
public Object selectObj(String sqlID,Object obj){
        Object result 
= null;
        
try {
            sqlMap.startTransaction();
            result 
= sqlMap.queryForObject(sqlID,obj);
            sqlMap.commitTransaction();
        }
 catch (SQLException ex) {
            ex.printStackTrace();
        }

        
return result;
    }

}
这样一个简单的实现查询功能的方法就写好了,这个方法的两个参数的含义为:
sqlID 表示SqlMap中我们写的select代码段的id ( <select id="selectUserInfo" )
obj 表示提供查询参数的输入对象,我们的例子就应该是那个UserBean
6.在action中调用这个方法
private final static String SUCCESS = "success";
    public
 ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            
throws  Exception  {
        SelectUserInfoForm formSUI 
= (SelectUserInfoForm)form;
        UserBean user 
= new UserBean();
        user.setUsername(formSUI.getUsername());
        user.setPassword(formSUI.getPassword());
        user 
= (UserBean) new DBOperation().selectObj("selectUserInfo",user);
        request.setAttribute(
"user",user);
        
return mapping.findForward(SUCCESS);
        
    }
这个ActionForm是用来接我们页面上的那个表单的,代码就不贴了
UserBean 就是我们对应数据表的字段建立的bean
调用方法后将查询数据库,然后返回一个UserBean形式的返回对象,如果查询成功,里面就记载了这个用户的信息,当然里面到底想存什么东西,我们可以在SqlMap中的查询语句里写,我们这次的查询是select * 的,所以返回的用户所有的信息
这里的forward跳转,是跳转回我们提交表单的那个页面的,当然我们也可以写成让它跳转到其他页面的

运行一下,就可以看到效果啦,提交表单后,会返回查询出的用户信息
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值