新建一个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跳转,是跳转回我们提交表单的那个页面的,当然我们也可以写成让它跳转到其他页面的
运行一下,就可以看到效果啦,提交表单后,会返回查询出的用户信息