欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

深入淺出MyBatis:MyBatis的所有配置-創(chuàng)新互聯(lián)

上一篇介紹了JDBC的相關(guān)概念、MyBatis的特性與Hibernate的區(qū)別、MyBatis的基本組件與生命周期,基本可以使用MyBatis了。

10多年的旅順口網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整旅順口建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“旅順口網(wǎng)站設(shè)計”,“旅順口網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

這一篇詳細介紹MyBatis的配置,首先看下配置XML文件的層次結(jié)構(gòu),然后詳細介紹每個配置項,說明每項的作用,值的取值與含義。

下面列出MyBatis配置XML文件的層次結(jié)構(gòu),這些層次是不能夠顛倒順序的。

<?xml version="1.0" encoding="UTF-8"?>  
<configuration>  
    <properties/>  
    <settings/>  
    <typeAliases/>  
    <typeHandles/>  
    <objectFactory/>  
    <plugins/>  
    <environments>  
        <environment>  
            <transanctionManager/> <!-- 配置事務(wù)管理器 -->  
            <dataSource/> <!-- 配置數(shù)據(jù)源 -->  
        </environment>  
    </environments>  

    <databaseIdProvider/> <!-- 數(shù)據(jù)庫廠商標識 -->  
    <mappers/> <!-- 映射器 -->  
</configuration>
properties元素

將一些公用、經(jīng)常變更的值單獨聲明,能在配置文件的上下文中使用它,MyBatis提供了3種配置方式:

  • property子元素
  • properties配置文件
  • 程序參數(shù)傳遞
property子元素
<properties>
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mi-user"/>
        <property name="username" value="root"/>
        <property name="pwd" value="123456"/>
    </properties>
properties配置文件

創(chuàng)建一個配置文件 jdbc.properties

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mi-user
username = root
password = 123456

設(shè)置properties配置文件

<properties resource='jdbc.properties' />
程序參數(shù)傳遞

實際工作中,會遇到這種場景:系統(tǒng)由運維人員配置,生成數(shù)據(jù)庫的密碼對開發(fā)者是保密的,對用戶名和密碼進行了加密。可以通過程序參數(shù)傳遞的方式,先解密,再設(shè)置property。

//讀入配置文件流
InputStream cfgStream = Resources.getResourceAsStream("mybatis-config.xml");
Reader cfgReader = new InputStreamReader(cfgStream);

//讀入屬性文件流
InputStream proStream = Resources.getResourceAsStream("jdbc.properties");
Reader proReader = new InputStreamReader(proStream);

Properties properties = new Properties();
properties.load(proReader);
//轉(zhuǎn)換為明文
properties.setProperty("username",decode(properties.getProperty("username")));
properties.setProperty("pwd",decode(properties.getProperty("pwd")));

//創(chuàng)建sqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(cfgReader,properties);

如果3種配置同時出現(xiàn),優(yōu)先級為第3種 > 第2種 > 第1種,推薦使用第2種,有特殊需求時使用第3種。

設(shè)置

設(shè)置會改變MyBatis運行時的行為,設(shè)置項很多,只會介紹常用的配置,想了解全部配置可以查看官方文檔。

  • cacheEnabled,全局地開啟或關(guān)閉配置文件中的所有映射器已經(jīng)配置的任何緩存,默認為true;
  • lazyLoadingEnabled,延遲加載的全局開關(guān),當(dāng)開啟時,所有關(guān)聯(lián)對象都會延遲加載,特定關(guān)聯(lián)關(guān)系中可通過設(shè)置fetchType屬性來覆蓋該項的開關(guān)狀態(tài),默認為false;
  • aggressiveLazyLoading,當(dāng)開啟時,任何方法的調(diào)用都會加載該對象的所有屬性。否則,每個屬性會按需加載,3.4.1版本之前默認為true,3.4.1之后默認為false;
  • autoMappingBehavior,指定MyBatis應(yīng)如何自動映射列到字段或?qū)傩?,NONE 表示取消自動映射,PARTIAL 只會自動映射沒有定義嵌套結(jié)果集映射的結(jié)果集,F(xiàn)ULL 會自動映射任意復(fù)雜的結(jié)果集,默認為PARTIAL;
  • autoMappingUnknownColumnBehavior,指定發(fā)現(xiàn)自動映射目標未知列(或者未知屬性類型)的行為,NONE: 不做任何反應(yīng),WARNING: 輸出提醒日志,F(xiàn)AILING: 映射失敗,默認為NONE;
  • defaultStatementTimeout,設(shè)置超時時間,它決定驅(qū)動等待數(shù)據(jù)庫響應(yīng)的秒數(shù);
  • mapUnderscoreToCamelCase,是否開啟自動駝峰命名規(guī)則(camel case)映射,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN 到經(jīng)典 Java 屬性名 aColumn 的類似映射,默認為false;
  • defaultEnumTypeHandler,指定 Enum 使用的默認 TypeHandler,默認為org.apache.ibatis.type.EnumTypeHandler;
  • returnInstanceForEmptyRow,當(dāng)返回行的所有列都是空時,MyBatis默認返回null。 當(dāng)開啟這個設(shè)置時,MyBatis會返回一個空實例,默認為false;
  • localCacheScope,MyBatis 利用本地緩存機制(Local Cache)防止循環(huán)引用(circular references)和加速重復(fù)嵌套查詢。 默認值為 SESSION,這種情況下會緩存一個會話中執(zhí)行的所有查詢。 若設(shè)置值為 STATEMENT,本地會話僅用在語句執(zhí)行上,對相同 SqlSession 的不同調(diào)用將不會共享數(shù)據(jù),默認為SESSION;
  • logImpl,指定日志的具體實現(xiàn),比如SLF4J|LOG4J|COMMONS_LOGGING等;
別名

在配置映射文件中,需要指定類的全限定名,為了簡化,可以聲明一個簡短的名稱去指代它,可以在MyBatis上下文中使用。系統(tǒng)已經(jīng)為我們定義了常用的類型,比如數(shù)值、字符串、日期、集合等。對于自定義的業(yè)務(wù)POJO,需要自定義別名。

<typeAliases>
     <typeAlias alias="role" type="com.learn.chapter2.po.Role"/>
</typeAliases>

也可以通過注解方式進行,首先配置一個掃描的包,然后在類定義時添加注解@Alias("role")。

<typeAliases>
     <package name="com.learn.chapter2.po" />
</typeAliases>
@Alias("role")
public class Role{
}
類型處理器

MyBatis在預(yù)處理語句中設(shè)置一個參數(shù)時,或者從結(jié)果集中取出一個值時,都會用注冊了的typeHader進行處理。typeHander的作用就是將參數(shù)從javaType轉(zhuǎn)化為jdbcType,或者從數(shù)據(jù)庫取出結(jié)果時把jdbcType轉(zhuǎn)化為javaType。

系統(tǒng)內(nèi)部已經(jīng)定義了常用的類型處理器,有些情況下,需要自定義。

MyBatis也提供了枚舉類型的類型處理器,有2個轉(zhuǎn)化枚舉類型的typeHandler,EnumTypeHandler和EnumOrdinalTypeHandler,其中EnumTypeHandler是使用枚舉字符串名稱作為參數(shù)傳遞的,EnumOrdinalTypeHandler是使用整數(shù)下標作為參數(shù)傳遞的。

但這2個枚舉類型應(yīng)用不那么廣泛,更多的時候,需要自定義typeHandler進行處理。

自定義類型處理器,首先要定義類型處理類,實現(xiàn)TypeHandler泛型接口:

public class SexEnumTypeHandler implements TypeHandler<Sex> {

    @Override
    public void setParameter(PreparedStatement ps, int i, Sex sex, JdbcType jdbcType) throws SQLException {
        ps.setInt(i, sex.getId());
    }

    @Override
    public Sex getResult(ResultSet rs, String name) throws SQLException {
        return Sex.getSex(rs.getInt(name));
    }

    @Override
    public Sex getResult(ResultSet rs, int id) throws SQLException {
        return Sex.getSex(id);
    }

    @Override
    public Sex getResult(CallableStatement cs, int id) throws SQLException {
        return Sex.getSex(cs.getInt(id));
    }
}

然后注冊自定義的TypeHandler

<typeHandlers>
   <typeHandler handler="com.qqdong.study.SexEnumTypeHandler" javaType="sex"/>
</typeHandlers>

最后,在定義映射器時,指定typeHandler即可

<select id="getUser" parameterType="long" resultType="userMap">
</select>

<resultMap id="userMap" type="user">
    <result column="sex" property="sex" typeHandler="com.qqdong.study.SexEnumTypeHandler">
</resultMap>
ObjectFactory

當(dāng)MyBatis在構(gòu)建一個結(jié)果返回的時候,都會使用ObjectFactory去構(gòu)建POJO,在MyBatis中可以定制自己的對象工廠。一般不用配置,使用默認的DefaultObjectFactory即可。

插件plugin

插件比較復(fù)雜,后續(xù)單獨一篇文章介紹。

environments配置環(huán)境

配置環(huán)境可以注冊多個數(shù)據(jù)源,每個數(shù)據(jù)源包括基本配置和數(shù)據(jù)庫事務(wù)配置。

<environments default="development">
    <environment id="development">
    <!-- 采用jdbc事務(wù)管理 -->
        <transactionManager type="JDBC">
            <property name="autoCommit" value="false">
        </transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </dataSource>
    </environment>
 </environments>

其中,transactionManager指定數(shù)據(jù)庫事務(wù),有3種配置方法:

  • JDBC,采用JDBC方式管理事務(wù),在獨立編碼中常常使用;
  • MANAGED,采用容器方式管理事務(wù),在JNDI數(shù)據(jù)源中常用;
  • 自定義,由使用者自定義數(shù)據(jù)庫事務(wù)管理方法;

dataSource標簽,配置數(shù)據(jù)源連接信息,type配置對數(shù)據(jù)庫連接方式,有以下幾種:

  • UNPOOLED:非連接池數(shù)據(jù)庫;
  • POOLED:連接池數(shù)據(jù)庫;
  • JNDI:JNDI數(shù)據(jù)源;
  • 自定義數(shù)據(jù)源;
databaseIdProvider數(shù)據(jù)庫廠商標識

該屬性的作用在于指定SQL到對應(yīng)的數(shù)據(jù)庫廠商提供的數(shù)據(jù)庫中運行。不常用,就不介紹了。

映射器

映射器是MyBatis最復(fù)雜、最核心的配置,包括參數(shù)類型、動態(tài)SQL、定義SQL、緩存信息等功能,上篇文章也演示了具體的例子,下篇文章會重點介紹細節(jié)。

深入淺出MyBatis:MyBatis的所有配置

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

網(wǎng)站題目:深入淺出MyBatis:MyBatis的所有配置-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://aaarwkj.com/article40/dsjpeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站、軟件開發(fā)、用戶體驗網(wǎng)站收錄、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
成人黄色av免费看| 91大片在线观看视频| 亚洲综合美女极品啪啪啪| 亚洲香蕉av在线一区二区三区| 久久精品国产亚洲av久一一区| 成人午夜激情四射av| 四虎在线免费视频播放| 久久久久亚洲av成人网人| 午夜精品一区二区三区亚洲| 亚洲乱码一区二区三区人妇| 五月婷婷丁香视频在线| 99麻豆久久久精品国产| 亚洲一区二区三区精品乱码| sedoge在线播放免费有码| 韩国日本午夜福利在线| 欧美一区二区三区久久束缚| 中文字幕乱码熟女人妻视频| 国产三级视频在线观看视频| 精品国产三级a在线观看网站 | 精品少妇高潮蜜臀av| 欧美美女午夜福利视频| 一区二区三区欧美久久| 亚洲精品一区国产精品av| 东京热一精品无码av| 亚洲av男人天堂一区| 日韩欧美中文字幕综合网| 亚洲香蕉av在线一区二区三区| 日韩成人大片在线播放| 清纯唯美校园春色亚洲激情| 亚洲国产视频中文字幕| 日韩欧美一区二区三级| 日本东京热免费一二三区| 日本不卡不码高清免费| 日本高清免费中文字幕| 国产日韩欧美另类综合| 免费在线成人av观看| 国产操大奶头女人自拍av| 女人的天堂av免费在线观看| 国产亚洲一区二区三区成人| 欧美日韩精品视频专区| 少妇特黄a一区二区三区|