I want to fly higher
          programming Explorer
          posts - 114,comments - 263,trackbacks - 0

              可參考ibatis\doc\MyBatis-3-User-Guide-zh_CN.pdf
          1.ibatis->mybatis介紹
               MyBatis 是支持普通 SQL查詢,存儲過程等一個輕量級的ORM中間件。與傳統(tǒng)的 JDBC 開發(fā)相比, MyBatis 消除了幾乎所有的代碼和參數(shù)的手工設置;MyBatis 使用簡單的 XML 或注解方式,用于配置和原始映射,將接口和 Java 的POJOs(Plan Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄;
               mybatis 與 hibernate 比較:
               Hibernate基本上可以自動生成,其對數(shù)據(jù)庫結構提供了較為完整的封裝 ;開發(fā)效率上, 如果使用純面向對象方式Hibernate 比較快,但如果以HQL其他方式相差不多;可維護性方面, mybatis框架是以sql的開發(fā)方式,可以進行細粒度的優(yōu)化 ;Hibernate自動生成的sql效果不理想;MyBatis 是一個可以自定義SQL、存儲過程和高級映射的持久層框架。MyBatis 摒除了大部分的JDBC代碼、手工設置參數(shù)和結果集重獲。MyBatis 只使用簡單的XML 和注解來配置和映射基本數(shù)據(jù)類型、Map 接口和POJO 到數(shù)據(jù)庫記錄。相對Hibernate和Apache OJB等“一站式”ORM解決方案而言,Mybatis 是一種“半自動化”的ORM實現(xiàn)。
               MyBatis的前身就是iBatis,iBatis本是apache的一個開源項目,2010年這個項目由apahce sofeware foundation 遷移到了google code,并且改名為MyBatis;
               MyBatis是把實體類和sql語句之間建立了映射關系,而Hibernate在實體類和數(shù)據(jù)庫之間建立了映射關系。
          2.幾個基本概念-
           Model:java中一般叫entity    POJO 里邊主要是實體類  也就是對應數(shù)據(jù)庫表中的類 每個表對應一個實體類 每個字段對應實體類中的一個屬性
           DAO:數(shù)據(jù)訪問層  Mvc 結構編程中訪問數(shù)據(jù)庫的dao層提供數(shù)據(jù)持久化接口
          3.mybatis-3.xjar(mybatis核心包)
            mybatis-spring-1.x.jar(與Spring結合包)
           總體來說 MyBatis 主要完成兩件事情:
               根據(jù) JDBC 規(guī)范建立與數(shù)據(jù)庫的連接;
               通過Annotaion/XML+JAVA反射技術,實現(xiàn) Java 對象與關系數(shù)據(jù)庫之間相互轉化
          5.所有的MyBatis 應用都以SqlSessionFactory 實例為中心。SqlSessionFactory 實例通過SqlSessionFactoryBuilder 來獲得,SqlSessionFactoryBuilder 能夠從XML 配置文件或者通過自定義編寫的配置類(Configuration class),來創(chuàng)建一個SqlSessionFactory 實例。
               1.從XML 中創(chuàng)建SqlSessionFactory 實例
           建議您使用類資源路徑(classpathresource)來加載配置文件,但是您也能夠使用任何方式,包括文本文件路徑或者以file:// 開頭URL 的方式。MyBatis 包括一個叫做Resources 的工具類(utility class),其中包含了一系列方法,使之能簡單地從classpath 或其它地方加載配置文件。
           String resource = "org/mybatis/example/Configuration.xml";
           Reader reader = Resources.getResourceAsReader(resource);
           sqlMapper = new SqlSessionFactoryBuilder().build(reader);
           XML 配置文件包含MyBatis 框架的核心設置,包括獲取數(shù)據(jù)庫連接的DataSource 實例,和包括決定事務作用域范圍和控制的事務管理等。

           1<?xml version="1.0" encoding="UTF-8" ?>
           2   <!DOCTYPE configuration
           3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
           4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
           5  <configuration>
           6   <environments default="development">
           7    <environment id="development">
           8    <transactionManager type="JDBC"/>
           9    <dataSource type="POOLED">
          10     <property name="driver" value="${driver}"/>
          11     <property name="url" value="${url}"/>
          12     <property name="username" value="${username}"/>
          13     <property name="password" value="${password}"/>
          14    </dataSource>
          15    </environment>
          16   </environments>
          17  <mappers>
          18   <mapper resource="org/mybatis/example/BlogMapper.xml"/>
          19  </mappers>
          20 </configuration>
          21


             2.
           MyBatis 提供了一個完整的配置類(Configuration class),它提供了與XML 文件相同的配置選項。

          1TransactionFactory transactionFactory = new JdbcTransactionFactory();
          2  Environment environment = new Environment("development", transactionFactory, dataSource);
          3  Configuration configuration = new Configuration(environment);
          4  configuration.addMapper(BlogMapper.class);
          5  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);


           這種方式下的配置添加一個映射類(mapper class)。映射類是包含SQL 映射注解的Java 類,從而避免了使用XML。
           3.
           現(xiàn)在您已經(jīng)創(chuàng)建了一個SqlSessionFactory(指上面的sqlMapper),正如它名字暗示那樣,您可以通過它來創(chuàng)建一個SqlSession
          實例。SqlSession 包含了所有執(zhí)行數(shù)據(jù)庫SQL 語句的方法。您能夠直接地通過SqlSession 實例執(zhí)行映射SQL 語句。例如:

          1SqlSession session = sqlMapper.openSession();
          2  try {
          3   Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog"101);
          4  }
           
          5  finally 
          6  {
          7   session.close();
          8  }


           現(xiàn)在有一個更簡便的方式,那就是對給定的映射語句,使用一個正確描述參數(shù)與返回值的接口(如BlogMapper.class),您就能更清晰地執(zhí)行類型安全的代碼,從而避免錯誤和異常。

          1 SqlSession session = sqlSessionFactory.openSession();
          2  try {
          3   BlogMapper mapper = session.getMapper(BlogMapper.class);
          4   Blog blog = mapper.selectBlog(101);
          5  }
           finally 
          6  {
          7   session.close();
          8  }


           4.探索映射SQL 語句
           上面的例子中,映射語句已經(jīng)在XML 配置文件或注解中定義;,所有MyBatis 提供的功能特性都可以通過基于XML 映射配置文件 配置來實現(xiàn)

           1<?xml version="1.0" encoding="UTF-8" ?>
           2   <!DOCTYPE mapper
           3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           4  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
           5  <mapper namespace="org.mybatis.example.BlogMapper">
           6   <select id="selectBlog" parameterType="int" resultType="Blog">//哈哈,參數(shù)類型,返回類型,就是一個方法
           7   select * from Blog where id = #{id}
           8   </select>
           9  </mapper>
          10


             它定義了映射語句的名稱“selectBlog”,在命名空間“org.mybatis.example.BlogMapper”,允許您通過指定完整類名“org.mybatis.example.BlogMapper”來訪問上面的例子:
           Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
           這非常類似java 中通過完整類名來調用方法;這個名稱可以直接映射到一個具在相同命名空間的映射類,這個映射類有一個方法的名稱、參數(shù)及返回類型都與select映射語句相匹配。
           BlogMapper mapper = session.getMapper(BlogMapper.class);
           Blog blog = mapper.selectBlog(101);
           第二種方法有很多好處。第一,它不依賴于字符串,所以更安全。第二,如果您的IDE 有自動完成功能,您可以利用這功能很快導航到您的映射SQL 語句。第三,您不需要關注返回類型,不需要進行強制轉換,因為使用BlogMapper 接口已經(jīng)限定了返回 類型,它會安全地返回;

           對映射類還有一個更好的方法,就像前面的BlogMapper。它們的映射語句不需要完全在XML中配置。相反,它們可以使用Java 注解。例如上面的XML 配置可以替換為:

          1 package org.mybatis.example;
          2  public interface BlogMapper 
          3  {
          4   @Select("SELECT * FROM blog WHERE id = #{id}")
          5   Blog selectBlog(int id);
          6  }


           對簡單的映射語句,使用注解可以顯得非常地清晰。但是java 注解本身的局限難于應付更復雜的語句。如果您準備要做某些復雜的事情,最好使用XML 文件來配置映射語句。
           5.作用域和生命周期
            SqlSessionFactoryBuilder-一旦您創(chuàng)造了SqlSessionFactory 就不需要再保留它了。所以SqlSessionFactoryBuilder 實例的最好的作
            用域是方法體內(即一個本地方法變量)SqlSessionFactory-一旦創(chuàng)建,SqlSessionFactory 將會存在于您的應用程序整個運行生命周期中;SqlSessionFactory 最好的作用
            域范圍是一個應用的生命周期范圍;最簡單的方式是使用Singleton 模式或靜態(tài)Singleton 模式;,相反,您可能更愿意使用像Google Guice 或Spring 的依賴注入方式。這些框架允許您創(chuàng)造一個管理器,用于管理SqlSessionFactory 的生命周期SqlSession-每個線程都有一個SqlSession 實例,SqlSession 實例是不被共享的,并且不是線程安全的;因此最好的作用域是request 或者method。決不要用一個靜態(tài)字段或者一個類的實例字段來保存SqlSession 實例引用

          1SqlSession session = sqlSessionFactory.openSession();
          2  try {
          3   // do work
          4   }
           finally 
          5   {
          6   session.close();
          7   }


             使用這一模式將保證所有的數(shù)據(jù)庫資源被正確地關閉
           Mappers- 創(chuàng)建來綁定映射語句的接口,該Mapper 實例是從SqlSession 得到的。因此,所有mapper 實例的作用域跟創(chuàng)建它的SqlSession 一樣。但是,mapper 實例最好的作用域是method,也就是它們應該在方法內被調用,使用完即被銷毀;

          1SqlSession session = sqlSessionFactory.openSession();
          2  try {
          3   BlogMapper mapper = session.getMapper(BlogMapper.class);
          4   // do work
          5  }
           finally
          6  {session.close();}


           6.Mapper XML 配置
            MyBatis 的XML 配置文件包含了設置和影響MyBatis 行為的屬性;下面為層次結構-
            • configuration
             o properties
             o settings
             o typeAliases
             o typeHandlers
             o objectFactory
             o plugins
             o environments
              ?? environment
               • transactionManager
               • dataSource
             o mappers
            1.properties 元素-可以配置在一個典型的Java 屬性文件中,或者通過properties 元素的子元素進行配置;最優(yōu)先的屬性是通過方
            法參數(shù)來傳遞的屬性,然后是通過resource/url 配置的屬性,最后是在MyBatis 的Mapper 配置文件中,properties 元素主體中
            指定的屬性。
            2.Settings 元素-設置和改變MyBatis 運行中的行為,一個Settings 元素完整的配置例子如下:

           1<settings>
           2    <setting name="cacheEnabled" value="true"/>
           3    <setting name="lazyLoadingEnabled" value="true"/>
           4    <setting name="multipleResultSetsEnabled" value="true"/>
           5    <setting name="useColumnLabel" value="true"/>
           6    <setting name="useGeneratedKeys" value="false"/>
           7    <setting name="enhancementEnabled" value="false"/>
           8    <setting name="defaultExecutorType" value="SIMPLE"/>
           9    <setting name="defaultStatementTimeout" value="25000"/>
          10   </settings>
          11


               3.typeAliases 元素-別名是一個較短的Java 類型的名稱。這只是與XML 配置文件相關聯(lián),減少輸入多余的完整類
          名;

          1<typeAliases>
          2   <typeAlias alias="Author" type="domain.blog.Author"/>
          3   <typeAlias alias="Blog" type="domain.blog.Blog"/>
          4   <typeAlias alias="Comment" type="domain.blog.Comment"/>
          5   <typeAlias alias="Post" type="domain.blog.Post"/>
          6   <typeAlias alias="Section" type="domain.blog.Section"/>
          7   <typeAlias alias="Tag" type="domain.blog.Tag"/>
          8  </typeAliases>
          9


               可以在想要使用"domain.blog.Blog"的地方使用別名“Blog”了;對常用的java 類型,已經(jīng)內置了一些別名支持。這些別名都
             是不區(qū)分大小寫的。注意java的基本數(shù)據(jù)類型,它們進行了特別處理,加了“_”前綴。
            4.typeHandlers 元素-當MyBatis 設置參數(shù)到PreparedStatement 或者從ResultSet 結果集中取得值時,就會使用TypeHandler 來處理
            數(shù)據(jù)庫類型與java 類型之間轉;能夠重寫類型處理器(type handlers),或者創(chuàng)建您自己的類型處理器去處理沒有被支持
          的或非標準的類型。要做到這一點,只要實現(xiàn)TypeHandler 接口(org.mybatis.type),并且將您的TypeHandler 類映射到java 類型和可選的
          JDBC 類型即可。
            5.objectFactory 元素-MyBatis 每次創(chuàng)建一個結果對象實例都會使用ObjectFactory 實例。使用默認的ObjectFactory 與使用默認的
            構造函數(shù)(或含參數(shù)的構造函數(shù))來實例化目標類沒什么差別。如果您想重寫ObjectFactory 來改變其默認行為,那您能通
            過創(chuàng)造您自己的ObjectFactory 來做到.->extends DefaultObjectFactory
            6.Plugins 元素-MyBatis 允許您在映射語句執(zhí)行的某些點攔截方法調用->implements Interceptor
            7.Environments 元素-MyBatis 能夠配置多套運行環(huán)境,這有助于將您的SQL 映射到多個數(shù)據(jù)庫上;雖然您可以配置多個運行環(huán)
            境,但是每個SqlSessionFactory 實例只能選擇一個運行環(huán)境->每個數(shù)據(jù)庫對應一個SqlSessionFactory 實例
                

           1<environments default="development">
           2   <environment id="development">
           3   <transactionManager type="JDBC">//事務管理器
           4   <property name="" value=""/>
           5   </transactionManager>
           6   <dataSource type="POOLED">//數(shù)據(jù)源
           7   <property name="driver" value="${driver}"/>
           8   <property name="url" value="${url}"/>
           9   <property name="username" value="${username}"/>
          10   <property name="password" value="${password}"/>
          11   </dataSource>
          12   </environment>
          13  </environments>


             7.1事務管理器-MyBatis 有兩種事務管理類型(即type=”[JDBC|MANAGED]”);JDBC – 這個配置直接使用JDBC 的提交和 回滾功能。它依賴于從數(shù)據(jù)源獲得連接來管理事務的生命周期;MANAGED – 這個配置基本上什么都不做。它從不提交或者回滾一個連接的事務。而是讓容器(例如:Spring 或者J2EE 應用服務器)來管理事務的生命周期。
             7.2dataSource 元素-dataSource 元素使用標準的JDBC 數(shù)據(jù)源接口來配置JDBC 連接對象源。
            8.Mappers 元素-
             現(xiàn)在,MyBatis 的行為屬性都已經(jīng)在上面的配置元素中配置好了,接下來開始定義映射SQL語句;首先,我們需要告訴MyBatis 在哪里能夠找到我們定義的映射SQL 語句-可以使用類資源路徑或者URL(包括file:/// URLs)
              // Using classpath relative resources

          1<mappers>
          2     <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
          3    <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
          4    </mappers>
          5    // Using url fully qualified paths
          6    <mappers>
          7    <mapper url="file:///var/sqlmaps/AuthorMapper.xml"/>
          8    <mapper url="file:///var/sqlmaps/BlogMapper.xml"/>
          9    </mappers>


             這些配置告訴MyBatis 在哪里找到SQL 映射文件。而其它的更詳細的信息配置在每一個SQL映射文件里。
           7.SQL 映射XML 文件
            MyBatis 真正強大之處就在這些映射語句,也就是它的魔力所在。對于它的強大功能,SQL 映射文件的配置卻非常簡單。
            如果您比較SQL 映射文件配置與JDBC 代碼,您很快可以發(fā)現(xiàn),使用SQL 映射文件配置可以節(jié)省95%的代碼量。MyBatis 被創(chuàng)建來專注于SQL,但又給您自己的實現(xiàn)極大的空間。SQL 映射XML 文件只有一些基本的元素需要配置,并且要按照下面的順序來定義:
            • cache –在特定的命名空間配置緩存。
            • cache-ref – 引用另外一個命名空間配置的緩存.
            • resultMap – 最復雜也是最強大的元素,用來描述如何從數(shù)據(jù)庫結果集里加載對象。
            • sql – 能夠被其它語句重用的SQL 塊。
            • insert –INSERT 映射語句
            • update –UPDATE 映射語句
            • delete –DELEETE 映射語句
            • select –SELECT 映射語句
            7.1Select 元素-
             對簡單的查詢,select 元素的配置是相當簡單的:

          1<select id=”selectPerson” parameterType=”int” resultType=”hashmap”>
          2    SELECT * FROM PERSON WHERE ID = #{id}
          3   </select>


             這條語句叫做selectPerson,以int 型(或者Integer 型)作為參數(shù),并返回一個以數(shù)據(jù)庫列名作為鍵值的HashMap。
            #{id}-它告訴MyBatis 生成PreparedStatement 參數(shù)。對于JDBC,像這個參數(shù)會被標識為“?”;select 語句有很多的屬性允許您詳細配置每一條語句;如id,resultType,resultMap,statementType等。
            7.2Insert、update、delete 元素
             數(shù)據(jù)修改語句insert、update 和delete 的配置使用都非常相似:
              useGeneratedKeys-僅限insert 語句時使用)告訴MyBatis 使用JDBC 的getGeneratedKeys 方法來獲取數(shù)據(jù)庫自動生成主鍵如:MySQL、SQLSERVER 等關系型數(shù)據(jù)庫會有自增的字段)。默認:false
             MyBatis 還有另外一種方式為不支持自動生成主鍵的數(shù)據(jù)庫及JDBC 驅動來生成鍵值-><selectKey語句
            7.3Sql 元素-這個元素用來定義能夠被其它語句引用的可重用SQL 語句塊
            7.4參數(shù)(Parameters)使用#{}語法會促使MyBatis 生成PreparedStatement并且安全地設置PreparedStatement 參數(shù)(=?)值-
            7.5resultMap 元素-resultMap元素是MyBatis中最重要最強大的元素;<resultMap
             ......詳見文檔
           動態(tài)SQL-MyBatis 最強大的特性之一就是它的動態(tài)語句功能;
            • if
            • choose (when, otherwise)
            • trim (where, set)
            • foreach

           if元素-動態(tài)SQL 最常做的事就是有條件地包括where 子句;
           choose元素-有時候我們不想應用所有的條件,而是想從多個選項中選擇一個。與java 中的switch 語句相似,MyBatis 提供了一個choose 元素。
           trim, where, set 元素-here沒有出現(xiàn)的時候,您可以自定一個。<where> where 元素知道插入“where”如果它包含的標簽中有內容返回的話。此外,如果返回的內容以“AND” 或者“OR”開頭,它會把“AND” 或者“OR”去掉。
            <trim prefix="WHERE" prefixOverrides="AND |OR ">…</trim>;overrides屬性使用了管道分隔的文本列表來覆寫,而且它的空白也不能忽略的。這樣的結果是移出了指定在overrides 屬性里字符,而在開頭插入prefix屬性中指定的字符。

            在動態(tài)update語句里相似的解決方式叫做set,這個set元素能夠動態(tài)地更新列;set 元素將動態(tài)的配置SET 關鍵字,也用來剔除追加到條件末尾的任何不相關的逗號。等同
          -<trim prefix="SET" suffixOverrides=",">…</trim>
           Foreach 元素-另一個動態(tài)SQL 經(jīng)常使用到的功能是集合迭代,通常用在IN 條件句

           8.Java API
            相比JDBC,MyBatis 極大地簡化了您的代碼,并使您的代碼保持清晰、容易理解和維護。MyBatis3 推出了一系列重大的改進來使SQL 映射更好地工作。

            mybatis典型應用目錄結構-
             /lib-MyBatis *.jar 文件存放在這里。
             /src/...../data/..xml-MyBatis 物件放在這里。如: 映射器類(Mapper Classes), XML 配置文件, XML 映射文件。
             /src/properties/- Properties 存放您自己的屬性配置文件

            1.SqlSessions-SqlSession 是與MyBatis 一起工作的基本java 接口。通過這個接口,您可以執(zhí)行命令、獲得映射和管理事;SqlSessions 是由SqlSessionFactory 實例創(chuàng)建的。SqlSessionFactory 包含從不同的方式創(chuàng)建SqlSessions 實例的方法。而SqlSessionFactory 又是SqlSessionFactoryBuilder 從XML 文件,注解或者手動編寫java 配置代碼中創(chuàng)建的。
            1.1SqlSessionFactoryBuilder-SqlSessionFactoryBuilder 有五個build() 方法, 每個方法允許您從不同來源中創(chuàng)建SqlSession;

          1SqlSessionFactory build(Reader reader)
          2   SqlSessionFactory build(Reader reader, String environment)
          3   SqlSessionFactory build(Reader reader, Properties properties)
          4   SqlSessionFactory build(Reader reader, String env, Properties props)
          5   SqlSessionFactory build(Configuration config)
          6


               前四個方法較為常用,它們使用一個引用XML 文件的Reader 實例,或者更具體地說是上面討論的SqlMapConfig.xml 文件。
            可選參數(shù)是environment 和properties。Environment 決定加載的環(huán)境(包括數(shù)據(jù)源和事務管理)。
            如果您調用一個傳遞environment 參數(shù)的build 方法,MyBatis 將使用所傳遞的環(huán)境的配置。->default
            如果您調用一個傳遞properties 實例的方法,MyBatis 將會加載傳遞進來的屬性,并使這些屬性在配置文件中生效。這些屬
            性能夠應用于配置文件中使用${propName}語法的地方。
             例子-

          1String resource = "org/mybatis/builder/MapperConfig.xml";
          2   Reader reader = Resources.getResourceAsReader(resource);
          3   SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
          4   SqlSessionFactory factory = builder.build(reader);


            注意,我們使用了Resources工具類,Resources工具類放在org.mybatis.io包中。Resources類,正如它的名字暗示,幫助我們
            從類路徑、文件系統(tǒng)或者WEB URL加載資源。
             最后一個build 方法傳遞一個Configuration 的實例。Configuration 類包含您需要了解的關于SqlSessionFactory 實例的所有事
             情。Configuration 類有您已經(jīng)學過的所有配置開關,像java API 那樣提供方法暴露出來。
              DataSource/TransactionFactory/Environment/Configuration/Configuration.set...()....
            1.2 SqlSessionFactory-SqlSessionFactory 有六個方法用來創(chuàng)建SqlSession 實例。在一般情況下,選擇其中一個方法要考慮:
           事務(Transaction)-您是否想為會話使用事務作用域,或者自動提交(通常是指數(shù)據(jù)庫或者JDBC 驅動沒有事務的情況下)
           連接(Connection)-您想從配置數(shù)據(jù)源獲得一個連接,還是想自己提供一個?
           執(zhí)行(Execution)-您想讓MyBatis 重復使用用PreparedStatements 還是希望批量更新(包括插入和刪除)?
            1.3 SqlSession-正如前面提到的,SqlSession 實例是MyBatis 里最強大的類。SqlSession 實例里您會找到所有的執(zhí)行語句、提交
            或者回滾事務、獲得mapper 實例的方法。
             1.語句執(zhí)行方法組(Statement Execution Methods)-這些方法用來執(zhí)行定義在SQL 映射XML 文件中的select , insert,update
             和delete 語句。它們都很好理解,執(zhí)行時使用語句的ID 和并傳入?yún)?shù)對象(基本類型,javaBean,POJO 或者Map)。

          1Object selectOne(String statement, Object parameter)
          2    List selectList(String statement, Object parameter)
          3    int insert(String statement, Object parameter)
          4    int update(String statement, Object parameter)
          5    int delete(String statement, Object parameter)
          6


                 2.事務控制方法組(Transaction Control Methods)-有四個控制事務作用域的方法,當然,如果您使用了自動提交或者正在使用的是外部事務管理器,那這四個方法就沒什么作用。然而,如果您使用由Connection 實例管理的JDBC 的事務管理器,那這四個方法就非常管用:

          1void commit()
          2    void commit(boolean force)
          3    void rollback()
          4    void rollback(boolean force)


             3.清除會話層緩存(Clearing the Session Level Cache)-void clearCache(),SqlSession 實例有一個本地緩存,這個緩存在每次提交,回滾和關閉時進行清除。如果不想在每次提交或者回滾時都清空緩存,可以明確地調用clearCache()方法來關閉
             4.確保SqlSession 已經(jīng)關閉(Ensuring that SqlSession is Closed)-void close();-try/finally
             5.使用Mappers-<T> T getMapper(Class<T> type)-因此,一個最常用的方式是使用Mapper 接口來執(zhí)行映射語句。一個Mapper 接口定義的方法要與SqlSession 執(zhí)行的方法相匹配,即Mapper 接口方法名與映射SQL 文件中的映射語句ID 相同Mapper 注解-java 配置API 是基于XML 的MyBatis 配置的基礎,同時也是基于注解的配置基礎。注解提供了一個簡單的方式來執(zhí)行簡單映射語句而不引入大量的開銷。
               注意: 很不幸,java 注解在表現(xiàn)力與靈活性上是有限的。盡管花了很多時間來研究,設計與試驗,但是強大 的MyBatis 映射不能夠建立在注解之上。C#屬性則不會有這種限制。雖然如此,基于注解的配置并非沒有好 處的。
           2.SelectBuilder-Java 開發(fā)人員最討厭的事情就是不得不在java 代碼中嵌入SQL 語句。通常這樣做的原因是SQL 必須動態(tài)生成,要 不然,您可以把SQL 定義在外部文件或者存儲過程中。
            SelectBuilder 使用一組靜態(tài)導入方法和一個ThreadLocal 變量來啟用一個能夠很容易地組合條件并會注意所有SQL 格式的語法;概括地說,每一個SelectBuilder 方法都要以BEGIN()開頭,以SQL()結束,這也是生成SQL 的范圍。要像上面那樣使用SelectBuilder 的方法,您簡單地只要使用靜態(tài)導入就可以了,如:
            import static org.mybatis.jdbc.SelectBuilder.*;
           一旦被導入,您就能夠使用SelectBuilder 類的所有方法:BEGIN() / RESET()....SELECT(String)...WHERE(String)..SQL()
           3.SqlBuilder-
            與SelectBuilder類似,MyBatis 也包含了一個通用的SqlBuilder類,它包含了SelectBuilder的所有方法,同時也有一些針對inserts,
            updates, 和deletes 的方法。這個類在DeleteProvider 、InsertProvider和UpdateProvider (以及SelectProvider )里生成SQL 語句
          時非常有用。
            import static org.mybatis.jdbc.SqlBuilder.*;
            DELETE_FROM(String)....UPDATE(String)...

          posted on 2011-12-26 22:38 landon 閱讀(8060) 評論(0)  編輯  收藏 所屬分類: 學習筆記

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 黎平县| 新化县| 泰顺县| 彰化市| 阜康市| 郧西县| 泽普县| 广灵县| 响水县| 庆云县| 长沙县| 石渠县| 南木林县| 灌南县| 襄垣县| 丹凤县| 西畴县| 韶山市| 光泽县| 东辽县| 台湾省| 雅江县| 瑞金市| 昭通市| 平阴县| 周至县| 天台县| 扶风县| 阿尔山市| 黎平县| 新晃| 大石桥市| 乐昌市| 八宿县| 留坝县| 盈江县| 黎平县| 江达县| 蕉岭县| 上饶县| 灌云县|