研究 JPetStore 專案時接觸 iBATIS,發現其「只需懂 JavaBean、XML、SQL」的極簡設計極具吸引力。本文提煉官網核心特性與最小化範例,展示如何用純 SQL 完成資料庫到物件的映射,告別繁瑣 JDBC 樣板代碼。
官網列出的 10 大特性(倒序):
核心哲學:**SQL 是資產,映射是橋樑,物件是目標。**
ibatis-common.jar(公用工具)ibatis-sqlmap.jar(核心框架)<select id="getAddress" resultClass="examples.domain.Address" parameterClass="int">
SELECT
ADR_ID AS id,
ADR_DESCRIPTION AS description,
ADR_STREET AS street,
ADR_CITY AS city,
ADR_PROVINCE AS province,
ADR_POSTAL_CODE AS postalCode
FROM ADDRESS
WHERE ADR_ID = #value#
</select>
關鍵點:#value# 為參數佔位符(對應 parameterClass="int");AS 別名自動對應 JavaBean 屬性。
Integer pk = new Integer(5);
Address address = (Address) sqlMap.queryForObject("getAddress", pk);
// 完成!address 物件已填滿資料庫欄位值。
無需寫 Connection、PreparedStatement、ResultSet、手動映射欄位、關閉資源——全部由框架托管。
<isEqual>、<isNotNull> 等標籤構建條件查詢。<resultMap> 處理複雜關聯(一對多、多對一、繼承)。queryForList(statement, param, skip, max)。| 場景 | 推薦 |
|---|---|
| 團隊精通 SQL,需精細控制查詢效能 | ✅ iBATIS SQL Maps |
| 領域模型極其豐富,追求透明持久化 | Hibernate / JPA |
| 簡單 CRUD 為主,想要零配置 | MyBatis(iBATIS 3.x 更名)或 Spring JDBC Template |
| 舊專案維護,已大量使用 iBATIS 2.x | 續用,風險可控 |
更多中文教程請見 iBATIS 官網。iBATIS 3.x 已更名為 MyBatis,新專案建議直接使用 MyBatis。