乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MyBatis For .NET學(xué)習(xí)筆記[2]:配置環(huán)境

       w_hf的圖書館 2012-06-24

      MyBatis For .NET學(xué)習(xí)筆記[2]:配置環(huán)境

      2011-03-21 18:24 by chenkai, 3517 閱讀, 16 評(píng)論, 收藏, 編輯

      最近這幾天一直看MyBatis相關(guān)資料.配置一下開發(fā)環(huán)境,在上一篇MyBatis For .NET學(xué)習(xí)筆記:開篇大概介紹一下MyBatis框架開源項(xiàng)目版本以及起源. 其實(shí)MyBatis的前身是IBatis. 而對(duì)應(yīng)的.NET版本也是從Java版本中移植過來.這點(diǎn)更是體現(xiàn)在官方把MyBatis移植到Google Code上之后體現(xiàn)出來文檔之間差異: Java文檔和編碼實(shí)例完整而實(shí)用. 而對(duì)應(yīng)MyBatis 的.NEt 版本你會(huì)發(fā)現(xiàn)除了兩個(gè)提供的User Guid和iBATIS.NET SDK for .NET 2.0文檔 整個(gè)My Batis for Google Code中很難再發(fā)現(xiàn)有點(diǎn)價(jià)值的資料.

      另外一個(gè)就是MyBatis版本問題. 作為開源項(xiàng)目MyBatis[.NET]目前官方提供最新版本DataMapper 1.6.2./ DataAccess 1.9.2與以前版本類似DataMapper 1.6.1中部分隱射實(shí)體的配置文件的語法發(fā)生改變. 也就是高版本在語法上有些不想下兼容味道.這也就導(dǎo)致各個(gè)版本之間實(shí)例異常問題和相對(duì)應(yīng)實(shí)例各不相同,版本間參考性具有差距. 這讓人情何以堪啊. 這也是我最近看官方文檔摸索時(shí)一個(gè)很頭疼的問題. 當(dāng)然到目前為止對(duì)MyBatis原理了解尚未深入.可能目前看法并不可取.只是最近摸索MyBatis出現(xiàn)眾多問題而無法找到相關(guān)參考資料解決問題.

      既然是一個(gè)成熟的ORM框架.可以先快速項(xiàng)目中使用.來從實(shí)際項(xiàng)目中從全局角度來大體預(yù)覽一下MyBatis框架的特點(diǎn).會(huì)更加速理解MyBatis. 可能這篇文章寫得有點(diǎn)長(zhǎng)[只是估計(jì)].這個(gè)過程也是初學(xué)者角度摸索MyBatis的整個(gè)過程.難免會(huì)有紕漏 還望指正.當(dāng)然也遇到很多大大小小的問題.本篇將詳細(xì)講述如何配置MyBais并構(gòu)建項(xiàng)目采用MyBatis實(shí)現(xiàn)數(shù)據(jù)的CRUD操作.更深層原理將在后面章節(jié)講述.先讓我們會(huì)如何使用MyBatis.

      <1>構(gòu)建MyBatis For .NET環(huán)境

      如果你對(duì)MyBatis了解還不夠多.可以參考MyBatis For Wiki,另外當(dāng)然就是官方.在開始使用MyBatis之前需要在My Batis for Google Code上下載四個(gè)文件:

      2011-03-18_162036

       

       

       

       

       

       

       

      其中DataMapper和DataAccess是核心的引用文件.而另外兩個(gè)分別對(duì)應(yīng)說明官方提供UserGuid文檔.其實(shí)可以從文件可以看出MyBaits框架有兩個(gè)核心的組成部分,一個(gè)是SQL Maps,另一個(gè)是Data Access Objects也就是常說的[DAO].當(dāng)然官方在USer Guid做了很經(jīng)典解釋[后篇會(huì)翻譯出來].這里簡(jiǎn)述一下個(gè)人使用后理解.相對(duì)于ORM框架中Nhibernate中把實(shí)體EntityModel與數(shù)據(jù)庫表Table通過XML文件建立映射關(guān)系.而MyBatis的不同是MyBatis用一個(gè)簡(jiǎn)單的XML文件來實(shí)現(xiàn)從實(shí)體到SQL statements[SQL]的映射.這就意味什么呢?

      首先DataTable數(shù)據(jù)庫表結(jié)構(gòu)和實(shí)體徹底的失去關(guān)聯(lián).數(shù)據(jù)庫表結(jié)構(gòu)改動(dòng)將不再直接體現(xiàn)在EntityModel. 實(shí)體Model把這種依賴關(guān)系轉(zhuǎn)移到一個(gè)人為可控因素的SQL Statements[sql語句]上來.也就沒有Nhibernate中存在的Scheme概念.這也說明另外一個(gè)問題.Myibatis 并不會(huì)為程序員在運(yùn)行期自動(dòng)生成SQL 執(zhí)行。具體的SQL 需要程序員編寫,然后通過映射配置文件,將SQL所需的參數(shù),以及返回的結(jié)果字段映射到指定Model.相對(duì)NHibernate等“一站式”O(jiān)RM機(jī)制而言Myibatis 以SQL開發(fā)的工作量和數(shù)據(jù)庫移植性上的靈活性,為系統(tǒng)設(shè)計(jì)提供了更大的自由空間. 這也是看了諸多ORM后選擇MyBatis一個(gè)原因之一. 當(dāng)然關(guān)于MyBatis與Nhibernate之間特點(diǎn)討論會(huì)專門拿出一片文章來闡述.

      很明顯DataMapper是MyBatis框架的核心.DataAccess Objects[DAO]將動(dòng)態(tài)的、可插入的 DAO 組件很容易地?fù)Q入換出,可以使用 iBATIS Data Access Objects API 幫助隱藏持久性層實(shí)現(xiàn)的細(xì)節(jié).創(chuàng)建簡(jiǎn)單的組件,提供對(duì)數(shù)據(jù)的訪問,而無需將實(shí)現(xiàn)的詳細(xì)說明展示給應(yīng)用程序的其余部分.

      解壓文件發(fā)現(xiàn)6個(gè)可用DLL:

      2011-03-18_164848

       

       

       

       

       

      根據(jù)官方的文檔說明如下:

      IBatisNet.Common.DLL-[Assembly of classes shared by DataAccess and DataMapper]

      IBatisNet.DataAccess.Dll-[核心的DataAccess組件DLL]

      IBatisNet.DataMapper.DLL-[核心的數(shù)據(jù)隱射DataMap組件DLL]

      Castyle.DynamicProxy.DLL-[實(shí)現(xiàn)為DataMapper動(dòng)態(tài)生成代理]

      Log4Net.Dll-[Log4日志組件.]

      有了這些引用DLL組件如下來看MyBatis For .Net在項(xiàng)目中如何工作使用,.實(shí)現(xiàn)數(shù)據(jù)的對(duì)象的CRUD操作.

      <2>實(shí)現(xiàn)MyBatis For .NET框架CRUD

      快速了解MyBatis構(gòu)造和原理 來用一個(gè)實(shí)現(xiàn)項(xiàng)目來實(shí)現(xiàn)MyBatis框架數(shù)據(jù)基礎(chǔ)CRUD操作.更加直觀的體現(xiàn)MyBatis構(gòu)建的原理.為了演示理解方便這里做了一個(gè)項(xiàng)目架構(gòu)最簡(jiǎn)單純凈的三層. 項(xiàng)目結(jié)構(gòu)如下:

      2011-03-18_173102

       

       

       

       

       

       

       

      簡(jiǎn)單介紹External-Bin中需要引用的DLL. 為了區(qū)別在命名詳見下劃線后綴不再贅述.EntityModel需要添加IBatisNet.Common.DLL引用.首先演示前需要一個(gè)獨(dú)立數(shù)據(jù)庫以及一個(gè)獨(dú)立數(shù)據(jù)表Prodcut Tables 創(chuàng)建SQL 語句:

         1:  CREATE DATABASE BaseCardDB
         2:  GO
         4:  USE BaseCardDB
         5:  GO
         7:  CREATE TABLE Product
         8:  (
         9:     ProductID INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
        10:     Product_Name VARCHAR(50) NOT NULL,
        11:     Product_Company VARCHAR(100) NOT NULL,
        12:     SignOn_Data DATETIME NOT NULL DEFAULT(GETDATE()),
        13:     Update_Data DATETIME 
        14:   )
        15:  GO

      在EntityModel項(xiàng)目中構(gòu)建實(shí)體Product操作對(duì)象.:

         1:  namespace EntityModel
         2:  {
         3:     public class Product
         4:      {
         5:         public int ProductId { get; set; }
         6:         public string ProductName { get; set; }
         7:         public string ProductCompany { get; set; }
         8:         public DateTime SignDate { get; set; }
         9:         public DateTime UpdateData { get; set; }
        10:      }
        11:  }

      走到這往往讓我們聯(lián)想到NhiBernate中實(shí)現(xiàn)實(shí)體對(duì)象與數(shù)據(jù)庫表之間映射關(guān)系的XML文件.但在MyBatis中則提出來出來對(duì)應(yīng)操作的SQL語句之間映射.這時(shí)實(shí)現(xiàn)數(shù)據(jù)映射關(guān)系的核心部分.定義個(gè)在CustomerWeb_UI中定義對(duì)應(yīng)ProductMap.XML:格式如下

         1:  <?xml version="1.0" encoding="utf-8" ?>
         2:  <sqlMap namespace="EntityModel" xmlns="http://ibatis./mapping" 
         3:          xmlns:xsi="http://www./2001/XMLSchema-instance">
         4:      <statements>
         5:          <select id="GetAllProducts" parameterClass="string" resultClass="hashtable">
         6:              SELECT * FROM Product WHERE Product_Company=#companyname#
         7:          </select>
         8:          <insert id="InsertProduct" parameterClass="EntityModel.Product">
         9:              INSERT  dbo.Product ( Product_Name ,Product_Company)
        10:              VALUES  (#ProductName# , #ProductCompany#)
        11:          </insert>
        12:          <delete id="DeleteProduct" parameterClass="int" restultClass="int">
        13:              DELETE FROM dbo.Product WHERE ProductID=#ProductId#
        14:          </delete>
        15:          <update id="UpdateProduct" parameterClass="EntityModel.Product" restltClass="int">
        16:              UPDATE Product SET Product_Name=#ProductName# WHERE ProductID=#ProductId#
        17:          </update>
        18:          <select id="SelectAllProduct" resultClass="List">
        19:              SELECT * FROM Product
        20:          </select>
        21:      </statements>
        22:  </sqlMap>

      有必要說說這個(gè)定義實(shí)體操作與對(duì)應(yīng)操作的SQl Statement語句之間隱射文件的語法規(guī)則.首先<SQlMap>標(biāo)簽是用來表示映射關(guān)系. NameSpace最好指定對(duì)應(yīng)實(shí)體命名空間.<Statements>則對(duì)應(yīng)定義CRUD四種類型的操作SQL語句. 其中Id作為操作間的唯一標(biāo)識(shí).ParameterClass則指定操作參數(shù)的類型. ResultsClass這個(gè)下面會(huì)說到.參數(shù)可以是對(duì)應(yīng)實(shí)體的屬性.也可以是程序中執(zhí)行SQL語句中傳遞的參數(shù).但是參數(shù)大小寫敏感必須一致. 對(duì)應(yīng)參數(shù)采用#Paramter#格式進(jìn)行區(qū)分. 如上定義CRUD四個(gè)操作外加一個(gè)獲得所有數(shù)據(jù)操作.共5個(gè)SQL語句.

      其實(shí)針對(duì)MyBatis中需要提供的配置文件共有4種[Important Level]:

      Dao.config- 數(shù)據(jù)訪問配置文件 用來指定配置DAO以及指定providers.config文件的位置和數(shù)據(jù)源的信息

      Providers.config-由框架使用的文件來查找你選定的數(shù)據(jù)庫提供的定義訪問參數(shù). 這個(gè)通用的官方支持?jǐn)?shù)據(jù)已達(dá)到10種.文件定義固定.[提前寫好數(shù)據(jù)庫訪問配置 與Dao.Config進(jìn)行關(guān)聯(lián).]

      SqlMap.config和數(shù)據(jù)映射定義XML文件[實(shí)體映射文件ProductMap.xml] -這是一個(gè)有關(guān)當(dāng)前數(shù)據(jù)庫信息及實(shí)體映射文件配置的文件。在這個(gè)文件里可以指定數(shù)據(jù)庫連接的信息[用戶名、密碼及主機(jī)等),還可以指定實(shí)體映射文件.類似[ProductMap.xml]

      如上三個(gè)配置文件為了演示目的 放到CustomerWeb_UI項(xiàng)目根目錄:.

      2011-03-21_094957

       

       

       

       

       

       

       

       

       

       

       

      如上配置中其中Privoiders.Config需要作為資源文件嵌入項(xiàng)目:

      2011-03-21_095101

       

       

       

       

       

       

      建立操作的實(shí)體以及對(duì)應(yīng)的映射文件后.來看一下Provide.Config其實(shí)就是指定項(xiàng)目要支持的數(shù)據(jù)配置參數(shù).這個(gè)相對(duì)比較固定.是配置文件中變化最小的一個(gè)配置文件.在項(xiàng)目中可以通過配置文件操作類動(dòng)態(tài)切換底層支持的數(shù)據(jù)庫.底層數(shù)據(jù)庫支持已經(jīng)不再成為項(xiàng)目移植的瓶頸.目前支持12中數(shù)據(jù)庫采用的是SQlServer 2005版本配置:

         1:      <!--SqlServer 2.0 SQl-->
         2:      <provider
         3:          name="sqlServer2.0"
         4:          enabled="true"
         5:          description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0"
         6:          assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
         7:          connectionClass="System.Data.SqlClient.SqlConnection"
         8:          commandClass="System.Data.SqlClient.SqlCommand"
         9:          parameterClass="System.Data.SqlClient.SqlParameter"
        10:          parameterDbTypeClass="System.Data.SqlDbType"
        11:          parameterDbTypeProperty="SqlDbType"
        12:          dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
        13:          commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
        14:          usePositionalParameters = "false"
        15:          useParameterPrefixInSql = "true"
        16:          useParameterPrefixInParameter = "true"
        17:          parameterPrefix="@"
        18:          allowMARS="false"
        19:      />

      在這個(gè)配置參數(shù)需要說明的是Enable屬性,默認(rèn)情況是設(shè)置為False的.如果要啟用某個(gè)數(shù)據(jù)庫驅(qū)動(dòng)就要將它的值設(shè)為true,還有一個(gè)就是parameterPrefix屬性,表示參數(shù)化SQL語句中參數(shù)的前綴,在SQlServer中參數(shù)前綴就是@標(biāo)識(shí). 細(xì)節(jié)容易導(dǎo)致編程出線一些很奇怪的 異常.大多數(shù)情況下需要檢查配置文件. 在來說所這個(gè)SQLMap.則是指定當(dāng)前數(shù)據(jù)庫連接信息和當(dāng)前實(shí)體映射文件.具體配置如下:

         1:  <?xml version="1.0" encoding="utf-8"?>
         2:  <sqlMapConfig xmlns="http://ibatis./dataMapper"  
         3:                xmlns:xsi="http://www./2001/XMLSchema-instance">
         4:   
         5:      <!--BAsic Setting About Configuration-->
         6:      <settings>
         7:          <setting useStatementNamespaces="false"/>
         8:          <setting cacheModelsEnabled="true"/>
         9:      </settings>
        10:   
        11:      <providers resource="providers.config"/>
        12:     <!--DataBase Connection Configuration-->
        13:      <database>
        14:     <provider name="sqlServer2.0" />

      15: <dataSource connectionString="data source=(local);database=BaseCardDB;user id=sa;password=chenkai;" />

        16:      </database>
        17:   
        18:      <sqlMaps>
        19:          <sqlMap resource="Maps/CustomerMap.xml"/>
        20:          <sqlMap resource="Maps/ProductMap.xml"/>
        21:      </sqlMaps>
        22:   
        23:  </sqlMapConfig>

      對(duì)應(yīng)標(biāo)識(shí)標(biāo)簽SQlMapConfig下. Settings對(duì)應(yīng)全局設(shè)置. useStatementNamespaces屬性則是指定是否使用命名空間方式來識(shí)別.對(duì)于初學(xué)者而言.為了保證快速上手.建議先把這些細(xì)節(jié)概念放置一邊.建議設(shè)置成FAlse.不啟用. Provider節(jié)點(diǎn)則是指定Provide.Config的文件路勁. DataBase節(jié)點(diǎn)則會(huì)使找到Provide.Config中指定數(shù)據(jù)配置.目前項(xiàng)目中采用的是Sql2005即SQlServer2.0. SqlMaps節(jié)點(diǎn)這時(shí)指定了映射文件的路徑. 到了這兒忘了說一下CustomerWeb_UI項(xiàng)目需要添加的引用:

      2011-03-21_115619

       

       

       

       

       

       

       

       

      在MyBatis同樣支持Log4Net組件方式來查看執(zhí)行整個(gè)過程.當(dāng)然測(cè)試框架也對(duì)Nunit很好的支持.可以在執(zhí)行時(shí)啟用Log4日志記錄.找到項(xiàng)目的Web.Config添加如下Log4支持配置:

      	<log4net>
      		<!-- Define some output appenders -->
      		<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      			<param name="File" value="log.txt"/>
      			<param name="AppendToFile" value="true"/>
      			<param name="MaxSizeRollBackups" value="2"/>
      			<param name="MaximumFileSize" value="100KB"/>
      			<param name="RollingStyle" value="Size"/>
      			<param name="StaticLogFileName" value="true"/>
      			<layout type="log4net.Layout.PatternLayout">
      				<param name="Header" value="[Header]\r\n"/>
      				<param name="Footer" value="[Footer]\r\n"/>
      				<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      			</layout>
      		</appender>
      		<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      			<layout type="log4net.Layout.PatternLayout">
      				<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}> - %m%n"/>
      			</layout>
      		</appender>
      		<!-- Set root logger level to ERROR and its appenders -->
      		<root>
      			<level value="DEBUG"/>
      			<appender-ref ref="RollingLogFileAppender"/>
      			<appender-ref ref="ConsoleAppender"/>
      		</root>
      		<!-- Print only messages of level DEBUG or above in the packages -->
      		<logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel">
      			<level value="DEBUG"/>
      		</logger>
      		<logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory">
      			<level value="DEBUG"/>
      		</logger>
      		<logger name="IBatisNet.DataMapper.LazyLoadList">
      			<level value="DEBUG"/>
      		</logger>
      		<logger name="IBatisNet.DataAccess.DaoSession">
      			<level value="DEBUG"/>
      		</logger>
      		<logger name="IBatisNet.DataMapper.SqlMapSession">
      			<level value="DEBUG"/>
      		</logger>
      		<logger name="IBatisNet.Common.Transaction.TransactionScope">
      			<level value="DEBUG"/>
      		</logger>
      		<logger name="IBatisNet.DataAccess.Configuration.DaoProxy">
      			<level value="DEBUG"/>
      		</logger>
      	</log4net>

      支持Log4之后我們基本完成對(duì)一個(gè)Product實(shí)體操作對(duì)象全部配置.如下就來編寫數(shù)據(jù)訪問類.添加DataAccess.DLL引用:

         1:  //添加引用
         2:  using IBatisNet.Common;
         3:  using IBatisNet.DataMapper;
         4:  using IBatisNet.DataMapper.Configuration;
         5:  using IBatisNet.Common.Utilities;
         6:  using IBatisNet.DataAccess;
         7:  using IBatisNet.DataAccess.Configuration;
         8:  using IBatisNet.DataAccess.Interfaces;
         9:  using IBatisNet.Common.Logging;

      數(shù)據(jù)訪問對(duì)象Product對(duì)象底層數(shù)據(jù)庫操作類ProductService.采用SqlMapper對(duì)象來進(jìn)行數(shù)據(jù)封裝操作.其實(shí)了解過項(xiàng)目源碼的人應(yīng)該知道.MyBatis曾使用NPetShop中病開放相關(guān)的源碼.在源碼你會(huì)看到一個(gè)另外一層對(duì)SQlmapper應(yīng)用動(dòng)態(tài)封裝. 然后與數(shù)據(jù)訪問層進(jìn)行隔離開來.其實(shí)作者是對(duì)Sqlmapper進(jìn)行一定重寫. 這里暫時(shí)用最為簡(jiǎn)單SQlMapper對(duì)象進(jìn)行數(shù)據(jù)操作.類似我們要插入一條Product記錄:

         1:          public void InsertProduct(Product getproduct)
         2:          {
         3:              ISqlMapper _getsqlManager = null;
         4:              DomSqlMapBuilder getdombuilder = new DomSqlMapBuilder();
         5:   
         6:              if (getdombuilder != null)
         7:                  ProductService._getsqlmapper = getdombuilder.Configure() as SqlMapper;
         8:              _getsqlManager = Mapper.Instance();
         9:   
        10:              if (_getsqlManager!=null)
        11:                  _getsqlManager.Insert("InsertProduct", getproduct);
        12:          }

      執(zhí)行插入操作:

         1:          //插入一條數(shù)據(jù)
         2:          ProductService_BL getproductBl = new ProductService_BL();
         3:          getproductBl.InsertProduct(new Product()
         4:              {
         5:                  ProductName = "Deskshop-54",
         6:                  SignDate=DateTime.Now,
         7:                  ProductCompany = "Auto-Desk"
         8:              });

      插入結(jié)果:

      2011-03-21_164852

       

       

       

       

       

       

      ok.來完整分析一下這條數(shù)據(jù)插入流程.通過Instace()方法初始化SqlMapper對(duì)象 在執(zhí)行插入數(shù)據(jù)時(shí).在來回來同看看.ProductMap.xml映射文件中關(guān)于InsertProduct配置:

         1:  <!--Insert Product-->
         2:  <insert id="InsertProduct" parameterClass="EntityModel.Product">
         3:  INSERT  dbo.Product ( Product_Name ,Product_Company)
         4:  VALUES  (#ProductName# , #ProductCompany#)
         5:  </insert>

      執(zhí)行InsertOperator方法時(shí)sqlMapper對(duì)象通過查找配置中的InsertProduct下SQL語句進(jìn)行執(zhí)行插入操作. 當(dāng)然配置則指定參數(shù)的類型是EntityModel.Product.這里要說一下.如果單一寫一個(gè)Product類名.可能在執(zhí)行是爆出異常提示不識(shí)別該參數(shù)類型.所以對(duì)于分層架構(gòu)來說最好帶上命名空間.

      當(dāng)然在初步調(diào)試嘗試建立SQlMaper初始化時(shí)會(huì)碰見如下無法找到DAo.Config文件異常:

      2011-03-16_094951

       

       

       

       

       

       

       

       

       

      Dao.config用來建立數(shù)據(jù)庫連接信息.另外一個(gè)就是用來識(shí)別SQlMap.Config文件.Dao.Config設(shè)置路勁對(duì)外可執(zhí)行程序是可見的.設(shè)置Dao.Config文件作為編譯內(nèi)容:

      2011-03-21_172158

       

       

       

       

       

       

       

      如下來更新一下這條記錄.更新操作中當(dāng)然可以使用SQlMapper實(shí)例的Update方法進(jìn)行操作.:

         1:   //更新操作
         2:   public string UpdateProductById(Product getproduct)
         3:    {
         4:       string getresult = string.Empty;
         5:       if (_getsqlManager == null)
         6:                _getsqlManager = Mapper.Instance();
         7:       else
         8:           {
         9:                _getsqlManager.BeginTransaction();
        10:                 try
        11:                 {
        12:                      getresult = _getsqlManager.Update("UpdateProduct", getproduct).ToString();
        13:                      _getsqlManager.CommitTransaction();
        14:                  }
        15:                  catch
        16:                  {
        17:                      _getsqlManager.RollBackTransaction();
        18:                      throw;
        19:                  }
        20:              }
        21:              return getresult;
        22:  }

      參數(shù)依然指定一個(gè)Product對(duì)象.但在數(shù)據(jù)更新過程中加入MyBatis的事務(wù)處理.當(dāng)更新數(shù)據(jù)時(shí)發(fā)生異常則回滾當(dāng)前操作保持原來數(shù)據(jù).另外一個(gè)增加返回值.string類型.執(zhí)行代碼:

         1:   ProductService_BL getproductBl = new ProductService_BL();
         2:   string getresult = getproductBl.UpdateProduct(new Product
         3:   {
         4:       ProductId = 1,
         5:       ProductName = "Widows  phone 7 Device",
         6:       ProductCompany = "Tommy Frank and MS Team"
         7:     });

      執(zhí)行結(jié)果:

      2011-03-21_175218

       

       

       

       

       

       

      對(duì)應(yīng)的配置的ProductMap.XML隱射配置附帶返回值Update:

         1:  <update id="UpdateProduct" parameterClass="EntityModel.Product" restltClass="int">
         2:     UPDATE Product SET Product_Name=#ProductName# WHERE ProductID=#ProductId#
         3:  </update>

      當(dāng)然在初步調(diào)試時(shí)也出現(xiàn)各種各樣的異常.當(dāng)你調(diào)試會(huì)發(fā)現(xiàn)的大多出現(xiàn)異常源自于配置文件中出現(xiàn)錯(cuò)誤,類似我們?cè)趯?shí)例化SqlMapper對(duì)象時(shí)提示:

      2011-03-16_160335

       

       

       

       

       

       

       

       

       

       

       

      SQlMap.Config的重要職能之一就是指定當(dāng)前項(xiàng)目使用數(shù)據(jù)庫連接具體配置信息. 另外一個(gè)就是Dao.Config使其配置可見.這很重要.這里需要在SQlMap.config中添加一個(gè)<DataBase>節(jié)點(diǎn)用來配置數(shù)據(jù)庫連接.當(dāng)然異常信息在MyBatis中初步調(diào)試時(shí)很常見.

      以上只是說明如何讓MyBatis在一個(gè)簡(jiǎn)單純凈的三層架構(gòu)如何去進(jìn)行基礎(chǔ)數(shù)據(jù)的CRUd操作. 讓它快速工作起來.你會(huì)發(fā)現(xiàn).從定義一個(gè)操作實(shí)體到編寫隱射文件.指定數(shù)據(jù)庫連接 操作.都異常簡(jiǎn)單.最終所有數(shù)據(jù)操作都交給對(duì)應(yīng)數(shù)據(jù)操作的SQL Statement[sql語句來完成].在一定程度上增加靈活性.MyBatis中提出的新概念比較少.相對(duì)NhiberNate學(xué)習(xí)曲線較小.容易上手使用.

      這篇文章整整采用一周業(yè)余時(shí)間來驗(yàn)證. 如下為驗(yàn)證的源碼項(xiàng)目:

       /Files/chenkai/BatisDemonstarate_DUI.rar

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多