MyBatis 配置文件

内容主要来自于mybatis文档
###映射文件中的顶级元素
myBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息

  • configuration 配置

    • properties 属性
    • settings 设置
    • typeAliases 类型别名
    • typeHandlers 类型处理器
    • objectFactory 对象工厂
    • plugins 插件
    • environments 环境
    • environment 环境变量
    • transactionManager 事务管理器
    • dataSource 数据源
    • databaseIdProvider 数据库厂商标识
    • mappers 映射器
      ####一.映射器(Mapper)
      Mybatis配置文件有一个Mappers元素可以指定mybatis去哪里找映射文件

mybatis配置文件有四种寻找映射文件的方式:

  • resource: 该路径为XXXmapper.xml文件classpath 路径
  • url: 限定资源定位符(URL),file:/// file_absolute_path
  • class: 该方式要求mapper接口和mapper映射文件在同一个目录下,且文件名称相同
  • package: 会加载指定包下的所有mapper,同样要求mapper接口和mapper映射文件在同一个目录下且文件名称相同

注意:使用package和class这两种加载方式,映射文件还需要满足以下两点:

  • 映射文件的namespace="mapperInterface.class"
  • mapperInterface方法名和对应操作元素id 一致。
    这样通过代理,就可以找到对应的语句,“className”.“methodName” ---->“namespace”.“elementId”

除此之外,还可以直接在spring中配置Mapper的路径,但是mybatis.xml还是必不可少的

在sqlSessionFactory中设定 mybitas的xml和aliases

<!-- MustConfigPoint MyBatis begin -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="typeAliasesPackage" value="实体类包路径" />
		<property name="typeAliasesSuperType" value="实体类顶级包路径" />
		<property name="mapperLocations" value="classpath:/mybatis/mappings/**/*.xml" />
		<property name="configLocation" value="classpath:/mybatis/mybatis-config.xml"></property>
	</bean>

设置Mapper类

<!-- MustConfigPoint 扫描basePackage下所有以@MyBatisDao注解的接口 -->
	<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="mapper类的包路径" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
		<property name="annotationClass" value="com.msyd.framework.common.persistence.annotation.MyBatisDao" />
	</bean>

####二.属性(properties)
加载配置文件用于配置一些可变的属性值,也可以在子元素property中指定

<properties resource="org/mybatis/example/mysql.properties">
  <property name="username" value="guest"/>
  <property name="password" value="123456"/>
</properties>

定义的这些属性就可以在整个配置文件中被用来替换需要动态配置的属性值。

<dataSource type='pooled'>
	<property name="driver" value="${driver}"/>
	<property name="url" value="${url}"/>
	.....
</dataSource>

如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:

  • 在 properties 元素体内指定的属性首先被读取。
  • properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
    因此属性优先级如下,method_args > resource_file_property > property

####设置(settings)
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。下表描述了设置中各项的意图、默认值等。

<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"/> //允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作。
  <setting name="autoMappingBehavior" value="PARTIAL"/>  //指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。
  <setting name="autoMappingUnknownColumnBehavior" value="NONE"/>指定发现自动映射目标未知列(或者未知属性类型)的行为。
  <setting name="defaultExecutorType" value="SIMPLE"/>  //	配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>    //映射是否使用驼峰标记
  <setting name="localCacheScope" value="SESSION"/>MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。
  <setting name="jdbcTypeForNull" value="OTHER"/>  //当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

####类型别名(typeAliases)
类型别名是为 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

####类型处理器(typeHandlers)
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。

####环境配置(environments)

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </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>

注意这些关键点;

  • 默认的环境iddefault="development"
  • 每个环境中定义的环境idid="development"
  • 事务管理器配置type="JDBC"
  • 数据源配置type="POOLED"
    可以对环境随意命名,但一定要保证默认的环境 ID 要匹配其中一个环境 ID

######transactionManager
mybatis支持两种事务管理器类型(type="[JDBC|MANAGED]"

  • jdbc 这个配置直接使用jdbc的提交和回滚,它依赖于从数据源得到的连接来管理事务作用域
  • MANAGED 这个配置几乎不做任何事情。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期

提示:如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
######dataSource
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):

  • UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。 不同的数据库在性能方面的表现也是不一样的,对于某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。UNPOOLED 类型的数据源仅仅需要配置以下 5 种属性:

     - driver – 这是 JDBC 驱动的 Java 类的完全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
     -  url – 这是数据库的 JDBC URL 地址。
     -  username – 登录数据库的用户名。
     -  password – 登录数据库的密码。
     -   defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
    

作为可选项,你也可以传递属性给数据库驱动。要这样做,属性的前缀为“driver.”,例如:driver.encoding=UTF8
这将通过 DriverManager.getConnection(url,driverProperties) 方法传递值为 UTF8 的 encoding 属性给数据库驱动。

  • POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
    除了上述提到 UNPOOLED 下的属性外,还有更多属性用来配置 POOLED 的数据源:

    • poolMaximumActiveConnections – 在任意时间可以存在的活动(也就是正在使用)连接数量,默认值:10
    • poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
    • poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
    • poolTimeToWait – 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直安静的失败),默认值:20000 毫秒(即 20 秒)。
    • poolMaximumLocalBadConnectionTolerance – 这是一个关于坏连接容忍度的底层设置, 作用于每一个尝试从缓存池获取连接的线程. 如果这个线程获取到的是一个坏的连接,那么这个数据源允许这个线程尝试重新获取一个新的连接,但是这个重新尝试的次数不应该超过 poolMaximumIdleConnections 与 poolMaximumLocalBadConnectionTolerance 之和。 默认值:3 (新增于 3.4.5)
    • poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动失败时带有一个恰当的错误消息。
    • poolPingEnabled – 是否启用侦测查询。若开启,需要设置 poolPingQuery 属性为一个可执行的 SQL 语句(最好是一个速度非常快的 SQL 语句),默认值:false。
    • poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的频率。可以被设置为和数据库连接超时时间一样,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。
  • JNDI – 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。这种数据源配置只需要两个属性:

    • initial_context – 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么 data_source 属性将会直接从 InitialContext 中寻找。
    • data_source – 这是引用数据源实例位置的上下文的路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。
      和其他数据源配置类似,可以通过添加前缀“env.”直接把属性传递给初始上下文。比如:env.encoding=UTF8

####插件(plugins)
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

参考文献:
Mybatis 加载 Mapper配置的四种方式
mybatis文档

猜你喜欢

转载自blog.csdn.net/yamadeee/article/details/79869563