新項目用的是Ibatis.Net。哥的感覺是NHibernate才是哥的最愛。沒辦法,即使重復,也要抽時間學習。努力做好這份工作再說吧。
一、Ibatis.Net-SQLServer2008
還是以哥一貫的學習方式,先千方百計拼出一個DEMO,看看效果,然后修改各個參數就可以看你出對DEMO的影響。
第一次配置Itabis.Net看到這樣的錯誤提示,哥崩潰了,這也算提示?跟沒提示有區別嗎?
不過經過后來的提示,注意上面是Validate,有可能還會出現loading等,也注意最后的文件名,到底是哪個文件出錯。
經過兩個小時候,終於配好了第一個程序,先發上這一個簡單的DEMO。然后下一篇文章,再來詳細了解下,其他的配置屬性。
1、打開SQLServer 2008,建一個數據庫Test,一張表Person,添加入數據如下:
2、新建一個控制台程序如下:
其中,DAO是數據訪問層,Domain是實體層。然后Dao層引入這兩個文件:
- IbatisNet.Common.dll
- IbatisNet.DataMapper.dll
先放上簡單的代碼吧。
其中PersonDao的代碼如下:
namespace Ibatis.Net.Dao { public class PersonDao { public IList<PersonModel> GetList() { ISqlMapper mapper = Mapper.Instance(); IList<PersonModel> ListPerson = mapper.QueryForList<PersonModel>("SelectAllPerson", null); //這個"SelectAllPerson"就是xml映射文件的Id return ListPerson; } } }
PersonModel代碼如下:
namespace Ibatis.Net.Domain { public class PersonModel { public int Id { get; set; } public string Name { get; set; } } }
3、配置(包括xml映射文件,SqlMap,provider)
首先當然是最重要的SqlMap了:
<?xml version="1.0" encoding="utf-8"?> <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!--<properties resource="../../../properties.config"/>這個東西是變量用的,這里以最簡單的實現說明,因此注釋--> <settings> <setting useStatementNamespaces="false"/> </settings> <providers resource="providers.config"/> <!--數據庫連接字符串--> <database> <provider name="sqlServer2008"/> <dataSource name="Test" connectionString="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/> </database> <sqlMaps> <sqlMap resource="Person.xml" /> <!--這個是指定映射文件的位置--> </sqlMaps> </sqlMapConfig>
然后是映射文件Person.xml:
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="Ibatis" xmlns="http://ibatis.apache.org/mapping" xmlns:xls="http://www.w3.org/2001/XMLSchema-instance"> <statements> <select id="SelectAllPerson" resultClass="Ibatis.Net.Domain.PersonModel"> <!--這個Id在程序中會用到,resultClass是類所在的程序位置(帶命名空間)--> select * from person </select> </statements> </sqlMap>
最后是Provider.config。這個直接復制下載進來的安裝包就可以了。把不是你指定的全部刪除,然后將enabled="true",.Net版本改成你正在用的,此處發上SQLServer2008的。
<?xml version="1.0" encoding="utf-8"?> <providers xmlns="http://ibatis.apache.org/providers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <clear/> <provider name="sqlServer2008" enabled="true" default="true" description="Microsoft SQL Server, provider V4.0.0.0 in framework .NET V4.0" assemblyName="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection" commandClass="System.Data.SqlClient.SqlCommand" parameterClass="System.Data.SqlClient.SqlParameter" parameterDbTypeClass="System.Data.SqlDbType" parameterDbTypeProperty="SqlDbType" dataAdapterClass="System.Data.SqlClient.SqlDataAdapter" commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder" usePositionalParameters = "false" useParameterPrefixInSql = "true" useParameterPrefixInParameter = "true" parameterPrefix="@" allowMARS="true" /> </providers>
注意,以上3個配置文件,在控制台程序中,放到debug/bin目錄里。
Program.cs代碼如下:
class Program { static void Main(string[] args) { PersonDao dao = new PersonDao(); IList<PersonModel> ListPerson = dao.GetList(); foreach (PersonModel p in ListPerson) { Console.WriteLine(p.Id + p.Name); } Console.ReadKey(); } }
運行程序,顯示結果如下:
就上面這些點東西,哥配了兩個多小時。下一篇再學習其他的要點。
二、Ibatis.Net - Oracle 10g
對於上面的程序,將數據庫由SQLServer改為Oracle10g,上面不用改代碼,只需要將providers.config文件改為:
<?xml version="1.0" encoding="utf-8"?> <providers xmlns="http://ibatis.apache.org/providers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <provider name="oracle10.1" description="Oracle, oracle provider V10.1.0.301" enabled="true" assemblyName="Oracle.DataAccess, Version=10.1.0.301, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection" commandClass="Oracle.DataAccess.Client.OracleCommand" parameterClass="Oracle.DataAccess.Client.OracleParameter" parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType" parameterDbTypeProperty="OracleDbType" dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter" commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder" usePositionalParameters="true" useParameterPrefixInSql="true" useParameterPrefixInParameter="true" parameterPrefix=":" useDeriveParameters="false" allowMARS="false" /> </providers>
SqlMap.cofig改為里的database節點改為:
<!--數據庫連接字符串--> <database> <provider name="oracle10.1"/> <dataSource name="Test" connectionString="Data Source=comit-jun/ajun.db;Persist Security Info=true;User ID=scott;Password=tiger;Connection Timeout=15;Pooling=true;Connection Lifetime=30;Max Pool Size=500;Min Pool Size=0"/> </database>
如果連接不上,大部分情況下,都是Oracle的設置問題了。
其中Data Source=comit-jun/ajun.db;
comit-jun是計算機名,當然也可以是IP地址,而后面的ajun.db是Oracle服務器端的服務名(完整數據庫名)。