1.關于ibatis
ibatis是一種半自動化的ORM框架
說明:此文章來自 月月鳥0820 http://www.cnblogs.com/java-pan/archive/2012/03/21/ibatis.html
2.項目環境介紹
System:WIN7 JDK:編譯1.4 開發1.5 數據庫:oracle的dept表

3.文件介紹
Dept.java 一個javabean
IDeptSV.java 一個接口,用來聲明增、刪、改、查的方法
DeptSVImpl.java 對IDeptSV接口的實現,主要包括獲得SqlMapClient對象以及方法體的實現
ShowDept.java 用來測試的方法.通過ECS插件把查詢的結果寫入到ibatis.html文件中
Dept.xml 實體和數據庫表對應的映射文件,主要是寫增、刪、改、查的sql語句
SqlMap.properties 數據庫配置文件,以鍵值對的形式聲明數據庫的driver、url、username、password
SqlMapConfig.xml ibatis的核心配置文件,主要是引入數據庫配置文件,配置數據庫連接相關的屬性;引入實體類和數據庫表的映射文件(本次用到的只是最簡單的配置文件)
4.下載jar包
ibatis-2.3.4.jar ibatis的jar包
classes12.jar oracle數據庫的驅動包
ecs-1.4.2.jar ECS插件包,為了鞏固這個插件的使用故用此插件顯示查詢結果
三個jar包壓縮成了一個文件,下載路徑如下:http://files.cnblogs.com/java-pan/jar.rar
5.關于class&method的介紹
Reader
java.io.Reader
SqlMapClientBuilder
com.ibatis.sqlmap.client.SqlMapClientBuilder
SqlMapClient
com.ibatis.sqlmap.client.SqlMapClient
關于ECS插件相關類的介紹請見文章
http://www.cnblogs.com/java-pan/archive/2012/01/08/ecs.html
start
新建web project項目Ibatis,導入jar包(數據庫驅動包,ibatis包,ECS的jar包),各個文件的代碼如下:
1.Dept.java

Dept.java
1 package ibatis;
2
3 /**
4 *Module: Dept.java
5 *Description: 使用orcle自帶的部門表dept--javabean
6 *Company:
7 *Author: ptp
8 *Date: Mar 19, 2012
9 */
10 public class Dept {
11 // 構造方法
12 public Dept() {
13
14 }
15
16 private int deptNo;
17 private String dName;
18 private String loc;
19
20 public int getDeptNo() {
21 return deptNo;
22 }
23
24 public void setDeptNo(int deptNo) {
25 this.deptNo = deptNo;
26 }
27
28 public String getDName() {
29 return dName;
30 }
31
32 public void setDName(String name) {
33 dName = name;
34 }
35
36 public String getLoc() {
37 return loc;
38 }
39
40 public void setLoc(String loc) {
41 this.loc = loc;
42 }
43 }
2.IDeptSV.java

IDeptSV.java
1 package ibatis;
2
3 import java.util.List;
4
5 /**
6 *Module: IDeptSV.java
7 *Description: CRUD的接口類
8 *Company:
9 *Author: ptp
10 *Date: Mar 19, 2012
11 */
12 public interface IDeptSV {
13
14 // 添加
15 public void addDept(Dept dept);
16
17 //添加數據 主鍵自動生成
18 public void addDeptSequenct(Dept dept);
19
20 // 刪除
21 public void delByDeptNo(int deptNo);
22
23 // 查詢 所有記錄
24 public List queryDept();
25
26 // 根據條件查詢
27 public Dept queryByDeptNo(int deptNo);
28
29 //模糊查詢 按照DNAME查詢
30 public List queryByName(String dName);
31
32 // 修改
33 public void updateDept(Dept dept);
34
35 }
3.DeptSVImpl.java

DeptSVImpl.java
1 package ibatis;
2
3 import java.io.IOException;
4 import java.io.Reader;
5 import java.sql.SQLException;
6 import java.util.List;
7 import com.ibatis.common.resources.Resources;
8 import com.ibatis.sqlmap.client.SqlMapClient;
9 import com.ibatis.sqlmap.client.SqlMapClientBuilder;
10 /**
11 * Module: DeptSVImpl.java
12 * Description: CRUD的實現類
13 * Company:
14 * Author: ptp
15 * Date: Mar 19, 2012
16 */
17 public class DeptSVImpl implements IDeptSV {
18 // 定義ibatis映射文件的位置
19 private static String resource = "ibatis/SqlMapConfig.xml";
20 private static SqlMapClient sqlMapClient = null;
21 static {
22 try {
23 Reader reader = Resources.getResourceAsReader(resource);
24 sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
25 reader.close();
26 // 設置為自動提交
27 // System.out.println(sqlMapClient.getDataSource().getConnection()
28 // .getAutoCommit());
29 } catch (IOException e) {
30 e.printStackTrace();
31 }
32 }
33
34 /*
35 * (non-Javadoc) 添加記錄
36 */
37 public void addDept(Dept dept) {
38 try {
39 sqlMapClient.startTransaction();// 開啟事務
40 sqlMapClient.insert("insertDept", dept);
41 sqlMapClient.commitTransaction();// 提交事務
42 System.out.println("******成功添加1條記錄******");
43 } catch (SQLException e) {
44 try {
45 sqlMapClient.getCurrentConnection().rollback();// 回滾事務
46 } catch (SQLException e1) {
47 e1.printStackTrace();
48 }
49 e.printStackTrace();
50 } finally {
51 try {
52 sqlMapClient.endTransaction();// 結束事務
53 } catch (SQLException e) {
54 e.printStackTrace();
55 }
56 }
57 }
58
59 /*
60 * (non-Javadoc) 刪除記錄 一次只刪除一條記錄
61 */
62 public void delByDeptNo(int deptNo) {
63 try {
64 sqlMapClient.startTransaction();// 開始事務
65 sqlMapClient.delete("deleteDeptById", new Integer(deptNo));
66 sqlMapClient.commitTransaction();// 提交事務
67 System.out.println("******成功刪除1條記錄******");
68 } catch (SQLException e) {
69 try {
70 sqlMapClient.getCurrentConnection().rollback();// 回滾事務
71 } catch (SQLException e1) {
72 e1.printStackTrace();
73 }
74 e.printStackTrace();
75 } finally {
76 try {
77 sqlMapClient.endTransaction();// 結束事務
78 } catch (SQLException e) {
79 e.printStackTrace();
80 }
81 }
82 }
83
84 /*
85 * (non-Javadoc) 查詢 查詢所有記錄
86 */
87 public List queryDept() {
88 List rows = null;
89 try {
90 sqlMapClient.startTransaction();// 開始事務
91 rows = sqlMapClient.queryForList("selectAllDept");
92 sqlMapClient.commitTransaction();// 提交事務
93 System.out.println("******成功查詢所有記錄******");
94 } catch (SQLException e) {
95 try {
96 sqlMapClient.getCurrentConnection().rollback();// 回滾事務
97 } catch (SQLException e1) {
98 e1.printStackTrace();
99 }
100 e.printStackTrace();
101 } finally {
102 try {
103 sqlMapClient.endTransaction();// 結束事務
104 } catch (SQLException e) {
105 e.printStackTrace();
106 }
107 }
108 return rows;
109 }
110
111 /*
112 * (non-Javadoc) 查詢 查詢一條記錄
113 */
114 public Dept queryByDeptNo(int deptNo) {
115 Dept dept = null;
116 try {
117 sqlMapClient.startTransaction();// 開始事務
118 dept = (Dept) sqlMapClient.queryForObject("selectById",
119 new Integer(deptNo));
120 sqlMapClient.commitTransaction();// 提交事務
121 System.out.println("******成功查詢1條記錄******");
122 } catch (SQLException e) {
123 try {
124 sqlMapClient.getCurrentConnection().rollback();// 回滾事務
125 } catch (SQLException e1) {
126 e1.printStackTrace();
127 }
128 e.printStackTrace();
129 } finally {
130 try {
131 sqlMapClient.endTransaction();// 結束事務
132 } catch (SQLException e) {
133 e.printStackTrace();
134 }
135 }
136 return dept;
137 }
138
139 /*
140 * (non-Javadoc) 更新 一次只更新一條記錄
141 */
142 public void updateDept(Dept dept) {
143 try {
144 sqlMapClient.startTransaction();// 開始事務
145 sqlMapClient.update("updateDeptById", dept);
146 sqlMapClient.commitTransaction();// 提交事務
147 System.out.println("******成功更新1條記錄******");
148 } catch (SQLException e) {
149 try {
150 sqlMapClient.getCurrentConnection().rollback();// 回滾事務
151 } catch (SQLException e1) {
152 e1.printStackTrace();
153 }
154 e.printStackTrace();
155 } finally {
156 try {
157 sqlMapClient.endTransaction();// 結束事務
158 } catch (SQLException e) {
159 e.printStackTrace();
160 }
161 }
162 }
163
164 /*
165 * (non-Javadoc) 模糊查詢
166 */
167 public List queryByName(String name) {
168 List depts = null;
169 try {
170 sqlMapClient.startTransaction();// 開始事務
171 depts = sqlMapClient.queryForList("selectByName", name);
172 sqlMapClient.commitTransaction();// 提交事務
173 System.out.println("******模糊查詢成功******");
174 } catch (SQLException e) {
175 try {
176 sqlMapClient.getCurrentConnection().rollback();// 回滾事務
177 } catch (SQLException e1) {
178 e1.printStackTrace();
179 }
180 e.printStackTrace();
181 } finally {
182 try {
183 sqlMapClient.endTransaction();// 結束事務
184 } catch (SQLException e) {
185 e.printStackTrace();
186 }
187 }
188 return depts;
189 }
190
191 /*
192 * (non-Javadoc)主鍵自動生成 添加記錄
193 */
194 public void addDeptSequenct(Dept dept) {
195 try {
196 sqlMapClient.startTransaction();// 開始事務
197 sqlMapClient.insert("insertDeptBySequence", dept);
198 sqlMapClient.commitTransaction();// 提交事務
199 System.out.println("******成功添加1條記錄(主鍵自動生成)******");
200 } catch (SQLException e) {
201 try {
202 sqlMapClient.getCurrentConnection().rollback();// 回滾事務
203 } catch (SQLException e1) {
204 e1.printStackTrace();
205 }
206 e.printStackTrace();
207 } finally {
208 try {
209 sqlMapClient.endTransaction();// 結束事務
210 } catch (SQLException e) {
211 e.printStackTrace();
212 }
213 }
214 }
}