iBatis初体验

新建一个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>

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跳转,是跳转回我们提交表单的那个页面的,当然我们也可以写成让它跳转到其他页面的

运行一下,就可以看到效果啦,提交表单后,会返回查询出的用户信息

你可能感兴趣的:(数据结构,sql,bean,ibatis,struts)