亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatis中XML映射配置文件的示例分析

發布時間:2021-09-17 11:51:26 來源:億速云 閱讀:199 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關MyBatis中XML映射配置文件的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

<span style="font-size:14px;">  My Batis 支持SQL查詢,是一些高級映射在持久層的完美展示。他更多的使用簡單的XML或注解用于配置和原始映射,<span style="color: rgb(54, 54, 54); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 24px; ">摒除了大量的JDBC代碼、手工設置參數和結果集封裝,提高了開發效率。</span></span>

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

configuration配置

environment環境變量

transactionManager事務管理器

dataSource數據源

properties屬性

settings設置

typeAliases類型命名

typeHandlers類型處理器

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元素中設置的值來替換。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                  Byte,byte           任何兼容的數字或字節類型

ShortTypeHandler                 Short,short           任何兼容的數字或短整型

IntegerTypeHandler             Integer,int           任何兼容的數字和整型

LongTypeHandler                Long,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='allow_setup_unknown_app'" />  
                        <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>

感謝各位的閱讀!關于“MyBatis中XML映射配置文件的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深泽县| 广西| 永登县| 淅川县| 黄浦区| 宜州市| 八宿县| 手机| 吉木萨尔县| 山东省| 慈利县| 黑水县| 万源市| 克什克腾旗| 旌德县| 丹东市| 张掖市| 井冈山市| 庆云县| 汉沽区| 新营市| 邵阳县| 雷波县| 绥德县| 大兴区| 新平| 密山市| 隆回县| 苍山县| 鲁山县| 云浮市| 湖南省| 巴塘县| 中山市| 武汉市| 长丰县| 左权县| 苗栗县| 弋阳县| 辽源市| 大新县|