程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> IBatisNet.DataMapper 1.6.1.0應用之iBatis.Net簡單三層Demo & 應用場景

IBatisNet.DataMapper 1.6.1.0應用之iBatis.Net簡單三層Demo & 應用場景

編輯:關於.NET

筆者所在企業准備要用iBatis.Net來做數據訪問,於是有了這篇隨筆。

在示例中,為了方便起見,前台的數據綁定采用數據源。通過這篇隨筆,可以讓還未接觸iBatis.Net又計劃學習它的人有一個快速的了解和上手!

首先介紹Solution的架構,一共分四個項目:

Web :前台應用;  

BLL :業務處理層,如果嫌麻煩,可以再進一步抽象出來,然後將代碼放置Web層的aspx.cs裡面;

Model :這個就不多說了,地球人都知道(數據實體類)

SqlMaps:資源類,把配置文件和sql mapper文件全部打包起來。

二個文件夾:

Include :iBatis.Net架構的dll文件

Log :放置log文件的文件夾,在web.config裡配置:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="../Log/log.txt"/>

在這裡,主要介紹的就是SqlMaps項目.

SqlMaps項目文件介紹:

sqlmap.config:iBatis.Net架構最最重要的配置文件,裡面主要有properties,Provider,Database,sqlMaps配置,這個不用多介紹,一看便知。另外,這篇隨筆幫助大家入門,如果想要詳細理解每個參數的意義,建議去看iBatis.Net的幫助手冊。

database.config :顧名思義,數據庫連接的配置文件,這個文件是准們為sqlmap.config裡的properties准備的,你可以改成其他的名稱也可以,甚至可以不要。見sqlmap.config裡的配置:

<properties embedded="database.config,Service.SqlMaps"/>

providers.config:iBastis.Net自帶的,不需要修改。

MapSqlClientPerson.xml:這個就是傳說中的sql Mapper文件,其位置配置在sqlmap.config裡:

<sqlMaps>
        <!-- user via embedded-->
        <sqlMap embedded="Map.SqlClient.Person.xml,Service.SqlMaps"/>
</sqlMaps>

它支持:

存儲過程

Inline SQL

動態SQL

ORM

5.CodeMyBatis.cs:專門用來初始化IBatisNet.DataMapper.ISqlMapper的處理類(因為它跟配置有關,所以也打包起來)。在這裡,加入了支持輸出DataTable和DataSet。另外,當輸出為DataTable或者DataSet時,Person.xml裡的resultMaps就不起作用,所以sql語句就要這麼配置:

<select id="SelectAllPerson2" resultMap="SelectAllResult">
   select
   PER_ID AS Id,
   PER_FIRST_NAME AS FirstName,
   PER_LAST_NAME AS LastName,
   PER_BIRTH_DATE AS BirthDate,
   PER_WEIGHT_KG AS WeightInKilograms,
   PER_HEIGHT_M AS HeightInMeters
   from PERSON
   <dynamic prepend="WHERE">
     <isParameterPresent>
       PER_FIRST_NAME LIKE #FirstName#+'%'
     </isParameterPresent>
   </dynamic>
</select>

建議實體類的屬性和數據庫表欄位保持一致,這樣大家都省心!

6.Script :示例中用到的表和數據的sql語句。

二,BLL的結構:

1. IBll.cs:方便調用ISqlMapper,把它作成一個基類,當然大家可以據此繼續抽象擴展。

代碼如下:

using System.IO;
using System.Reflection;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
using Service.SqlMaps;

namespace Service.BLL
{

    public class IBll
    {
        protected static ISqlMapper SqlMap = MyBatis.SqlMap;
    }
}

2. PersonService.cs:示例的業務類,這裡沒什麼業務,主要就是封裝一下對iBatis.Net的操作。部分代碼如下:

public class PersonService : IBll
    {

        public PersonService()
        {
        }

        public IList<Person> GetAllPerson()
        {
            return SqlMap.QueryForList<Person>("SelectAllPerson", null);
        }

        public DataTable GetAllPerson2()
        {
            int recCount = 0;
            DataTable dt = MyBatis.QueryForDataTable("SelectAllPerson2", new Person { FirstName = "kilo" },10,1,out recCount);
           return dt;
        }

        public DataTable GetAllPerson3()
        {
            return MyBatis.QueryForDataTable("SelectAllPerson2", new Person { FirstName = "kilo" });
        }
}

三.應用場景(摘抄自俺的同事Ryan):

1.在一些特定的環境下,一站式的解決方案未必有效

系統的部分或全部數據來自現有數據庫,處於安全考慮,只對開發團隊提供幾條Select SQL(或存儲過程)以獲取所需數據,具體的表結構不予公開。

開發規范中要求,所有牽涉到業務邏輯部分的數據庫操作,必須在數據庫層由存儲過程實現。(銀行大多有這樣的限制)

系統數據處理量巨大,性能要求極為苛刻,這往往意味著我們必須通過經過高度優化的SQL語句(或存儲過程)才能達到系統性能設計指標。

2.iBATIS之於小型、簡單系統:非常適用

iBATIS自己就很小並且簡單

iBATIS不會對現存應用的設計或者數據庫結構強加任何影響

iBATIS非常適合於有成長趨勢的系統

3.iBATIS之於大型、企業級系統:為之而設計

iBATIS的某些特性使得它能夠高效地處理大型數據集

iBATIS允許你用多種方式建立從對象到數據庫的映射關系

MySpace已應用

4.使用於任何類型的關系數據庫:

應用數據庫

企業數據庫

私有數據庫

遺留數據庫

簡單性

性能

明確分工

可移植性:Java、.Net或者其他

開源

5.何時不該使用iBATIS

當你能永遠擁有完全控制權

當你的應用需要完全動態的SQL

當你並沒有使用關系數據庫時

當iBATIS不起作用時

PS1:這個Demo最原始的代碼是從csdn上下載的,還扣了俺5分(很心痛),原來是1.3.0版,筆者把它升級,並對架構進行調整,代碼也進行了精簡.再次感謝一下原作者!

PS2:本來自己前陣子做的架構也是類似iBatis.Net的風格,並且在數據輸出這塊增加了很多種方式。不過這個架構都是自己在家裡完成的。所以不拿來應用到公司的項目上,只應用於自己或朋友的接的項目上!

運行環境:Vs2008 + [SqlServer2k | SqlServer2005]

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved