MyBatis的核心配置文件标签详解

在MyBatis框架的核心配置文件中,元素是配置文件的根元素,其他元素都要在元素内配置。 具体元素层次结构如下图所示:
MyBatis的核心配置文件标签详解_第1张图片
properties元素
是一个配置属性的元素,该元素通常用来将内部的配置外在化,即通过外部的配置来动态的替换内部定义的属性。例如,数据库的连接等属性,就可以通过典型的Java属性文件中的配置来替换,具体方式如下: 创建一个文件db.properties 把在配置jdbc的地方进行抽离。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

配置properties元素:
使用:完成上述配置后, dataSource 中连接数据库的 个属性( driver url username password)值将会由 db.properties文件中对应的值来动态替换 这样就为配置提供了诸多灵活的选择
MyBatis的核心配置文件标签详解_第2张图片
settings元素
元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。 不对setting进行配置也是可以运行MyBatis的。具体配置参数如下表所示:

参数 说明 有效值 默认值
cacheEnabled 该配置影响所有映射器中配置的缓存全局开关 true、false false
lazyLoadingEnabled 延迟加载的全局开关。开启时,所有关联对象都会延迟加载。特定关联关系中可以通过设置fetchType属性来覆盖该项的开关状态 true/false false
aggressiveLazyLoading 关联对象属性的延迟加载开关。当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性都会按需加载 true/false true
multipleResultSetsEnable 是否允许单一语句返回多结果集(需要兼容驱动) 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执行器会重用预处理语句( prepared statements) ;BATCH执行器将重用语句并执行批量更新 SIMPLE、REUSE、BATCH SIMPLE
defaultStatementTimeout 设置超时时间,它决定驱动等待数据库响应的秒数。没有设置的时候,它取的就是驱动默认的时间 任何正整数 没有设置
mapUnderscoreToCamelCase 是否开启自动驼峰命名规则( camel case)映射 true、false false
jdbcTypeForNull 当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,比如NULL、VARCHAR或OTHER VARCHAR、NULL、OTHER OTHER

示例代码如下所示:使用name获取属性,使用value获取值。

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

typeAliases元素
元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少全限定类名的冗余。
如下代码所示:对一个java类设置别名为user。
其中, 元素的子元素中的 type属性用于指定需要被定义别名的类的全限定名 alias属性的属性值user就是自定义的别名,它可以代替com.lzq.po.User 使用在MyBatis文件的任何位置,如果省略alias属性, MyBatis会默认将类名首字母小写后的名称作为别名

  <typeAliases>
             <typeAlias alias="user" type="com.lzq.po.User"/>
     </typeAliases>

当POJO类过多时,还可以通过自动扫描包的形式自定义别名,如下代码所示:
其中,元素的子元素中的name属性用于指定要被定义别名的包, MyBatis 会将所有com.lzq.po包中的 POJO类以首字母小写的非限定类名来作为它的别名,比如com.lzq.po.User的别名为user或者com.lzq. po.Custom类的别名为customer

<typeAliases>
	<package name="com.lzq.po"/>
</typeAliases>

typeHandler元素
typeHandler的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。
元素可以在配置文件中注册自定义的类型处理器,它的使用方式有两种。

  • 注册一个类的类型处理器
    子元素的handler 属性用于指定在程序中自定义的类型处理器类
<typeHandlers> 
	<typeHandler handler="com.itheima.type.CustomtypeHandler" />
</typeHandlers>
  • 注册一个包中所有的类型处理器
    子元素的name属性用于指定类型处理器所在的包名,使用此种方式后,系统会在启动时自动地扫描com.lzq.type包下所有的文件,并把它们为类型处理器
<typeHandlers> 
	<package name="com.lzq.type" />
</typeHandlers>

objectFactory元素
MyBatis框架每次创建结果对象的新实例时,都会使用一个对象工厂( ObjectFactory )的实例来完成。MyBatis中默认的ObjectFactory的作用就是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。
MyBatis中默认的ObjectFactory的作用是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。通常使用默认的ObjectFactory即可。
MyBatis中的objectFactory是由org.apache.ibatis.eflection.factory.DefaultObjectFactory来提供服务的。大部分场景下都不用配置和修改,但如果想覆盖ObjectFactory的默认行为,则可以通过自定义ObjectFactory来实现,具体方式如下:
首先自定义一个对象工厂,实现objectFactory接口,或者继承DefaultobjectFactory这一个类,在这个类当中已经实现了接口,故直接继承这个类即可:如下代码所示:

    public class MyObjectFactory extends DefaultObjectFactory {
            private static final long serialVersionUID = -4114845625429965832L;
            public <T> T create(Class<T> type) {
				return super.create(type);
            }
            public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, 
                List<Object> constructorArgs) {
				return super.create(type, constructorArgTypes, constructorArgs);
            }
            public void setProperties(Properties properties) {
				super.setProperties(properties);
            }
            public <T> boolean isCollection(Class<T> type) {
				return Collection.class.isAssignableFrom(type);
            }
    }

随后在配置文件中使用元素配置自定义的ObjectFactory

<objectFactory type="com.itheima.factory.MyObjectFactory">
     <property name="name" value="MyObjectFactory"/>
</objectFactory>

plugins元素
MyBatis允许在已映射语句执行过程中的某一点进行拦截调用,这种拦截调用是通过插件来实现的。元素的作用就是配置用户所开发的插件。如果用户想要进行插件开发,必须要先了解其内部运行原理,因为在试图修改或重写已有方法的行为时,很可能会破坏MyBatis原有的核心模块。

environments元素
元素用于对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,我们可以通过元素配置多种数据源,即配置多种数据库。
在配置该元素时,及对数据库进行配置:如上文配置properties元素给出的图:
事务管理器的配置
在MyBatis中,可以配置两种类型的事务管理器,分别是JDBC和MANAGED。关于这两个事务管理器的描述如下:

  • JDBC:此配置直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务的作用域。
  • MANAGED:此配置从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。默认情况下,它会关闭连接,但一些容器并不希望这样,为此可以将closeConnection属性设置为false来阻止它默认的关闭行为。

其中,需要注意的是:如果项目中使用的是Spring+ MyBatis,则没有必要在MyBatis中配置事务管理器,因为实际开发中,会使用Spring自带的管理器来实现事务管理。

数据源的配置
对于数据源的配置, MyBatis 框架提供了UNPOOLED、POOLED、JNDI三种数据源类型,

  • UNPOOLED 配置此数据源类型后,在每次被请求时会打开和关闭连接。它对没有性能要求的简单应用程序是一个很好的选择。在使用时,需要配置5种属性。如下表所示:
属性 说明
drivere JDBC驱动的Java类的完全限定名(并不是JDBC驱动中可能包含的数据源类)。
url 数据库的URL地址。
username 登录数据库的用户名。.
password 登录数据库的密码
defaultTransactionIsolationLevel 默认的连接事务隔离级别。
  • POOLED 此数据源利用“池”的概念将JDBC连接对象组织起来,避免了在创建新的连接实例时所需要初始化和认证的时间。这种方式使得并发Web应用可以快速地响应请求,是当前流行的处理方式,除了上述UNPOOLED 的五种配置,还有以下属性可进行配置:
属性 说明
poolMaximumActiveConnections 在任意时间可以存在的活动 (也就是正在使用)连接数量,默认值: 10
poolMaximumldleConnections 任意时间可能存在的空闲连接数
poolMaximumCheckoutTime 在被强制返回之前,池中连接被检出(checkedout)时间,默认值:20000毫秒,即20秒
poolTimeToWait 如果获取连接花费的时间较长,它会给连接池打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直处于无提示的失败),默认值: 20000毫秒,即20秒
poolPingQuery 发送到数据库的侦测查询,用于检验连接是否处在正常工作秩序中。默认是“NO PINGQUERY SET",这会导致多数数据库驱动失败时带有一定的错误消息
poolPingEnabled 是否启用侦测查询。若开启,必须使用一个可执行的SQL语句设置poolPingQuery属性(最好是一个非常快的SQL),默认值: false
poolPingConnectionsNotUsedFor 配置poolPingQuery的使用频度。可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值: 0(表示所有连接每一时刻都被侦测,只有poolPingEnabled的属性值为true时适用)
  • JNDI 可以在EJB或应用服务器等容器中使用。容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。在使用时,需要配置2个属性。如下表所示:
属性 说明
initial_ context 此属性主要用于在InitialContext中寻找上下文(即initialContext.lookup(inital context)) 。该属性为可选属性,在忽略时,data_ source 属性会直接从InitialContext中寻找,此属性表示引用数据源实例位置的上下文的路径。如果提供了initial context 配置,那么程序会
data_ source 在其返回的上下文中进行查找;如果没有提供,则直接在InitialContext中查找

mappers元素
元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下。

  1. 使用类路径引用
<mappers>
    <mapper resource="com/itheima/mapper/UserMapper.xml"/>
</mappers>
  1. 使用本地文件路径引入
<mappers>
    <mapper url="file:///D:/com/lzq/mapper/UserMapper.xml"/>
</mappers>
  1. 使用接口类引入
<mappers>
    <mapper class="com.lzq.mapper.UserMapper"/>
</mappers>
  1. 使用包名引入
<mappers>
   <package name="com.lzq.mapper"/>
</mappers>

你可能感兴趣的:(#,SSM,MyBatis,核心配置文件)