使用IBatis的一些優點和一些原理在網上都能搜得到,而且說的挺詳細的,這裡我就不在說了。這篇文章主要講的是如何一步步的使用Ibatis技術及一些屬性是干什麼的。當初公司的一個項目要使用IBatis讓我負責的編寫。當時我是第一次聽說IBatis,無人講解只能自學了,在網上看各種相關的文章和代碼。網上的文章把原理和屬性都介紹的挺詳細,但是都沒有說出具體在程序中如何一步步的操作的,看完後自己動手操作不知道從哪開始,所以在這裡我也不把一些原理介紹了,只說自己如何寫IBatis,希望都給初學者一些幫助吧。IBatis技術要想完全理解或高級的運用還是的仔細研究原理和一些幫助文檔,這裡只是一些IBatis簡單的運用。
IBatis基本的運行環境配置主要由兩個文件組成,分別是SqlMap.config和Provider.config。它們是必需的兩個配置文件,其中SqlMap.config的功能類似於web.config或者app.config,是iBatis核心的配置文件,它的存放路徑也跟應用程序配置文件一樣,必須放在應用程序的運行目錄下並且它的文件名是保留的,不可改變的。而Provider.config是一個數據驅動提供類的配置,它的文件名是可以隨意改變的,因為通過SqlMap.config的一個配置節可以配置它的引用。
一般情況下Provider.config文件是不用進行修改的,只要復制過去就行了。而SqlMap.config文件需要改動的不是太多。
以下是SqlMap.config文件裡的一些代碼:
database.config是存放數據庫連接的一些信息的配置文件,一般與SqlMap.config文件放在一起。 resource="providers.config"是引用providers.config文件,只要providers.config文件的名字不改,這裡也不需要修改。
其中<sqlMap resource="bin\Map\Craft.xml"/>這是引用DAO裡自己創建的xml,需要用到那幾個xml文件這裡就寫幾個<sqlMap resource="bin\Map\*.xml"/>
SqlMap.config、Provider.config、database.config文件一般放在web服務應用程序裡。
DAO層
需要導入三個引用
IBatisNet.Common.dll、IBatisNet.Common.Logging.Log4Net.dll(日志)、IBatisNet.DataMapper.dll
一般要建立Map文件夾,裡面創建xml文件,並且需要復制兩個文件(nhibernate-mapping-2.0.xsd和SqlMap.xsd)
另外需要在Map文件夾外部復制進來兩個類MyBatis.cs和BaseDao.cs,其中MyBatis和BaseDao類不用修改。
MyBatis.cs是裡是個用簡單工廠模式進行創建MyBaits的對象的實例,BaseDao.cs是訪問數據庫的。這兩個文件不需要自己手寫,直接復制過來就行了,注意要修改名稱空間。
另外還需添加一個類(後綴為DAO)裡寫一些方法供web服務程序調用,需要繼承BaseDao類。
View Code其中的return SqlMap.QueryForList<Student>("SelectAllCraft", null);第一個參數是XML文件中查詢語句的id的值,表示這個方法要使用哪個sql語句;第二個參數是要給sql語句傳入的參數,如沒有參數傳null。
注意:DAO\Map裡建立的xml文件的屬性中的復制到輸出目錄的值改為始終復制。
Model層與一般程序的model層一樣存放對象
UI層與普通的UI一樣,添加web服務引用就能調用web服務程序裡的方法了。
IBatis項目最主要的是自己寫的xml文件,其他的類或者文件一般是不會出錯的,最容易出錯的就是自己寫xml文件。
xml示例
View Code其中
這是給引用的類型起個別名,方便映射時調用對象類。type屬性裡逗號前面的是對象類的名稱空間加對象類的名稱,逗號後面是對象的名稱空間。
這裡的別名相當於定義了一個全局的變量所以必須是唯一的,在其他的xml也可以使用該xml裡定義的別名。
這是對數據庫的列名和實體類做印射的。id="StudentMap"是給這段代碼起個名字用於下面寫查詢時resultMap屬性調用,class="Student" 實體類的對象的別名。
這裡面的id="DeleteStudent" 用於在StudentDAO類中調用方法時傳的第一個參數,相當於一個方法名。
parameterclass="String"屬性是出入參數的類型,可以是string、int,Hashtable也可以是實體類對象。
resultMap="StudentMap"屬性是返回的數據在resultMaps裡映射給實體類。
增刪查改語句選中對應的標簽,當有參數時:數據庫列名=#實體類名# 例如 WHERE name=#name#
查詢時如要按照姓名進行模糊查詢時:name like %$name$%;
進行排序時:order by $age$
拼接sql語句:
動態拼接sql語句的條件
其中的 <isParameterPresent>標簽下面還有許多標簽,有空時可以看一下。
下面是自己寫的一個xml,裡面包含上面的代碼和調用有參或無參的存儲過程的寫法:
View CodeIBatis主要就是這些了,如果有要相關的文檔或者代碼的朋友,可以聯系我。