Mybatis学习总结(三).Mybatis全局配置文件

来源:互联网 发布:计算机及网络基础知识 编辑:程序博客网 时间:2024/06/07 11:56

Mybatis-Config配置


在config.xml配置文件中的内容和顺序如下:

  • properties 属性
  • settings 设置
  • typeAliases 类型别名
  • typeHandlers 类型处理器
  • objectFactory 对象工厂
  • plugins 插件
  • environments 环境
  • environment 环境变量
  • transactionManager 事务管理器
  • dataSource 数据源
  • mappers 映射器

properties属性

<!-- 加载配置文件 --><properties resource="jdbc.properties"/>

这样引用:
<property name="driver" value="${jdbc.driver}" />


setting设置

设置参数

描述

有效值

默认值

cacheEnabled

该配置影响的所有映射器中配置的缓存的全局开关。

true | false

true

lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。

true | false

false

aggressiveLazyLoading

当启用时,带有延迟加载属性的对象的加载与否完全取决于对任意延迟属性的调用;反之,每种属性将会按需加载。

true | false

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

defaultExecutorType

配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements);BATCH 执行器将重用语句并执行批量更新。

SIMPLE REUSE BATCH

SIMPLE

defaultStatementTimeout

设置超时时间,它决定驱动等待数据库响应的秒数。

Any positive integer

Not Set (null)

safeRowBoundsEnabled

允许在嵌套语句中使用行分界(RowBounds)。

true | false

False

mapUnderscoreToCamelCase

是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。

true | false

False

localCacheScope

MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。

SESSION | STATEMENT

SESSION

jdbcTypeForNull

当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULLVARCHAR 或 OTHER

JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER

OTHER

lazyLoadTriggerMethods

指定哪个对象的方法触发一次延迟加载。

A method name list separated by commas

equals,clone,hashCode,toString

defaultScriptingLanguage

指定动态 SQL 生成的默认语言。

A type alias or fully qualified class name.

org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver

callSettersOnNulls

指定当结果集中值为 null 的时候是否调用映射对象的 settermap 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意原始类型(intboolean等)是不能设置成 null 的。

true | false

false

logPrefix

指定 MyBatis 增加到日志名称的前缀。

Any String

Not set

logImpl

指定 MyBatis 所用日志的具体实现,未指定时将自动查找。

SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING

Not set

proxyFactory

为 Mybatis 用来创建具有延迟加载能力的对象设置代理工具。

CGLIB | JAVASSIST

CGLIB

mapUnderscoreToCamelCase用法:

<settings><!-- 开启驼峰映射 --><setting name="mapUnderscoreToCamelCase" value="true"/></settings>

typeAliases 类型别名

类型别名视为java类型命名一个短的名字,它只和xml配置有关.
<typeAliases> <!-- 别名: type: 指定java对象类型 alias: 别名名称 --> <typeAlias type="cn.zto.mybatis.pojo.User" alias="User"/></typeAliases>

引用:
<select id="queryUserById" resultType="User" parameterType="Long">SELECT * FROM tb_user WHERE id = #{id}</select>

<typeAliases> <!-- 别名: type: 指定java对象类型 alias: 别名名称 --> <!-- <typeAlias type="cn.zto.mybatis.pojo.User" alias="User"/> <!-- 配置扫描包,更适合企业开发指定扫描包,mybatis会将该包下所有的类生成一个别名别名的首字母不区分大小写,但是,推荐使用大写. --> <package name="cn.zto.mybatis.pojo" /></typeAliases>

引用:
<select id="queryUserById" resultType="User" parameterType="Long">SELECT * FROM tb_user WHERE id = #{id}</select>

Mybatis提供的默认别名

已经为普通的 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 类型处理器

类型处理器是在设置参数,以及从Restult中检索值来匹配java数据类型,Mybatis提供非常多的默认类型处理器,一般情况下都可以满足日常的使用,不需要自定义处理器。
不常用  可以参考文档

plugins 插件(拦截器)

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

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)    做执行的时候
  • ParameterHandler (getParameterObject, setParameters)   设置参数的时候
  • ResultSetHandler (handleResultSets, handleOutputParameters)    结果集的时候
  • StatementHandler (prepare, parameterize, batch, update, query)    将sql映射成statement对象的时候
自定义拦截器:

environments 环境


MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中,现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库,想使用相同的 SQL 映射。
不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。

所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:
  • 每个数据库对应一个 SqlSessionFactory 实例

<!-- 配置环境,数据库连接 --><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment><environment id="test"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments>

为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:


然这种方式也可以做到很方便的分离多个环境,但是在实际使用场景下我们都是更多的使用Spring来管理数据源,做环境的分离。

映射器(mappers)

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



<!-- Using classpath relative resources   路径相对于资源目录跟路径:--><mappers>  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>  <mapper resource="org/mybatis/builder/PostMapper.xml"/></mappers>
<!-- Using url fully qualified paths   使用完整的文件路径:--><mappers>  <mapper url="file:///var/mappers/AuthorMapper.xml"/>  <mapper url="file:///var/mappers/BlogMapper.xml"/>  <mapper url="file:///var/mappers/PostMapper.xml"/></mappers>
<!-- Using mapper interface classes使用mapper接口类路径,注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。--><mappers>  <mapper class="org.mybatis.builder.AuthorMapper"/>  <mapper class="org.mybatis.builder.BlogMapper"/>  <mapper class="org.mybatis.builder.PostMapper"/></mappers>
<!-- Register all interfaces in a package as mappers  使用Mapper接口扫描包 --><mappers>  <package name="org.mybatis.builder"/></mappers>


0 0
原创粉丝点击