IBatisHelper 是一個輔助 iBATIS.NET 開發的工具庫,自發布以來獲得許多開發者關注。因應需求增長,作者決定將原始碼公開釋出,方便社群自行下載、擴充與維護。
下載連結: IBatisHelper_src.rar
作者坦承程式碼風格略顯生硬,歡迎有興趣的開發者重構優化,並回饋改進版本。
以下為專案實際採用的完整 sqlMap 模板,涵蓋 CRUD、分頁與動態欄位生成,可直接套用或依專案需求微調:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"https://java.plugbase.org/dtd/sql-map-2.dtd">
<sqlMap namespace="${table}">
<typeAlias alias="${table}" type="${package}.${table}"/>
<typeAlias alias="SQLPager" type="org.plugbase.sql.SQLPager"/>
<resultMap id="${table}resultMap" class="${table}">
#foreach($item in $list)
<result property="${item.name.ToLower()}" column="${item.name.ToLower()}"/>
#end
</resultMap>
<select id="Count${table}" resultClass="int">
select count(*) from ${table}
</select>
<select id="Select${table}ById" parameterClass="int" resultMap="${table}resultMap">
select * from ${table} where id=#value#
</select>
<insert id="Insert${table}" parameterClass = "${table}">
insert into ${table}
(
#foreach($item in $list)
#if(${item.name.ToLower()}!="id")
#if($velocityCount==$list.Count())
${item.name.ToLower()}
#else
${item.name.ToLower()},
#end
#end
#end
)
values
(
#foreach($item in $list)
#if(${item.name.ToLower()}!="id")
#if($velocityCount==$list.Count())
#${item.name.ToLower()}#
#else
#${item.name.ToLower()}#,
#end
#end
#end
)
</insert>
<update id="Update${table}" parameterClass = "${table}">
update ${table}
#foreach($item in $list)
#if($velocityCount==1)
set
#end
#if(${item.name.ToLower()}!="id")
#if($velocityCount==$list.Count())
${item.name.ToLower()}=#${item.name.ToLower()}#
#else
${item.name.ToLower()}=#${item.name.ToLower()}#,
#end
#end
#end
where id=#value#
</update>
<delete id="Delete${table}ById" parameterClass="int">
delete from ${table} where id=#value#
</delete>
</sqlMap>
#foreach 迴圈自動展開實體屬性,排除主鍵 id。$velocityCount 判斷最後一欄位,避免 SQL 語法錯誤。SQLPager,快速實現分頁查詢。${package} 變數。.ToLower() 呼叫。resultMap 明確映射,避免自動映射效能損耗。IBatisHelper 雖非大型框架,但其模板化思想極大提升了 iBATIS 開發效率。開源共享,期待社群共同打造更好用的版本。