MyBatis框架 第3章 MyBatis全局配置文件

第3章 MyBatis全局配置文件

3.1 MyBatis全局配置文件简介

 

  1)  The MyBatis configuration contains settings and properties that have a dramatic effect on how MyBatis behaves.

MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。

  2)  文件结构如下:

configuration 配置

properties 属性

settings 设置

typeAliases 类型命名

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境 

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

databaseIdProvider 数据库厂商标识

mappers 映射器

3.2 properties属性

  1)  可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来配置  2)  然而properties的作用并不单单是这样,你可以创建一个资源文件,名为properties的文件,将四个连接字符串的数据在资源文件中通过键值 对(key=value)的方式放置,不要任何符号,一条占一行

3)在environment元素的dataSource元素中为其动态设置

 

3.3 settings设置

  1)  这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

  2)  包含如下的setting设置:

3.4 typeAliases 别名处理

  1)  类型别名是为 Java 类型设置一个短的名字,可以方便我们引用某个类。

  2)  类很多的情况下,可以批量设置别名这个包下的每一个类创建一个默认的别名,就是简单类名小写  3)  MyBatis已经取好的别名

3.5 typeHandlers 类型处理器

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

  2)  MyBatis中提供的类型处理器: 

   3)  日期和时间的处理,8以前一直是个头疼的问题。我们通常使用JSR310规范领导者Stephen Colebourne创建的Joda-Time来操作。1.8已经实现全部的JSR310规范了

  4)  日期时间处理上,我们可以使用MyBatis基于JSR310(Date and Time API)编写的各种日期时间类型处理器。

  5)   MyBatis 3. 4以前的版本需要我们手动注册这些处理器,以后的版本都是自动注册的,如需注册,需要下载mybatistypehandlers-jsr310,并通过如下方式注册  6)  自定义类型转换器

  • 我们可以重写类型处理器或创建自己的类型处理器来处理不支持的或非标准的类 型
  • 步骤
  • 实现apache.ibatis.type.TypeHandler接口或者继承org.apache.ibatis.type.BaseTypeHandler
  • 指定其映射某个JDBC类型(可选操作)
  • 在mybatis全局配置文件中注册

     

3.6 plugins 插件机制

  1)  插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为。插件通过动态代理机制,可以介入四大对象的任何一个方法的执行

  2)  四大对象:

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

 

ParameterHandler (getParameterObject, setParameters)

 

ResultSetHandler (handleResultSets, handleOutputParameters)

 

StatementHandler (prepare, parameterize, batch, update, query)

3.7 environments 环境配置

  1)  MyBatis可以配置多种环境,比如开发、测试和生产环境需要有不同的配置

  2)  每种环境使用一个environment标签进行配置并指定唯一标识符

  3)  可以通过environments标签中的default属性指定一个环境的标识符来快速的切换环境

  4)  environment-指定具体环境

id:指定当前环境的唯一标识

transactionManager、和dataSource都必须有

  5)  transactionManager

type:  JDBC | MANAGED | 自定义

JDBC:使用了 JDBC 的提交和回滚设置,依赖于从数据源得到的连接来管理事务范   围。 JdbcTransactionFactory

MANAGED:不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如 JEE   应用服务器的上下文)。 ManagedTransactionFactory

自定义:实现TransactionFactory接口,type=全类名/别名

   6)  dataSource

type:  UNPOOLED | POOLED | JNDI | 自定义

UNPOOLED:不使用连接池, UnpooledDataSourceFactory

POOLED:使用连接池, PooledDataSourceFactory

JNDI: 在EJB 或应用服务器这类容器中查找指定的数据源

自定义:实现DataSourceFactory接口,定义数据源的获取方式。

  7)  实际开发中我们使用Spring管理数据源,并进行事务控制的配置来覆盖上述配置

3.8 databaseIdProvider数据库厂商标识

  1)  MyBatis 可以根据不同的数据库厂商执行不同的语句

 

   2)  Type: DB_VENDOR,使用MyBatis提供的VendorDatabaseIdProvider解析数据库厂商标识。也可以实现DatabaseIdProvider接口来自定义.

会通过 DatabaseMetaData#getDatabaseProductName() 返回的字符串进行设置。由于通常情况下这个字符串都非常长而且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其变短.

Property-name:数据库厂商标识

Property-value:为标识起一个别名,方便SQL语句使用databaseId属性引用

  3)  配置了databaseIdProvider后,在SQL映射文件中的增删改查标签中使用databaseId

来指定数据库标识的别名  4)  MyBatis匹配规则如下:

  • 如果没有配置databaseIdProvider标签,那么databaseId=null
  • 如果配置了databaseIdProvider标签,使用标签配置的name去匹配数据库信息,匹配上设置databaseId=配置指定的值,否则依旧为null
  • 如果databaseId不为null,他只会找到配置databaseId的sql语句
  • MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库databaseId 属性的所有语句。如果同时找到带有 databaseId 和不带databaseId 的相同语句,则后者会被舍弃。

     

3.9 mappers 映射器

 

  1)  用来在mybatis初始化的时候,告诉mybatis需要引入哪些Mapper映射文件 

   2)  mapper逐个注册SQL映射文件

resource : 引入类路径下的文件

url :      引入网络路径或者是磁盘路径下的文件

class :    引入Mapper接口.

有SQL映射文件 , 要求Mapper接口与 SQL映射文件同名同位置.

没有SQL映射文件 , 使用注解在接口的方法上写SQL语句.