欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mybatis之旅第三篇-SqlMapConfig.xml全局配置文件解析

程序员文章站 2024-01-05 16:09:52
一、前言 刚换工作,为了更快的学习框架和了解业务,基本每天都会加班,导致隔了几天没有进行总结,心里总觉得不安,工作年限越长越感到学习的重要性,坚持下去!!! 经过前两篇的总结,已经基本掌握了mybatis的开发模式,这篇主要是总结SqlMapConfig.xml文件的配置 SqlMapConfig. ......

一、前言

刚换工作,为了更快的学习框架和了解业务,基本每天都会加班,导致隔了几天没有进行总结,心里总觉得不安,工作年限越长越感到学习的重要性,坚持下去!!!

经过前两篇的总结,已经基本掌握了mybatis的开发模式,这篇主要是总结sqlmapconfig.xml文件的配置

sqlmapconfig.xml中配置的内容和顺序如下:

配置内容 作用
properties 用来加载属性文件
settings 用来设置全局参数
typealiases 用来设置类型的别名
typehandlers 用来设置类型处理器
objectfactory 用来设置对象工厂
plugins 用来设置插件
environments 用来设置mybatis的环境
mappers 用来配置映射文件

注:配置文件必须按照此顺序进行配置

下面依次来介绍各个配置

二、properties(属性)

sqlmapconfig.xml可以引用java属性文件中的配置信息,如数据库配置,在config下新建db.properties 如图:

mybatis之旅第三篇-SqlMapConfig.xml全局配置文件解析

内容如下:

jdbc.driver=com.mysql.jdbc.driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterencoding=utf-8
jdbc.username=root
jdbc.password=123456

sqlmapconfig,xml 中修改:

<properties resource="config/db.properties">
        <!-- properties中还可以配置一些属性名和属性值,此处的优先加载
        <property name="" value=""/>
        <property name="jdbc.username" value=""/>
        <property name="jdbc.password" value=""/>
    -->
    </properties>

    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionmanager type="jdbc" />
            <!-- 数据库连接池 -->
            <datasource type="pooled">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url"
                          value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </datasource>
        </environment>
    </environments>

注意: mybatis 将按照下面的顺序来加载属性:在 properties 元素体内定义的属性首先被读取。 然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性

三、settings全局参数设置

mybatis框架运行时可以调整一些运行参数。比如,开启二级缓存,开启延迟加载等等。全局参数会影响mybatis的运行行为

setting(设置) description(描述) valid values(验证值组) default(默认值)
cacheenabled 在全局范围内启用或禁用缓存配置 任何映射器在此配置下。 true | false true
lazyloadingenabled 在全局范围内启用或禁用延迟加载。禁用时,所有相关联的将热加载。 true | false true
aggressivelazyloading 启用时,有延迟加载属性的对象将被完全加载后调用懒惰的任何属性。否则,每一个属性是按需加载。 true | false true
multipleresultsetsenabled 允许或不允许从一个单独的语句(需要兼容的驱动程序)要返回多个结果集。 true | false true
usecolumnlabel 使用列标签,而不是列名。在这方面,不同的驱动有不同的行为。参考驱动文档或测试两种方法来决定你的驱动程序的行为如何。 true | false true
usegeneratedkeys 允许jdbc支持生成的密钥。兼容的驱动程序是必需的。此设置强制生成的键被使用,如果设置为true,一些驱动会不兼容性,但仍然可以工作。 true | false false
automappingbehavior 指定mybatis的应如何自动映射列到字段/属性。none自动映射。 partial只会自动映射结果没有嵌套结果映射定义里面。 full会自动映射的结果映射任何复杂的(包含嵌套或其他)。 none,partial,full partial
defaultexecutortype 配置默认执行人。simple执行人确实没有什么特别的。 reuse执行器重用准备好的语句。 batch执行器重用语句和批处理更新。 simple,reuse,batch simple
saferowboundsenabled 允许使用嵌套的语句rowbounds。 true | false false
mapunderscoretocamelcase 从经典的数据库列名a_column启用自动映射到骆驼标识的经典的java属性名acolumn。 true | false false
localcachescope mybatis的使用本地缓存,以防止循环引用,并加快反复嵌套查询。默认情况下(session)会话期间执行的所有查询缓存。如果localcachescope=statment本地会话将被用于语句的执行,只是没有将数据共享之间的两个不同的调用相同的sqlsession。 sessionstatement session
dbctypefornull 指定为空值时,没有特定的jdbc类型的参数的jdbc类型。有些驱动需要指定列的jdbc类型,但其他像null,varchar或other的工作与通用值。 jdbctype enumeration. most common are: null, varchar and other other
lazyloadtriggermethods 指定触发延迟加载的对象的方法。 a method name list separated by commas equals,clone,hashcode,tostring
defaultscriptinglanguage 指定所使用的语言默认为动态sql生成。 a type alias or fully qualified class name. org.apache.ibatis.scripting.xmltags.xmldynamiclanguagedriver
callsettersonnulls 指定如果setter方法或地图的put方法时,将调用检索到的值是null。它是有用的,当你依靠map.keyset()或null初始化。注意原语(如整型,布尔等)不会被设置为null。 true | false false
logprefix 指定的前缀字串,mybatis将会增加记录器的名称。 any string not set
logimpl 指定mybatis的日志实现使用。如果此设置是不存在的记录的实施将自动查找。 slf4j | log4j | log4j2 | jdk_logging | commons_logging | stdout_logging | no_logging not set
proxyfactory 指定代理工具,mybatis将会使用创建懒加载能力的对象。 cglib | javassist cglib

 默认的配置如下:

<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="automappingbehavior" value="partial"/>
        <setting name="defaultexecutortype" value="simple"/>
        <setting name="defaultstatementtimeout" value="25"/>
        <setting name="saferowboundsenabled" value="false"/>
        <setting name="mapunderscoretocamelcase" value="false"/>
        <setting name="localcachescope" value="session"/>
        <setting name="jdbctypefornull" value="other"/>
        <setting name="lazyloadtriggermethods" value="equals,clone,hashcode,tostring"/>
    </settings>

四、typealiases(类型别名)

在mapper.xml中,定义很多的statement,statement需要parametertype指定输入参数的类型、需要resulttype指定输出结果的映射类型。如果在指定类型时输入类型全路径,有时候会很长,不方便进行开发,那么我们就可以针对parametertype或resulttype指定的类型定义一些别名,在mapper.xml中通过别名<typealiases>来定义,方便开发。

下面是默认的别名:

别名 映射的类型
_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

除了这些默认别名,我们还可以自己定义别名:

<typealiases>
    <!-- 单个别名定义 -->
    <typealias alias="user" type="com.yuanqinnan.model.user" />
    <!-- 批量别名定义,扫描整个包下的类,别名为类名(大小写不敏感) -->
    <package name="cn.itcast.mybatis.pojo" />
    <package name="其它包" />
</typealiases>

五、mappers(映射器)

mapper配置的几种方法:

通过resource加载单个映射文件

<mappers>
    <!-- 映射文件方式1,一个一个的配置-->
    <mapper resource="config/sqlmap/user.xml"/>
    <mapper resource="config/mapper/usermapper.xml"/>
</mappers>

使用mapper接口类路径

  <!-- 通过mapper接口加载单个映射配置文件遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;边规范的前提是:使用的是mapper代理方法; -->
  <mapper class="com.yuanqinnan.mapper.usermapper"/>

批量加载mapper(推荐使用)

<!--此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中-->
<mapper class="com.yuanqinnan.mapper"/>