首頁 後端開發 XML/RSS教程 My Batis 的XML 映射設定檔的實例詳解

My Batis 的XML 映射設定檔的實例詳解

Apr 24, 2017 am 09:33 AM

[java] view plain copy

<span style="font-size:14px;">  My Batis 支持SQL查询,是一些高级映射在持久层的完美展示。他更多的使用简单的XML或注解用于配置和原始映射,<span style="color: rgb(54, 54, 54); font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; line-height: 24px; ">摒除了大量的JDBC代码、手工设置参数和结果集封装,提高了开发效率。</span></span>
登入後複製

MyBatis的XML設定檔包含了影響MyBatis行為甚深的設定和屬性資訊。 XML文件的高層級結構如下:

configuration配置

environment環境變數

 transactionManager事務管理器

dataSource資料來源

 properties屬性

  settings設定

 typeAliases類型命名

typeHandlers類型處理器

objectFactory物件工廠

# plugins外掛程式

objectFactory物件工廠

# plugins插件

# environments環境

 映射器

 下面就對各個屬性配置做出詳細介紹

    properties

       這些是外部化的,可替代的屬性,這些屬性也可以配置在典型的Java屬性設定檔中,或透過properties元素的子元素來傳遞。

                     例如:

[html] view plain copy
<properties resource="jdbc_mysql.properties" />  
[html] view plain copy
<dataSource type="POOLED">  
[html] view plain copy
<property name="driver" value="${driver}"/>  
[html] view plain copy
<property name="url" value="${url}"/>  
[html] view plain copy
<property name="username" value="${username}"/>  
[html] view plain copy
<property name="password" value="${password}"/>  
[html] view plain copy
</dataSource>
登入後複製

              此範例中設定的username和password而言會由properties元素中設定的值一起取代新範例中的username和password。 driver和url屬性將會從包含進來的jdbc_mysql.properties檔案中的值來取代。

   Settings

       這些是極為重要的調整,它們會修改MyBatis在運作時的行為。下面這個表格描述了設定訊息,它們的意義和預設值。

 設定參數                                                             

cacheEnabled       這個配置讓全域的對應器啟用或停用為快取。

lazyLoadingEnabled  全域啟用或停用延遲載入。當停用時,所有關聯物件都會即時載入。

aggressiveLazyLoading     啟用時,有延遲載入屬性的物件會在被呼叫時完全載入任意屬性。否則,每種屬性將會依需要載入。

multipleResultSetsEnabled       允許或不允許多種結果集從一個單獨的語句中傳回(需要適合的驅動)。

useColumnLabel      使用列標籤取代列名。不同的驅動在這方便表現不同。參考驅動文件或充分測試兩種方法來決定所使用的驅動。

useGeneratedKeys     允許JDBC支援產生的鍵。需要適合的驅動。如果設定為true則這個設定強制產生的鍵被使用,儘管有些驅動拒絕相容但仍然有效(例如Derby)。

autoMappingBehavior       指定MyBatis如何自動對應列到欄位/屬性。 PARTIAL只會自動映射簡單,沒有巢狀的結果。 FULL會自動對應任意複雜的結果(嵌套的或其他情況)。

defaultExecutorType   配置預設的執行器。 SIMPLE執行器沒有什麼特別之處。 REUSE執行器重複使用預處理語句。 BATCH執行器重複使用語句和批次更新

defaultStatementTimeout   設定逾時時間,它決定驅動等待一個資料庫回應的時間。

一個設定訊息元素的範例,完整的設定如下所示:

<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="enhancementEnabled" value="false"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
</settings>
登入後複製

typeAliases

      類型別名是為Java類型命名一個短的名字。它只和XML配置有關,只用來減少類別完全限定名的多餘部分。例如:

[html] view plain copy
<typeAliases>  
[html] view plain copy
<typeAlias alias="Author" type="domain.blog.Author"/>  
[html] view plain copy
<typeAlias alias="Blog" type="domain.blog.Blog"/>  
[html] view plain copy
<typeAlias alias="Comment" type="domain.blog.Comment"/>  
[html] view plain copy
<typeAlias alias="Post" type="domain.blog.Post"/>  
[html] view plain copy
<typeAlias alias="Section" type="domain.blog.Section"/>  
[html] view plain copy
<typeAlias alias="Tag" type="domain.blog.Tag"/>  
[html] view plain copy
</typeAliases>
登入後複製

使用這個配置,「Blog」可以任意用來取代「domain.blog.Blog」所使用的地方。

typeHandlers

           無論是MyBatis在預處理語句中設定一個參數,或是從結果集中取出一個值時,類型處理器被用來將取得的值以適當的方式轉換成Java類型。下面這個列表描述了預設的類型處理器。 依序為 型別處理器Java型別JDBC型別

 BooleanTypeHandler           Boolean,boolean       任何相容的布林值

## ByteTypeHandler    任何相容的數位或位元組類型

ShortTypeHandler                 Short ,short           任何相容的數位或短整數

IntegerTypeHandler             Integer,int        ,long            任何相容的數位或長整數型###

FloatTypeHandler Float,float 任何兼容的数字或单精度浮点型

DoubleTypeHandler Double,double 任何兼容的数字或双精度浮点型

BigDecimalTypeHandler BigDecimal 任何兼容的数字或十进制小数类型

StringTypeHandler String CHAR和VARCHAR类型

ClobTypeHandler String CLOB和LONGVARCHAR类型

NStringTypeHandler String NVARCHAR和NCHAR类型

NClobTypeHandler String NCLOB类型

ByteArrayTypeHandler byte[] 任何兼容的字节流类型

BlobTypeHandler byte[] BLOB和LONGVARBINARY类型

DateTypeHandler Date(java.util) TIMESTAMP类型

DateOnlyTypeHandler Date(java.util) DATE类型

TimeOnlyTypeHandler Date(java.util) TIME类型

SqlTimestampTypeHandler Timestamp(java.sql) TIMESTAMP类型

SqlDateTypeHandler Date(java.sql) DATE类型

SqlTimeTypeHandler Time(java.sql) TIME类型

ObjectTypeHandler Any 其他或未指定类型

EnumTypeHandler Enumeration类型 VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

objectFactory
MyBatis每次创建结果对象新的实例时,它使用一个ObjectFactory实例来完成。如果参数映射存在,默认的ObjectFactory不比使用默认构造方法或带参数的构造方法实例化目标类做的工作多。

plugins
MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用:

Executor
            (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
 ParameterHandler
            (getParameterObject, setParameters)
 ResultSetHandler
          (handleResultSets, handleOutputParameters)
 StatementHandler
登入後複製

(prepare, parameterize, batch, update, query)
这些类中方法的详情可以通过查看每个方法的签名来发现,而且它们的源代码在MyBatis的发行包中有。你应该理解你覆盖方法的行为,假设你所做的要比监视调用要多。如果你尝试修改或覆盖一个给定的方法,你可能会打破MyBatis的核心。这是低层次的类和方法,要谨慎使用插件。

使用插件是它们提供的非常简单的力量。简单实现拦截器接口,要确定你想拦截的指定签名。

java代码:

[javascript] view plain copy
@Intercepts({@Signature(type= Executor.class,method = "update",  
[javascript] view plain copy
args = {MappedStatement.class,Object.class})})  
[javascript] view plain copy
public class ExamplePlugin implements Interceptor {  
[javascript] view plain copy
public Object intercept(Invocation invocation) throws Throwable  
[javascript] view plain copy
{  
[javascript] view plain copy
return invocation.proceed();  
[javascript] view plain copy
}  
[javascript] view plain copy
public Object plugin(Object target) {  
[javascript] view plain copy
return Plugin.wrap(target, this);  
[javascript] view plain copy
}  
[javascript] view plain copy
public void setProperties(Properties properties) {  
[javascript] view plain copy
}  
[html] view plain copy
MapperConfig.xml  
[html] view plain copy
<plugins>  
[html] view plain copy
<plugin interceptor="org.mybatis.example.ExamplePlugin">  
[html] view plain copy
<property name="someProperty" value="100"/>  
[html] view plain copy
</plugin>  
[html] view plain copy
</plugins>  
[html] view plain copy
登入後複製

上面的插件将会拦截在Executor实例中所有的“update”方法调用,它也是负责低层次映射语句执行的内部对象。

environments

[html] view plain copy
<environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="${jdbc.driver}" />  
                <property name="url" value="${jdbc.url}"/>  
                <property name="username" value="${jdbc.user}" />  
                <property name="password" value="${jdbc.password}" />  
                                <property name="poolPingEnabled" value="true"/>  
                <property name="poolPingQuery" value="SELECT * FROM app_setup_setting WHERE name=&#39;allow_setup_unknown_app&#39;" />  
                        <property name="poolPingConnectionsNotUsedFor" value="7200000"/>   
            </dataSource>  
        </environment>  
    </environments>  
dataSsource
登入後複製

dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。见上
transactionManager

在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):
1.JDBC – 这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2.MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false。例如:

[html] view plain copy
<transactionManager type="MANAGED">  
<property name="closeConnection" value="false"/>  
</transactionManager>
登入後複製

这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换使用它们,你需要放置将你自己的类的完全限定名或类型别名,它们引用了你对TransacFactory接口的实现类。
public interface TransactionFactory {
void setProperties(Properties props);
Transaction newTransaction(Connection conn, boolean autoCommit);
}
任何在XML中配置的属性在实例化之后将会被传递给setProperties()方法。你的实现类需要创建一个事务接口的实现,这个接口也很简单:

[html] view plain copy
public interface Transaction {  
Connection getConnection();  
void commit() throws SQLException;  
void rollback() throws SQLException;  
void close() throws SQLException;  
}
登入後複製

使用这两个接口,你可以完全自定义MyBatis对事务的处理。

mappers

既然MyBatis的行为已经由上述元素配置完了,我们现在就要定义SQL映射语句了。但是,首先我们需要告诉MyBatis到哪里去找到这些语句。Java在这方面没有提供一个很好的方法,所以最佳的方式是告诉MyBatis到哪里去找映射文件。你可以使用相对于类路径的资源引用,或者字符表示,或url引用的完全限定名(包括file:///URLs)。例如:

[html] view plain copy
// Using classpath relative resources(首选)  
<mappers>  
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>  
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>  
<mapper resource="org/mybatis/builder/PostMapper.xml"/>  
</mappers>  
// Using url fully qualified paths  
<mappers>  
<mapper url="file:///var/sqlmaps/AuthorMapper.xml"/>  
<mapper url="file:///var/sqlmaps/BlogMapper.xml"/>  
<mapper url="file:///var/sqlmaps/PostMapper.xml"/>  
</mappers>
登入後複製

以上是My Batis 的XML 映射設定檔的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

能否用PowerPoint開啟XML文件 能否用PowerPoint開啟XML文件 Feb 19, 2024 pm 09:06 PM

XML檔可以用PPT開啟嗎? XML,即可擴展標記語言(ExtensibleMarkupLanguage),是一種廣泛應用於資料交換和資料儲存的通用標記語言。與HTML相比,XML更加靈活,能夠定義自己的標籤和資料結構,使得資料的儲存和交換更加方便和統一。而PPT,即PowerPoint,是微軟公司開發的一種用於創建簡報的軟體。它提供了圖文並茂的方

使用Python實現XML資料的合併與去重 使用Python實現XML資料的合併與去重 Aug 07, 2023 am 11:33 AM

使用Python實現XML資料的合併和去重XML(eXtensibleMarkupLanguage)是一種用於儲存和傳輸資料的標記語言。在處理XML資料時,有時候我們需要將多個XML檔案合併成一個,或移除重複的資料。本文將介紹如何使用Python實現XML資料的合併和去重的方法,並給出對應的程式碼範例。一、XML資料合併當我們有多個XML文件,需要將其合

Python中的XML資料轉換為CSV格式 Python中的XML資料轉換為CSV格式 Aug 11, 2023 pm 07:41 PM

Python中的XML資料轉換為CSV格式XML(ExtensibleMarkupLanguage)是一種可擴充標記語言,常用於資料的儲存與傳輸。而CSV(CommaSeparatedValues)則是一種以逗號分隔的文字檔案格式,常用於資料的匯入和匯出。在處理資料時,有時需要將XML資料轉換為CSV格式以便於分析和處理。 Python作為一種功能強大

使用Python實現XML資料的篩選和排序 使用Python實現XML資料的篩選和排序 Aug 07, 2023 pm 04:17 PM

使用Python實現XML資料的篩選和排序引言:XML是一種常用的資料交換格式,它以標籤和屬性的形式儲存資料。在處理XML資料時,我們經常需要對資料進行篩選和排序。 Python提供了許多有用的工具和函式庫來處理XML數據,本文將介紹如何使用Python實現XML資料的篩選和排序。讀取XML檔案在開始之前,我們需要先讀取XML檔案。 Python有許多XML處理函式庫,

Python實作XML與JSON之間的轉換 Python實作XML與JSON之間的轉換 Aug 07, 2023 pm 07:10 PM

Python實作XML與JSON之間的轉換導語:在日常的開發過程中,我們常常需要將資料在不同的格式之間轉換。 XML和JSON是常見的資料交換格式,在Python中,我們可以使用各種函式庫來實作XML和JSON之間的相互轉換。本文將介紹幾種常用的方法,並附帶程式碼範例。一、XML轉JSON在Python中,我們可以使用xml.etree.ElementTree模

使用Python處理XML中的錯誤和異常 使用Python處理XML中的錯誤和異常 Aug 08, 2023 pm 12:25 PM

使用Python處理XML中的錯誤和異常XML是一種常用的資料格式,用於儲存和表示結構化的資料。當我們使用Python處理XML時,有時可能會遇到一些錯誤和異常。在本篇文章中,我將介紹如何使用Python來處理XML中的錯誤和異常,並提供一些範例程式碼供參考。使用try-except語句捕捉XML解析錯誤當我們使用Python解析XML時,有時候可能會遇到一些

Python解析XML中的特殊字元和轉義序列 Python解析XML中的特殊字元和轉義序列 Aug 08, 2023 pm 12:46 PM

Python解析XML中的特殊字元和轉義序列XML(eXtensibleMarkupLanguage)是一種常用的資料交換格式,用於在不同系統之間傳輸和儲存資料。在處理XML檔案時,經常會遇到包含特殊字元和轉義序列的情況,這可能會導致解析錯誤或誤解資料。因此,在使用Python解析XML檔案時,我們需要了解如何處理這些特殊字元和轉義序列。一、特殊字元和

C#開發中如何處理XML和JSON資料格式 C#開發中如何處理XML和JSON資料格式 Oct 09, 2023 pm 06:15 PM

C#開發中如何處理XML和JSON資料格式,需要具體程式碼範例在現代軟體開發中,XML和JSON是廣泛應用的兩種資料格式。 XML(可擴展標記語言)是一種用於儲存和傳輸資料的標記語言,而JSON(JavaScript物件表示)是一種輕量級的資料交換格式。在C#開發中,我們經常需要處理和操作XML和JSON數據,本文將重點放在如何使用C#處理這兩種數據格式,並附上

See all articles