<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

     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 提供了一個(gè)完整的配置類(Configuration class),它提供了與XML 文件相同的配置選項(xiàng)。

    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);


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

    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)在有一個(gè)更簡(jiǎn)便的方式,那就是對(duì)給定的映射語(yǔ)句,使用一個(gè)正確描述參數(shù)與返回值的接口(如BlogMapper.class),您就能更清晰地執(zhí)行類型安全的代碼,從而避免錯(cuò)誤和異常。

    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 語(yǔ)句
     上面的例子中,映射語(yǔ)句已經(jīng)在XML 配置文件或注解中定義;,所有MyBatis 提供的功能特性都可以通過(guò)基于XML 映射配置文件 配置來(lái)實(shí)現(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ù)類型,返回類型,就是一個(gè)方法
     7   select * from Blog where id = #{id}
     8   </select>
     9  </mapper>
    10


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

     對(duì)映射類還有一個(gè)更好的方法,就像前面的BlogMapper。它們的映射語(yǔ)句不需要完全在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  }


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

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


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

    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 配置文件包含了設(shè)置和影響MyBatis 行為的屬性;下面為層次結(jié)構(gòu)-
      • configuration
       o properties
       o settings
       o typeAliases
       o typeHandlers
       o objectFactory
       o plugins
       o environments
        ?? environment
         • transactionManager
         • dataSource
       o mappers
      1.properties 元素-可以配置在一個(gè)典型的Java 屬性文件中,或者通過(guò)properties 元素的子元素進(jìn)行配置;最優(yōu)先的屬性是通過(guò)方
      法參數(shù)來(lái)傳遞的屬性,然后是通過(guò)resource/url 配置的屬性,最后是在MyBatis 的Mapper 配置文件中,properties 元素主體中
      指定的屬性。
      2.Settings 元素-設(shè)置和改變MyBatis 運(yùn)行中的行為,一個(gè)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 元素-別名是一個(gè)較短的Java 類型的名稱。這只是與XML 配置文件相關(guān)聯(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”了;對(duì)常用的java 類型,已經(jīng)內(nèi)置了一些別名支持。這些別名都
       是不區(qū)分大小寫的。注意java的基本數(shù)據(jù)類型,它們進(jìn)行了特別處理,加了“_”前綴。
      4.typeHandlers 元素-當(dāng)MyBatis 設(shè)置參數(shù)到PreparedStatement 或者從ResultSet 結(jié)果集中取得值時(shí),就會(huì)使用TypeHandler 來(lái)處理
      數(shù)據(jù)庫(kù)類型與java 類型之間轉(zhuǎn);能夠重寫類型處理器(type handlers),或者創(chuàng)建您自己的類型處理器去處理沒(méi)有被支持
    的或非標(biāo)準(zhǔn)的類型。要做到這一點(diǎn),只要實(shí)現(xiàn)TypeHandler 接口(org.mybatis.type),并且將您的TypeHandler 類映射到j(luò)ava 類型和可選的
    JDBC 類型即可。
      5.objectFactory 元素-MyBatis 每次創(chuàng)建一個(gè)結(jié)果對(duì)象實(shí)例都會(huì)使用ObjectFactory 實(shí)例。使用默認(rèn)的ObjectFactory 與使用默認(rèn)的
      構(gòu)造函數(shù)(或含參數(shù)的構(gòu)造函數(shù))來(lái)實(shí)例化目標(biāo)類沒(méi)什么差別。如果您想重寫ObjectFactory 來(lái)改變其默認(rèn)行為,那您能通
      過(guò)創(chuàng)造您自己的ObjectFactory 來(lái)做到.->extends DefaultObjectFactory
      6.Plugins 元素-MyBatis 允許您在映射語(yǔ)句執(zhí)行的某些點(diǎn)攔截方法調(diào)用->implements Interceptor
      7.Environments 元素-MyBatis 能夠配置多套運(yùn)行環(huán)境,這有助于將您的SQL 映射到多個(gè)數(shù)據(jù)庫(kù)上;雖然您可以配置多個(gè)運(yùn)行環(huán)
      境,但是每個(gè)SqlSessionFactory 實(shí)例只能選擇一個(gè)運(yùn)行環(huán)境->每個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)SqlSessionFactory 實(shí)例
          

     1<environments default="development">
     2   <environment id="development">
     3   <transactionManager type="JDBC">//事務(wù)管理器
     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事務(wù)管理器-MyBatis 有兩種事務(wù)管理類型(即type=”[JDBC|MANAGED]”);JDBC – 這個(gè)配置直接使用JDBC 的提交和 回滾功能。它依賴于從數(shù)據(jù)源獲得連接來(lái)管理事務(wù)的生命周期;MANAGED – 這個(gè)配置基本上什么都不做。它從不提交或者回滾一個(gè)連接的事務(wù)。而是讓容器(例如:Spring 或者J2EE 應(yīng)用服務(wù)器)來(lái)管理事務(wù)的生命周期。
       7.2dataSource 元素-dataSource 元素使用標(biāo)準(zhǔn)的JDBC 數(shù)據(jù)源接口來(lái)配置JDBC 連接對(duì)象源。
      8.Mappers 元素-
       現(xiàn)在,MyBatis 的行為屬性都已經(jīng)在上面的配置元素中配置好了,接下來(lái)開(kāi)始定義映射SQL語(yǔ)句;首先,我們需要告訴MyBatis 在哪里能夠找到我們定義的映射SQL 語(yǔ)句-可以使用類資源路徑或者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 映射文件。而其它的更詳細(xì)的信息配置在每一個(gè)SQL映射文件里。
     7.SQL 映射XML 文件
      MyBatis 真正強(qiáng)大之處就在這些映射語(yǔ)句,也就是它的魔力所在。對(duì)于它的強(qiáng)大功能,SQL 映射文件的配置卻非常簡(jiǎn)單。
      如果您比較SQL 映射文件配置與JDBC 代碼,您很快可以發(fā)現(xiàn),使用SQL 映射文件配置可以節(jié)省95%的代碼量。MyBatis 被創(chuàng)建來(lái)專注于SQL,但又給您自己的實(shí)現(xiàn)極大的空間。SQL 映射XML 文件只有一些基本的元素需要配置,并且要按照下面的順序來(lái)定義:
      • cache –在特定的命名空間配置緩存。
      • cache-ref – 引用另外一個(gè)命名空間配置的緩存.
      • resultMap – 最復(fù)雜也是最強(qiáng)大的元素,用來(lái)描述如何從數(shù)據(jù)庫(kù)結(jié)果集里加載對(duì)象。
      • sql – 能夠被其它語(yǔ)句重用的SQL 塊。
      • insert –INSERT 映射語(yǔ)句
      • update –UPDATE 映射語(yǔ)句
      • delete –DELEETE 映射語(yǔ)句
      • select –SELECT 映射語(yǔ)句
      7.1Select 元素-
       對(duì)簡(jiǎn)單的查詢,select 元素的配置是相當(dāng)簡(jiǎn)單的:

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


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

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

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

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

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

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


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

    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加載資源。
       最后一個(gè)build 方法傳遞一個(gè)Configuration 的實(shí)例。Configuration 類包含您需要了解的關(guān)于SqlSessionFactory 實(shí)例的所有事
       情。Configuration 類有您已經(jīng)學(xué)過(guò)的所有配置開(kāi)關(guān),像java API 那樣提供方法暴露出來(lái)。
        DataSource/TransactionFactory/Environment/Configuration/Configuration.set...()....
      1.2 SqlSessionFactory-SqlSessionFactory 有六個(gè)方法用來(lái)創(chuàng)建SqlSession 實(shí)例。在一般情況下,選擇其中一個(gè)方法要考慮:
     事務(wù)(Transaction)-您是否想為會(huì)話使用事務(wù)作用域,或者自動(dòng)提交(通常是指數(shù)據(jù)庫(kù)或者JDBC 驅(qū)動(dòng)沒(méi)有事務(wù)的情況下)
     連接(Connection)-您想從配置數(shù)據(jù)源獲得一個(gè)連接,還是想自己提供一個(gè)?
     執(zhí)行(Execution)-您想讓MyBatis 重復(fù)使用用PreparedStatements 還是希望批量更新(包括插入和刪除)?
      1.3 SqlSession-正如前面提到的,SqlSession 實(shí)例是MyBatis 里最強(qiáng)大的類。SqlSession 實(shí)例里您會(huì)找到所有的執(zhí)行語(yǔ)句、提交
      或者回滾事務(wù)、獲得mapper 實(shí)例的方法。
       1.語(yǔ)句執(zhí)行方法組(Statement Execution Methods)-這些方法用來(lái)執(zhí)行定義在SQL 映射XML 文件中的select , insert,update
       和delete 語(yǔ)句。它們都很好理解,執(zhí)行時(shí)使用語(yǔ)句的ID 和并傳入?yún)?shù)對(duì)象(基本類型,javaBean,POJO 或者M(jìn)ap)。

    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.事務(wù)控制方法組(Transaction Control Methods)-有四個(gè)控制事務(wù)作用域的方法,當(dāng)然,如果您使用了自動(dòng)提交或者正在使用的是外部事務(wù)管理器,那這四個(gè)方法就沒(méi)什么作用。然而,如果您使用由Connection 實(shí)例管理的JDBC 的事務(wù)管理器,那這四個(gè)方法就非常管用:

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


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

    posted on 2011-12-26 22:38 landon 閱讀(8058) 評(píng)論(0)  編輯  收藏 所屬分類: 學(xué)習(xí)筆記

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲av无码一区二区三区乱子伦 | 亚洲午夜未满十八勿入| 色窝窝亚洲av网| 女人18毛片特级一级免费视频| 久久综合亚洲色HEZYO社区| 久久免费高清视频| 中文字幕亚洲日韩无线码| 国产亚洲精品国产福利在线观看| 拨牐拨牐x8免费| 亚洲午夜国产精品无卡| 久久A级毛片免费观看| 老色鬼久久亚洲AV综合| 久久国产免费一区二区三区| 亚洲综合色婷婷七月丁香| 一级毛片免费不卡| 亚洲国产成人久久笫一页| 男男gay做爽爽免费视频| 成人永久福利免费观看| 亚洲七久久之综合七久久| 国语成本人片免费av无码| 国产亚洲国产bv网站在线| 免费精品国产自产拍在 | 亚洲日韩aⅴ在线视频| 一级一黄在线观看视频免费| 免费在线观看视频a| 美女视频黄频a免费观看| 吃奶摸下高潮60分钟免费视频| 亚洲av无码专区国产不乱码| 精品国产麻豆免费网站| 亚洲成av人无码亚洲成av人| 成人免费看吃奶视频网站| 亚洲欧美熟妇综合久久久久| 全免费一级毛片在线播放| 亚洲av日韩综合一区久热| 日本特黄特色aa大片免费| 精品久久久久久久久亚洲偷窥女厕| 日韩在线看片免费人成视频播放| 久久精品国产亚洲AV电影网| 亚洲第一永久AV网站久久精品男人的天堂AV| 午夜亚洲国产精品福利| 亚洲国产香蕉人人爽成AV片久久|