MyBatis配置文件详解

主要元素

在MyBatis的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在根元素内进行配置。在进行配置时必须按照<properties>、<settings>、<typeAliases>、<typeHandlers>、<objectFactory>、<plugins>、<environments>、<databaseIdProvider>、<mappers>的顺序进行配置,否则在解析配置文件时会出错。

  1. <properties>

    	<properties\>是一个配置属性的元素,该元素通常用于将内部的配
    	置外在化,即通过外部的配置文件来动态的替换内部定义的属性。
    	例如将数据库的连接等属性通过外部化到properties文件。然后通过
    	<properties\>属性引入。
    	假设有一个数据库配置文件db.properties如下:
    	jdbc.driver = com.mysql.jdbc.Driver
    	jdbc.url = jdbc:mysql://localhost:3306/mybatis
    	jdbc.username = root
    	jdbc.password = 5678943
    	在MyBatis配置文件中使用properties元素引入db.properties文件:
    	<properties resource="db.properties"/>
    	使用db.properties中的属性:
    	${jdbc.driver}
    	除了使用外部的properties文件来指定配置的值之外,还可以使用
    	<porperties\>的子元素<property\>来指定值,或者在Java代码中来
    	动态的配置值。
    
  2. <settings>

    <settings\>元素主要用于改变MyBatis运行时的一些行为,例如开启二级
    缓存、开启延迟加载等。通常情况下不需要配置该属性的内容,保持默
    认值即可。但是在一些特殊情况下,了解该属性的一些配置还是有必要
    的。
    <settings\>的常见配置如下:
    
设置参数描述有效值默认值
cacheEnable该配置影响所有映射器中配置的缓存全局开关true|falsefalse
lazyLoadingEnabled延迟加载的全局开关。开启时,所有关联对象都会延迟加载。特定的关联关系中可以通过fatchType属性来覆盖该项的开关状态true|falsefalse
aggressiveLazyLoading关联对象属性的延迟加载开关。当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性都按需加载true|falsetrue
multipleResultSetsEnable是否允许单一语句返回多结果集(需要兼容驱动)true|falsetrue
useGeneratedKeys允许JDBC支持自动生成主键,需要驱动兼容。如果设为true,则这个设置强制使用自动生成主键,尽管一些驱动不兼容但仍可正常工作true|falsefalse
autoMappingBehavior指定MyBatis应如何自动映射列到字段或者属性。NONE表示取消自动映射;PARTIAL只会自动映射没有定义的嵌套结果映射的结果集;FULL会自动映射任意复杂的结果集(无论是否嵌套)NONE、PARTIAL、FULLPARTIAL
defaultExecutorType配置默认的执行器。SIMPLE就是普通的执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将将重用语句并执行批量更新SIMPLE、REUSE、BATCHSIMPLE
defaultStatementTimeout设置超时时间,他决定驱动等待数据库相应的秒数。当没有设置的时候,他取得就是驱动默认时间任何整数没有设置
mapUnderscoreToCamelCase是否开启驼峰命名规则映射(如果取值为false,必须pojo的属性名与数据库中的列名对应)true|falsefalse
jdbcTypeForNull当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要制定列的JDBC参数类型,多数情况直接使用一般类型即可,比如NULL、VARCHAR、OTHERNULL、VARCHAR、OTHEROTHER
  1. <typeAliases>

    <typeAliases>元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。
    使用<typeAliases>定义别名的方法如下:
    <typeAlases>
    	<typealias alias="user" type="com.mfs.entity.User" >
    </typeAliases>
    除了一个类一个类的定义别名之外,还可以通过扫描包的方式为包中所
    有的类添加首字母小写的非限定类名作为他的别名:
    <typeAliases>
    	<package name="com.mfs.entity"/>
    <typeAliases>
    除此之外,还可以使用注解@Alias(value="user")
    
  2. <typeHandlers>

    	MyBatis在预处理语句(PreparedStatement)中设置一个参数,或者		
    从结果集(ResultSet)中取出一个值时,都会用其框架内部注册了的
    typeHandler(类型处理器)进行相关处理。typeHandler的作用就是
    将预处理语句中传入的参数从javaType转换为jdbcType,或者将结果	
    集的jdbcType转换为javaType。
    	MyBatis对于Java中常用的数据类型都已经定义了默认的
    typeHandler,这些一般就能够满足日常需要。但如果默认的
    typeHandler不能满足我们的需要的时候我们就可以定义自己
    typeHandler。
    	自定义typeHandler需要两部:
    		1、实现TypeHandler接口或者继承BaseTypeHandler类。
    		2、使用<typeHandlers>元素注册typeHandler
    		<typeHandlers> 
    			<typeHandler handler="com.mfs.handler.MyTypeHandler" />
    		</typeHandlers>
    		或者注册整个包中的typeHandler
    		<typeHandlers>
    			<package name="com.mfs.handler"/>
    		</typeHandlers>
    
  3. objectFactory

    	MyBatis每次创建结果对象的新实例时,都会使用一个对象工厂
    (ObjectFactory)实例来创建。MyBatis中默认ObjectFactory的作用
    就是实例化目标类,它既可以通过默认的构造方法实例化,也可以在参
    数映射存在的时候通过参数构造方法创建。
    	通常情况下使用DefaultObjectFactory就可以,如果有特殊需求可以
    通过实现ObjectFactory接口或者继承DefaultObjectFactory类自定义
    ObjectFactory。然后在使用<objectFactory>来配置:
    <objectFactory type="com.mfs.factory.MyObjectFactory">
    	<property name="name" value="MyObjectFactory"/>
    </objectFactory>
    
  4. <plugins>

    	MyBatis允许在已映射语句执行过程中的某一点进行拦截调用,这种
    拦截调用是通过插件来完成的。
    
  5. <environments>

    	在配置文件中<encironments>元素用于对环境进行配置。MyBatis的环	
    境配置实际上就是对数据源的配置,我们可以通过<environment>子元素	
    配置多种数据源,即配置多种数据库。
    
<environments default="mysql">   <!-- default指定默认的数据库环境 -->
        <environment id="mysql">   <!-- 数据库环境的id -->
            <!-- type指定事务管理的类型,可以指定为JDBC或者MANAGED两种 -->
            <!-- JDBC使用了JDBC的提交和回滚设置,依赖于从数据源得到的连接来管理事务的作用域 -->
            <!-- MANAGED从来不会提交或者回滚一个连接 ,而是让容器来管理事务的整个生命周期。
                 在默认情况下他会关闭连接,但一些容器比不希望这样,为此可以将closeConnection属性设置为false来阻止它默认的关闭行为-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- MyBatis框架提供了UNPOOLED、POOLED和JNDI三种数据源类型 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="1232434"/>
            </dataSource>
        </environment>
    </environments>

数据源类型配置为UNPOOLED类型时,在每次请求时都会打开和关闭连接。他对性能没有要求的简单应用是一个不错的选择。
数据源配置为POOLED,此数据源利用池的概念将JDBC连接对象组织起来,避免了在创建新的连接实例所需要的初始化和认证的时间。配置词类型的数据源时还可以配置更多的属性。

属性说明
poolMaximumActiveConnections在任意时间可以存在的连接数量,默认值10
poolMaximumCheckoutTime任意时间可能存在的空闲连接数
poolMaximumCheckoutTime在强制返回之前,池中连接被检出时间,默认值:20000,即20秒
poolTimeToWait如果获取链接花费的时间较长,他会给链接池打印状态日志并重新尝试获取一个连接,默认值20000毫秒
poolPingQuery发送到数据库的侦测查询,用于检验连接是否处于正常工作秩序中。默认是“NO PING QUERY SET”,这会倒是多数数据库驱动失败时带有一定的错误消息。
poolPingEnable是否用侦测查询。默认为false
poolPingConnectionsNotUsedFor配置poolPingQuery的使用频度,默认值:0

JNDI数据源可以在EJB或者应用服务等容器中使用。容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。

  1. <mappers>

    用于指定映射文件的位置。可以使用如下四种方式配置
    1、使用类路径引入
    <mappers>
    	<mapper resource="com.mfs.mapper.UserMapper.xml"/>
    <mappers>
    2、使用本地文件路径引入
    <mappers>
    	<mapper url="file:///D:/com/mfs/mapper/UserMapper.xml"/>
    <mappers>
    3、使用接口类引入
    <mappers>
    	<mapper class="com.mfs.mapper.UserMapper"/>
    <mappers>
    4、使用包名引入
    <mappers>
    	<package name="com.mfs.mapper"/>
    <mappers>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M FS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值