?自: http://dev.csdn.net/article/79/79164.shtm<!--[if !supportLists]-->1.?? <!--[endif]-->總體描述
以Eclipse為例說明ibatis用法,數據庫為MS SQL2000,ibatis版本為2.0, jDK1.5, 以對一個用戶信息表 user_info的插入、查詢(單條記錄),多記錄查詢為例說明itatis的用法。
????
說明:
???? 本文適合初次接觸ibatis的讀者。
???? 文章中如有不妥之處,歡迎指正。
???? 如國引用,請說明出處,謝謝。
<!--[if !supportLists]-->2.?? <!--[endif]-->準備工作
<!--[if !supportLists]-->1.?????? <!--[endif]-->安裝Eclipse 3.0.1
<!--[if !supportLists]-->2.?????? <!--[endif]-->安裝jdk1.5
<!--[if !supportLists]-->3.?????? <!--[endif]-->下載 ibatis 2.0 開發包? www.ibatis.com
<!--[if !supportLists]-->4.?????? <!--[endif]-->下載MS SQL 的JDBC驅動包, MSJDBC3.0 SP3
<!--[if !supportLists]-->5.?????? <!--[endif]-->下載日志操作包 commons-logging.jar
<!--[if !supportLists]-->3.?? <!--[endif]-->開發步驟
<!--[if !supportLists]-->1.?????? <!--[endif]-->新建J2EE工程 test
<!--[if !supportLists]-->2.?????? <!--[endif]-->在test下建立包 cjs
<!--[if !supportLists]-->3.?????? <!--[endif]-->建立文件夾 sqlmap
<!--[if !supportLists]-->4.?????? <!--[endif]-->建立文件夾 sqlmap.map
<!--[if !supportLists]-->5.?????? <!--[endif]-->在sqlmap.map 下建立三個文件:
SqlMapConfigExample.properties
sql-map-config.xml
user.xml
?
文件內容如下:
?
SqlMapConfigExample.properties
-----------------------------------------------------------------------------------------------------------
?
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;
DatabaseName=java
username=sa
password=tn
-----------------------------------------------------------------------------------------------------------
sql-map-config.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="sqlmap/map/SqlMapConfigExample.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}"/>
??? </dataSource>
?? </transactionManager>
?
????
?? <sqlMap resource="sqlmap/map/User.xml" />
</sqlMapConfig>
-----------------------------------------------------------------------------------------------------------
?
?
user.xml
-----------------------------------------------------------------------------------------------------------
?
<?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="User">
??? <select id="getUser" parameterClass="java.lang.Integer"
??????? resultClass="cjs.User">
??????? SELECT * FROM user_info WHERE uid=#uid#
? ??</select>
??? <select id="getAllUser" resultClass="cjs.User">
??? select
????? ????? * from user_info
??? where name = #value#
? ? </select>
?
? ? <insert id="insertUser" parameterClass="cjs.User">
????? ?? INSERT INTO
???????????? user_info(name, sex, age, addr, zipcode)
????? ?? VALUES (#name#, #sex#, #age#, #addr#, #zipcode#)
? ? </insert>
</sqlMap>
-----------------------------------------------------------------------------------------------------
?
<!--[if !supportLists]-->6.?????? <!--[endif]-->在test上右鍵,點擊導入,將
commonslogging.jar
ibatis-common-2.jar
ibatis-dao-2.jar
ibatis-sqlmap-2.jar
msbase.jar
mssqlserver.jar
msutil.jar
導入到Lib文件夾中
<!--[if !supportLists]-->7.?????? <!--[endif]-->在項目-》屬性-》構建路徑中添加外部 jar的引用,也就是上面幾個 jar
<!--[if !supportLists]-->8.?????? <!--[endif]-->建立一個數據庫 java,并執行下面腳本
Table.sql
-----------------------------------------------------------------------------------------------------
CREATETABLE user_info
(
? uid intidentity(1,1) primarykey,
? namevarchar(20),
? sex int,
? ageint,
? addr varchar(50),
? zipcode varchar(6),
);
-----------------------------------------------------------------------------------------------------
?
<!--[if !supportLists]-->9.?????? <!--[endif]-->在cjs包下面編寫類
Myapp.java
Operates.java
User.java
?
內容如下:
Myapp.java
-----------------------------------------------------------------------------------------------------------
/*
?* 創建日期2005-10-26
?*
?* TODO 要更改此生成的文件的模板,請轉至
?* 窗口-首選項- Java -代碼樣式-代碼模板
?*/
?
/**
?* @author Administrator
?*
?* TODO 要更改此生成的類型注釋的模板,請轉至
?* 窗口-首選項- Java -代碼樣式-代碼模板
?*/
package cjs;
import java.io.Reader;
?
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
?
?
public class Myapp {
??? private static final SqlMapClient sqlMap;
??? static {
??????? try {
??????????? String resource = "sqlmap/map/sql-map-config.xml";
??????????? Reader reader = Resources.getResourceAsReader (resource);
??????????? sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
??????? }
??????? catch (Exception e) {
???????? e.printStackTrace();???
??????? throw new RuntimeException ("Error initializing MyApp class. Cause:"+e);
??????? }
??? }
??? public static SqlMapClient getSqlMapInstance () {
??????? return sqlMap;
??? }
}
-----------------------------------------------------------------------------------------------------------
?
?
Operates.java
-----------------------------------------------------------------------------------------------------------
/*
?* 創建日期2005-10-26
?*
?* TODO 要更改此生成的文件的模板,請轉至
?* 窗口-首選項- Java -代碼樣式-代碼模板
?*/
?
/**
?* @author Administrator
?*
?* TODO 要更改此生成的類型注釋的模板,請轉至
?* 窗口-首選項- Java -代碼樣式-代碼模板
?*/
?
package cjs;
import cjs.User;
import java.util.Iterator;
import java.util.List;
?
import com.ibatis.sqlmap.client.SqlMapClient;
?
public class Operates {
private static void insertData(User newUser){
??????? SqlMapClient sqlMap = Myapp.getSqlMapInstance();
??????? try{
?????????? Integer uid= new Integer(1);
??????? //?? User user = (User) sqlMap.queryForObject ("getUser", uid);
??????
?????????? System.out.println("Use ibatis to Insert a new User:");
?????????? /*
?????????? System.out.println("Uid = " + "系統自動產生");
?????????? System.out.println("name =" + newUser.getName());
?????????? System.out.println("setSex =" + newUser.getSex());
?????????? System.out.println("setAge = " + newUser.getAge());
?????????? System.out.println("setAddr = " + newUser.getAddr());
?????????? System.out.println("setZipcode = " + newUser.getZipcode());
?????????? */
?????????? System.out.println(newUser.toString());
?????????? sqlMap.insert ("insertUser", newUser);
?????????? System.out.println("Insert success!");
??????????
?? ?????}
??????? catch(Exception e){
?????????????? e.printStackTrace();
??????? }
}
private static User query(Integer uid){
??????? User myuser = new User();
???????
??????? SqlMapClient sqlMap = Myapp.getSqlMapInstance();
??????? try{
?????????????? myuser = (User)sqlMap.queryForObject ("getUser", uid);
??????? }catch(Exception e){
?????????????? e.printStackTrace();
??????? }finally{
?????????????? return myuser;
??????? }
}
private static void queryList(String name){
??????? try{
?????????????? SqlMapClient sqlMap = Myapp.getSqlMapInstance();
?????????????? List userList = sqlMap.queryForList("getAllUser",name);
?????????????? if(userList!=null && !userList.isEmpty()){
????????????????????? User tmpUser = new User();
????????????????????? System.out.println("There are " + userList.size()+ " rows records"
??????????????????????????????????? + " whose name is " + name + ":" );
????????????????????? for(Iterator iter = userList.iterator(); iter.hasNext();){
???????????????????????????? tmpUser = (User)iter.next();
???????????????????????????? System.out.println(tmpUser.toString());
????????????????????? }
?????????????? }else{
????????????????????? System.out.println("There is 0 row record whose name is: " + name);
?????????????? }
??????? }catch(Exception e){
?????????????? e.printStackTrace();
??????? }
}
??? public static void main(String[] args) {
??????? User newUser= new User();
??????? //newUser.setUid(6);
??????? newUser.setName("cjs");
??????? newUser.setSex(2);
??????? newUser.setAge(2);
??????
??????? newUser.setAddr("dfghg");
??????? newUser.setZipcode("301");
???????
??????? // insert
??????? //insertData(newUser);
???????
??????? // query a object
??????? /*
??????? Integer uid= new Integer(5);
??????? User getUser = query(uid);
??????? System.out.println("Query User whose id equal " + uid + ":");
??????? System.out.println(getUser.toString());
??????? */
???????
??????? // query many objects
??????? String name = "cjs";
??????? queryList(name);
??
??? }
}
-----------------------------------------------------------------------------------------------------------
?
User.java
-----------------------------------------------------------------------------------------------------------
?
package cjs;
/*
?* 創建日期2005-10-26
?*
?* TODO 要更改此生成的文件的模板,請轉至
?* 窗口-首選項- Java -代碼樣式-代碼模板
?*/
?
/**
?* @author Administrator
?*
?* TODO 要更改此生成的類型注釋的模板,請轉至
?* 窗口-首選項- Java -代碼樣式-代碼模板
?*/
public class User {
??? public int uid;
??? public String name;
??? public int sex;
??? public int age;
??? public String addr;
??? public String zipcode;??
?
??? public String getAddr() {
??????? return addr;
??? }
??? public void setAddr(String addr) {
??????? this.addr = addr;
??? }
??? public int getAge() {
??????? return age;
??? }
??? public void setAge(int age) {
??????? this.age = age;
??? }
??? public String getName() {
??????? return name;
??? }
??? public void setName(String name) {
??????? this.name = name;
??? }
??? public int getSex() {
??????? return sex;
??? }
??? public void setSex(int sex) {
??????? this.sex = sex;
??? }
??? public int getUid() {
??????? return uid;
??? }
? ??public void setUid(int uid) {
??????? this.uid = uid;
??? }
??? public String getZipcode() {
??????? return zipcode;
??? }
??? public void setZipcode(String zipcode) {
??????? this.zipcode = zipcode;
??? }
???
??? public String toString(){
??? String szUser = new String();
??? szUser += "Uid = " + uid + "; ";
??? szUser += "name =" + name + "; ";
??????? szUser += "setSex =" + sex + "; ";
??????? szUser += "setAge = " + age+ "; ";
??????? szUser += "setAddr = " + addr+ "; ";
??????? szUser += "setZipcode = " + zipcode+ "; ";
??????? return szUser;
??? }
}
-----------------------------------------------------------------------------------------------------------
?
<!--[if !supportLists]-->4.?? <!--[endif]-->運行
通過Operates.java 中的main() 來調試各種情況,包括插入數據,查詢一條數據,查詢多條數據。
<!--[if !supportLists]-->5.?? <!--[endif]-->注意
<!--[if !supportLists]-->1.????????????? <!--[endif]-->連接不同的數據庫,通過修改SqlMapConfigExample.properties 中的 driver和URL就可以了。
<!--[if !supportLists]-->2.????????????? <!--[endif]-->注意sql-map-config.xml 的路徑
<!--[if !supportLists]-->3.????????????? <!--[endif]-->參數中為Integer時,最好指定為 java.Lang.Integer,如果為字符串,則可以不指定
<!--[if !supportLists]-->4.????????????? <!--[endif]-->注意返回結果類型的指定
<!--[if !supportLists]-->5.????????????? <!--[endif]-->注意插入語句中,sql語句中的變量為類的屬性值。
?