欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

MyBatis學(xué)習(xí)之路之configuration配置

系統(tǒng) 2133 0

1.首先講解的是MyBatis核心配置文件configuration.xml的配置

一個完整的configuration.xml配置順序如下:

      
        1
      
       properties,settings,typeAliases,typeHandlers,objectFactory,objectWrapperFactory,plugins,environments,databaseIdProvider,mappers.
    

如果沒有按照上面的標簽順序來配置,編譯器會提示The content of element type "configuration" must match 的錯誤!!!

1)properties屬性:

該屬性允許我們將配置信息填寫在外部文件中,然后通過動態(tài)配置來獲取外部文件的配置信息,比如:

      1.在src目錄下創(chuàng)建db.properties文件

username=root

password=123456

url=jdbc:mysql://localhost:3306/mybatis

driver=com.mysql.jdbc.Driver


    
      2.可以在configuration.xml中配置<properties resource="db.properties"/>來引用外部文件


    
      3.這樣我們就可以使用動態(tài)配置來獲取外部文件的配置了:

<dataSource type="POOLED">

	<property name="username" value="${username}"/>

	<property name="password" value="${password}"/>

	<property name="url" value="${url}"/>

	<property name="driver" value="${driver}"/>

</dataSource>


    

?

2)settings

?這是MyBatis?修改操作運行過程細節(jié)的重要的步驟。下方這個表格描述了這些設(shè)置項、含義和默認值。

設(shè)置項

描述

允許值

默認值

cacheEnabled

對在此配置文件下的所有cache?進行全局性開/關(guān)設(shè)置。

true | false

true

lazyLoadingEnabled

全局性設(shè)置懶加載。如果設(shè)為‘false’,則所有相關(guān)聯(lián)的都會被初始化加載。

true | false

true

aggressiveLazyLoading

當(dāng)設(shè)置為‘true’的時候,懶加載的對象可能被任何懶屬性全部加載。否則,每個屬性都按需加載。

true | false

true

multipleResultSetsEnabled

允許和不允許單條語句返回多個數(shù)據(jù)集(取決于驅(qū)動需求)

true | false

true

useColumnLabel

使用列標簽代替列名稱。不同的驅(qū)動器有不同的作法。參考一下驅(qū)動器文檔,或者用這兩個不同的選項進行測試一下。

true | false

true

useGeneratedKeys

允許JDBC?生成主鍵。需要驅(qū)動器支持。如果設(shè)為了true,這個設(shè)置將強制使用被生成的主鍵,有一些驅(qū)動器不兼容不過仍然可以執(zhí)行。

true | false

false

autoMappingBehavior

指定MyBatis?是否并且如何來自動映射數(shù)據(jù)表字段與對象的屬性。PARTIAL將只自動映射簡單的,沒有嵌套的結(jié)果。FULL?將自動映射所有復(fù)雜的結(jié)果。

NONE,

PARTIAL,

FULL

PARTIAL

defaultExecutorType

配置和設(shè)定執(zhí)行器,SIMPLE?執(zhí)行器執(zhí)行其它語句。REUSE?執(zhí)行器可能重復(fù)使用prepared statements?語句,BATCH執(zhí)行器可以重復(fù)執(zhí)行語句和批量更新。

SIMPLE

REUSE

BATCH

SIMPLE

defaultStatementTimeout

設(shè)置一個時限,以決定讓驅(qū)動器等待數(shù)據(jù)庫回應(yīng)的多長時間為超時

正整數(shù)

Not Set

(null)

例如:

      
        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
      
      
        </
      
      
        settings
      
      
        >
      
    

?

3)typeAliases類型別名

類型別名是Java?類型的簡稱。

它僅僅只是關(guān)聯(lián)到XML?配置,簡寫冗長的JAVA?類名。例如:

      
        1
      
      
        <
      
      
        typeAliases
      
      
        >
      
      
        2
      
      
        <
      
      
        typeAlias 
      
      
        alias
      
      
        ="UserEntity"
      
      
         type
      
      
        ="com.manager.data.model.UserEntity"
      
      
        />
      
      
        3
      
      
        <
      
      
        typeAlias 
      
      
        alias
      
      
        ="StudentEntity"
      
      
         type
      
      
        ="com.manager.data.model.StudentEntity"
      
      
        />
      
      
        4
      
      
        <
      
      
        typeAlias 
      
      
        alias
      
      
        ="ClassEntity"
      
      
         type
      
      
        ="com.manager.data.model.ClassEntity"
      
      
        />
      
      
        5
      
      
        </
      
      
        typeAliases
      
      
        >
      
    

所以可以再xxxMapper.xml文件中這樣配置:

      
        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
      
      
        ="com.dao.UserDao"
      
      
        >
      
      
        6
      
      
        <
      
      
        select 
      
      
        id
      
      
        ="selectById"
      
      
         parameterType
      
      
        ="int"
      
      
         resultType
      
      
        ="UserEntity"
      
      
        >
      
      
        7
      
      
                select * from user where id=#{id}


      
      
        8
      
      
        </
      
      
        select
      
      
        >
      
      
        9
      
      
        </
      
      
        mapper
      
      
        >
      
    

使用這個配置,“UserEntity”就能在任何地方代替“com.manager.data.model.UserEntity”被使用。

還有一些與通用JAVA類型建立的別名。它們是大小寫敏感的,注意JAVA的基本類型,使用了_來命名。

別名

映射的類型

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

object

Object

map

Map

hashmap

HashMap

list

List

arraylist

ArrayList

collection

Collection

iterator

Iterator

?

?

4)typeHandles類型句柄

無論是MyBatis在預(yù)處理語句中設(shè)置一個參數(shù),還是從結(jié)果集中取出一個值時,類型處理器被用來將獲取的值以合適的方式轉(zhuǎn)換成Java類型。

下面這個表格描述了默認的類型處理器。

類型處理器

Java類型

JDBC類型

BooleanTypeHandler

Boolean,boolean

任何兼容的布爾值

ByteTypeHandler

Byte,byte

任何兼容的數(shù)字或字節(jié)類型

ShortTypeHandler

Short,short

任何兼容的數(shù)字或短整型

IntegerTypeHandler

Integer,int

任何兼容的數(shù)字和整型

LongTypeHandler

Long,long

任何兼容的數(shù)字或長整型

FloatTypeHandler

Float,float

任何兼容的數(shù)字或單精度浮點型

DoubleTypeHandler

Double,double

任何兼容的數(shù)字或雙精度浮點型

BigDecimalTypeHandler

BigDecimal

任何兼容的數(shù)字或十進制小數(shù)類型

StringTypeHandler

String

CHAR和VARCHAR類型

ClobTypeHandler

String

CLOB和LONGVARCHAR類型

NStringTypeHandler

String

NVARCHAR和NCHAR類型

NClobTypeHandler

String

NCLOB類型

ByteArrayTypeHandler

byte[]

任何兼容的字節(jié)流類型

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-任何兼容的字符串類型,作為代碼存儲(而不是索引)。

你可以重寫類型處理器或創(chuàng)建你自己的類型處理器來處理不支持的或非標準的類型。要這樣做的話,簡單實現(xiàn)TypeHandler接口(org.mybatis.type),然后映射新的類型處理器類到Java類型,還有可選的一個JDBC類型。然后再typeHandlers中添加這個類型處理器。

新定義的類型處理器將會覆蓋已經(jīng)存在的處理Java的String類型屬性和VARCHAR參數(shù)及結(jié)果的類型處理器。要注意MyBatis不會審視數(shù)據(jù)庫元信息來決定使用哪種類型,所以你必須在參數(shù)和結(jié)果映射中指定那是VARCHAR類型的字段,來綁定到正確的類型處理器上。這是因為MyBatis直到語句被執(zhí)行都不知道數(shù)據(jù)類型的這個現(xiàn)實導(dǎo)致的。

例如:

      
         1
      
      
        public
      
      
        class
      
       LimingStringTypeHandler 
      
        implements
      
      
         TypeHandler {  


      
      
         2
      
      
         3
      
      
            @Override  


      
      
         4
      
      
        public
      
      
        void
      
       setParameter(PreparedStatement ps, 
      
        int
      
       i, Object parameter, JdbcType jdbcType) 
      
        throws
      
      
         SQLException {  


      
      
         5
      
               System.out.println("setParameter - parameter: " + ((String) parameter) + ", jdbcType: " +
      
         jdbcType.TYPE_CODE);  


      
      
         6
      
      
                ps.setString(i, ((String) parameter));  


      
      
         7
      
      
            }  


      
      
         8
      
      
         9
      
      
            @Override  


      
      
        10
      
      
        public
      
       Object getResult(ResultSet rs, String columnName) 
      
        throws
      
      
         SQLException {  


      
      
        11
      
               System.out.println("getResult - columnName: " +
      
         columnName);  


      
      
        12
      
      
        return
      
      
         rs.getString(columnName);  


      
      
        13
      
      
            }  


      
      
        14
      
      
        15
      
      
            @Override  


      
      
        16
      
      
        public
      
       Object getResult(CallableStatement cs, 
      
        int
      
       columnIndex) 
      
        throws
      
      
         SQLException {  


      
      
        17
      
               System.out.println("getResult - columnIndex: " +
      
         columnIndex);  


      
      
        18
      
      
        return
      
      
         cs.getString(columnIndex);  


      
      
        19
      
      
            }  


      
      
        20
      
       } 
    

在配置文件的typeHandlers中添加typeHandler標簽

      
        <
      
      
        typeHandlers
      
      
        >
      
      
        <
      
      
        typeHandler 
      
      
        javaType
      
      
        ="String"
      
      
         jdbcType
      
      
        ="VARCHAR"
      
      
         handler
      
      
        ="liming.student.manager.type.LimingStringTypeHandler"
      
      
        />
      
      
        </
      
      
        typeHandlers
      
      
        >
      
    

?

5)對象工廠ObjectFactory

      
         1
      
      
        public
      
      
        class
      
       LimingObjectFactory 
      
        extends
      
      
         DefaultObjectFactory {  


      
      
         2
      
      
         3
      
      
        private
      
      
        static
      
      
        final
      
      
        long
      
       serialVersionUID = -399284318168302833L
      
        ;  


      
      
         4
      
      
         5
      
      
            @Override  


      
      
         6
      
      
        public
      
      
         Object create(Class type) {  


      
      
         7
      
      
        return
      
      
        super
      
      
        .create(type);  


      
      
         8
      
      
            }  


      
      
         9
      
      
        10
      
      
            @Override  


      
      
        11
      
      
        public
      
       Object create(Class type, List<Class> constructorArgTypes, List<Object>
      
         constructorArgs) {  


      
      
        12
      
               System.out.println("create - type: " +
      
         type.toString());  


      
      
        13
      
      
        return
      
      
        super
      
      
        .create(type, constructorArgTypes, constructorArgs);  


      
      
        14
      
      
            }  


      
      
        15
      
      
        16
      
      
            @Override  


      
      
        17
      
      
        public
      
      
        void
      
      
         setProperties(Properties properties) {  


      
      
        18
      
               System.out.println("setProperties - properties: " + properties.toString() + ", someProperty: " + properties.getProperty("someProperty"
      
        ));  


      
      
        19
      
      
        super
      
      
        .setProperties(properties);  


      
      
        20
      
      
            }  


      
      
        21
      
      
        22
      
       }  
    

在配置文件中添加objectFactory標簽

      
        <
      
      
        objectFactory 
      
      
        type
      
      
        ="liming.student.manager.configuration.LimingObjectFactory"
      
      
        >
      
      
        <
      
      
        property 
      
      
        name
      
      
        ="someProperty"
      
      
         value
      
      
        ="100"
      
      
        />
      
      
        </
      
      
        objectFactory
      
      
        >
      
    

?

6)插件(plugins)

MyBatis允許你在某一點攔截已映射語句執(zhí)行的調(diào)用。默認情況下,MyBatis允許使用插件來攔截方法調(diào)用:

      Executor(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

ParameterHandler(getParameterObject, setParameters)

ResultSetHandler(handleResultSets, handleOutputParameters)

StatementHandler(prepare, parameterize, batch, update, query)


    

這些類中方法的詳情可以通過查看每個方法的簽名來發(fā)現(xiàn),而且它們的源代碼在MyBatis的發(fā)行包中有。你應(yīng)該理解你覆蓋方法的行為,假設(shè)你所做的要比監(jiān)視調(diào)用要多。

如果你嘗試修改或覆蓋一個給定的方法,你可能會打破MyBatis的核心。這是低層次的類和方法,要謹慎使用插件。

使用插件是它們提供的非常簡單的力量。簡單實現(xiàn)攔截器接口,要確定你想攔截的指定簽名。

?

7)environment環(huán)境

MyBatis?可以配置多個環(huán)境。這可以幫助你SQL?映射對應(yīng)多種數(shù)據(jù)庫等。

?

8)映射器

這里是告訴MyBatis?去哪尋找映射SQL?的語句。可以使用類路徑中的資源引用,或者使用字符,輸入確切的URL?引用。

      
        1
      
      
        <
      
      
        mappers
      
      
        >
      
      
        2
      
      
        <
      
      
        mapper 
      
      
        resource
      
      
        ="com/manager/data/maps/UserMapper.xml"
      
      
        />
      
      
        3
      
      
        <
      
      
        mapper 
      
      
        resource
      
      
        ="com/manager/data/maps/StudentMapper.xml"
      
      
        />
      
      
        4
      
      
        <
      
      
        mapper 
      
      
        resource
      
      
        ="com/manager/data/maps/ClassMapper.xml"
      
      
        />
      
      
        5
      
      
        </
      
      
        mappers
      
      
        >
      
    

?

MyBatis學(xué)習(xí)之路之configuration配置


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品久久久久久 | 亚洲成人国产综合 | 国产探花在线精品一区二区 | 亚洲精品欧美综合四区 | 天天爽天天草 | 亚洲人成在线观看一区二区 | 成人欧美一区二区三区在线观看 | 在线欧美 | 91社区影院 | www91com国产91 | 欧美一级艳片视频免费观看 | 一区二区三区免费在线观看 | 99久久精品国产一区二区三区 | 色老头综合网 | 欧美大码毛片在线播放 | 在线观看黄色小视频 | 成人爽a毛片免费啪啪红桃视频 | 欧美精品一区二区在线观看 | 性色屋| 91精品国产乱码久久久久久久久 | 午夜社区 | 国产精品资源在线观看网站 | 国产 日韩 欧美 高清 | 亚洲国产精品网站 | 国产香蕉免费精品视频 | 三级黄毛片| 亚洲a级大片 | 国产精品99久久 | 久久久网| 一本色道久久综合 | 成人免费网站在线观看 | av色站 | 亚洲一区二区免费视频 | 日本毛片高清免费视频 | 久久小视频 | 成人在线观看国产 | 欧美国产中文字幕 | 边摸边吃奶边做激情叫床 | 久久日本精品99久久久久 | 国产精品午夜小视频观看 | 欧美αv |