MyBatis 从入门到放弃系列二【 详细配置】

继续我们的 MyBatis 之旅,今天的内容主要是介绍一下MyBatis的配置信息,并没有太多有深度的内容,不感兴趣的朋友们可以直接选择跳过。

参考文档MyBatis官方文档

属性(properties)

properties 作用类似于我们以前使用的 properties 文件,用来配置系统中固定的参数信息,比如 数据库连接地址、用户名、密码等。用法如下:


  
  
  



  
  
  
  

在properties节点中,我们设置了driver、url、username、password这四个参数值,然后在下边的 dataSource节点配置中,用${driver}的方式取到了我们配置的参数值。

properties 标签还有一个 resource 属性, resource 属性用来引入系统中已经存在的 properties 配置文件:


  
  



  
  
  
  

可以看到,我们的 properties 节点中只配置了 username 和 password 两个参数值,但是下边的 dataSource 节点中却在取 driver 和 url 参数,那么他是从哪取到的呢,答案就是 resource 属性中配置的  datasource.properties 文件,driver 、url 就是在 datasource.properties中配置的。

大家会不会有个疑问,如果我在 datasource.properties 文件 和 properties 节点中配置了同名的参数,并设置了不同的值,那么 MyBatis 会怎么取值呢? 他会不会有很多问号???


  
  
  
  



  
  
  
  

 MyBatis 有一个加载顺序:

  • 首先读取在 properties 元素体内指定的属性。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。

 作为方法参数传递的属性 >  resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件 > properties 元素体内指定的属性

 

设置(settings)

settings 用来设置 MyBatis 框架的一些默认行为,改变 MyBatis 运行时的一些逻辑,配置方式如下:


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

这里不做过多叙述,直接把官网的配置列出来,供大家参考。

MyBatis settings 列表
设置名 描述 有效值 默认值
cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true | false false
aggressiveLazyLoading 开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考 lazyLoadTriggerMethods)。 true | false false (在 3.4.1 及之前的版本中默认为 true)
multipleResultSetsEnabled 是否允许单个语句返回多结果集(需要数据库驱动支持)。 true | false true
useColumnLabel 使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。 true | false true
useGeneratedKeys 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 true | false false
autoMappingBehavior 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集(无论是否嵌套)。 NONE, PARTIAL, FULL PARTIAL
autoMappingUnknownColumnBehavior 指定发现自动映射目标未知列(或未知属性类型)的行为。
  • NONE: 不做任何反应
  • WARNING: 输出警告日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等级必须设置为 WARN)
  • FAILING: 映射失败 (抛出 SqlSessionException)
NONE, WARNING, FAILING NONE
defaultExecutorType 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。 SIMPLE REUSE BATCH SIMPLE
defaultStatementTimeout 设置超时时间,它决定数据库驱动等待数据库响应的秒数。 任意正整数 未设置 (null)
defaultFetchSize 为驱动的结果集获取数量(fetchSize)设置一个建议值。此参数只可以在查询设置中被覆盖。 任意正整数 未设置 (null)
defaultResultSetType 指定语句默认的滚动策略。(新增于 3.5.2) FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(等同于未设置) 未设置 (null)
safeRowBoundsEnabled 是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。 true | false false
safeResultHandlerEnabled 是否允许在嵌套语句中使用结果处理器(ResultHandler)。如果允许使用则设置为 false。 true | false true
mapUnderscoreToCamelCase 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 true | false false
localCacheScope MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。 SESSION | STATEMENT SESSION
jdbcTypeForNull 当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。 OTHER
lazyLoadTriggerMethods 指定对象的哪些方法触发一次延迟加载。 用逗号分隔的方法列表。 equals,clone,hashCode,toString
defaultScriptingLanguage 指定动态 SQL 生成使用的默认脚本语言。

一个类型别名或全限定类名。

org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
defaultEnumTypeHandler 指定 Enum 使用的默认 TypeHandler 。(新增于 3.4.5) 一个类型别名或全限定类名。 org.apache.ibatis.type.EnumTypeHandler
callSettersOnNulls 指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。 true | false false
returnInstanceForEmptyRow 当返回行的所有列都是空时,MyBatis默认返回 null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。(新增于 3.4.2) true | false false
logPrefix 指定 MyBatis 增加到日志名称的前缀。 任何字符串

未设置

logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 未设置
proxyFactory 指定 Mybatis 创建可延迟加载对象所用到的代理工具。 CGLIB | JAVASSIST JAVASSIST (MyBatis 3.3 以上)
vfsImpl 指定 VFS 的实现 自定义 VFS 的实现的类全限定名,以逗号分隔。 未设置
useActualParamName 允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 -parameters 选项。(新增于 3.4.1) true | false true
configurationFactory 指定一个提供 Configuration 实例的类。 这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。 这个类必须包含一个签名为static Configuration getConfiguration() 的方法。(新增于 3.2.3) 一个类型别名或完全限定类名。 未设置
shrinkWhitespacesInSql 从SQL中删除多余的空白字符。 请注意,这也会影响SQL中的文字字符串。 (从3.5.5版开始) true | false false

 

映射器(mappers)

摘自 MyBatis 官方文档:

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。例如:



  
  
  




  
  
  




  
  
  




  

 通过上述几种方式,就可以明确地告诉 MyBatis 去哪里找 SQL 的映射文件了。

 

Others

本文只罗列了 MyBatis 的一些常用配置,还有其他配置,小弟并没有列出来,比如说:

类型别名(typeAliases)、类型处理器(typeHandlers)、对象工厂(objectFactory)、插件(plugins)、环境配置(environments)、数据库厂商标识(databaseIdProvider)等。如果大家感兴趣,可以自行到官网查阅。

没有列出来的是因为,一方面觉得有的配置不太常用,另一方面觉得有些配置需要花些功夫,详细地展开展示给大家。
目前 MyBatis 的 插件(plugins)配置,是小弟比较想详细的研究一番之后,拓展开展示给大家的,后续找个时间写一篇关于 plugins 的文章。

 

今天的【从入门的放弃系列】就先到这里,后续咱们再接着学习怎么放弃。

你可能感兴趣的:(从入门到放弃)