MyBatis全局配置属性

  

目录

properties(属性配置) 

settings(设置ibatis运行状态)

typeAliases(设置类对象的别名)

typeHandlers(类型处理器)

objectFactory(对象工厂配置)

plugins(插件配置)

environments(环境配置集)

environment(数据源配置)

transactionManager(数据事务配置)

dataSource(数据库配置)

databaseIdProvider(数据库厂商标识)

mappers(映射文件关联)

完整配置属性列表


properties(属性配置) 

    
	   
	...                            
                      

ibatis中加载属性配置的方式有三种.

方式 描述
a 直接使用字面量的形式,在内标签property中配置;
b 加载properties配置文件的数据,有两种途径可供选择.
resource:从classpath路径中加载文件;
url:从网络路径或者物理磁盘路径中加载文件;
c 使用java.util.Properties的类实例进行配置,借用的是
org.apache.ibatis.session.SqlSessionFactoryBuilder.build()
的重写的方法.
优先级 c>b>a .

属性占位符的功能(最低版本3.4.2).

${key:defalut-value};表示指定的key若无法取值的话,就使用符号`:`指定的默认值.

注意:属性占位符的功能默认是关闭的,需要手动开启.

                                                      

也可以使用ONGL表达式中的三元运算符,来使用属性占位符.

但也需要额外修改ibatis的默认配置.

                                                        
                                                          

settings(设置ibatis运行状态)

这是ibatis中最复杂的配置,修改默认设置,会变更ibatis的运行状态.

如无特别需求,不建议设置.

                      
	
	...                         
                     

可设置的属性列表

属性/name 描述说明 合法值(类型) 默认值
cacheEnabled 映射器的配置缓存/cache,是否全局开启 布尔值 true
lazyLoadingEnabled 延迟加载,是否全局开启.
若开启,所有的关联对象都会延迟加载.
有特殊需求,可通过设置fetchType属性来覆盖.
布尔值 false
aggressiveLazyLoading 任何方法调用都加载该类的所有属性,是否全局开启.
否则按需加载,可参考属性lazyLoadTriggerMethods
布尔值 false
3.4.2之前,是true.
multipleResultSetsEnabled 是否允许单一结果返回多结果集.(需要兼容驱动) 布尔值 true
useColumnLabel 是否,使用列标签替代列名.(需要兼容驱动) 布尔值 true
useGeneratedKeys 是否,允许JDBC支持自动主键生成.(需要兼容驱动) 布尔值 false
autoMappingBehavior

设置ibatis自动映射列,到字段或属性的行为.

NONE:取消自动映射;

PARTIAL:映射没有定义嵌套结果集映射的结果集.
FULL:自动映射任意复杂的结果集.

NONE|PARTIAL|

FULL

PARTIAL

autoMappingUnknown

ColumnBehavior

自动映射中,发现未知列或属性的处理行为.
NONE:不作任何处理;

WARNING:输出警告日志;
FAILING:映射失败.

NONE|WARNING|

FAILING

NONE
defaultExecutorType

指定默认的执行器.
SIMPLE:普通的执行器.
REUSE:此执行器,会重用预处理语句.
BATCH:此执行器,会重用预处理语句, 且执行批量更新.

SIMPLE|REUSE|

BATCH

SIMPLE
defaultStatementTimeout 设置超时时间 任意正整数 \
defaultFetchSize 给结果集获取的数量,设置一个提示值. 任意正整数 \
safeRowBoundsEnabled

是否,不允许在嵌套语句中使用分页.

RowBounds

布尔值 false
safeResultHandlerEnabled

是否,不允许在嵌套语句中使用分页.

ResultHandler

布尔值 true
mapUnderscoreToCamelCase 自动映射中,是否启用驼峰命名法. 布尔值 false
localCacheScope

ibatis本地缓存机制的作用域.

SESSION:缓存一个会话中执行的所有查询.
STATEMENT:仅作用在单独语句执行的级别.

SESSION|

STATEMENT

SESSION
jdbcTypeForNull null指定jdbcType.

NULL|VARCHAR

|OTHER|...

OTHER
lazyLoadTriggerMethods 指定哪个对象,触发一次延迟加载.

合法的方法名,

多个用逗号分隔

equals,clone,

hashCode,toString

defaultScriptingLanguage 指定动态生成sql的默认语言.

合法的类对象的

完全限定名

org.apache.ibatis.

scripting.xmltags.

XMLLanguageDriver

defaultEnumTypeHandler 默认的枚举类型处理器

合法的枚举类型处理器,

合法的完全限定名.

org.apache.ibatis.

type.EnumTypeHandler

callSettersOnNulls

是否,当结果集的值为null时,

自动调用映射类对象的

setter方法(map实例的put).

布尔值 false
returnInstanceForEmptyRow 当结果集的所有列为空时,ibatis默认返回NULL.若开启,则返回一个空实例. 布尔值 false
logPrefix 指定日志名称的前缀 字符串 \
logImpl

ibatis使用日志组件的实现,若未指定则自动查找.

SLF4J | LOG4J |

LOG4J2 |

JDK_LOGGING | COMMONS_

LOGGING |

STDOUT_LOGGING | NO_LOGGING

\
proxyFactory 指定ibatis创建延迟加载对象,所用到的代理工具. CGLIB | JAVASSIST JAVASSIST
vfsImpl 指定VFS的实现 合法的完全限定名 \
useActualParamName

是否,允许方法签名名称作为语句

参数名称.要求:Java 8编译器设置

-parameters参数.

布尔值 true
configurationFactory 手动提供Configuration的实例类 合法的完全限定名 \

typeAliases(设置类对象的别名)

                     
	           
	...                           
	
	...                           
                    

在ibatis中,别名是不区分大小写的

设置别名的方式

  • 直接在配置文件中,使用内置标签typeAlias进行设置.
    若没有指定属性name的值,则默认采用驼峰命名法注册别名.
  • 若配置别名任务量大,则可使用内置的package标签,进行设置.
    typeAlias标签的特性类似.若不结合使用注解@Alias,则默认采用驼峰命名法注册别名.
    前提是,注册的不同的包中,不存在相同标识符的类对象.

ibatis中内建了基本常用的注解.

可参考类对象:org.apache.ibatis.type.TypeAliasRegistry .

Java的基本类型注册时,别名都前缀符号`_`.

public TypeAliasRegistry() {
  registerAlias("string", String.class);

  registerAlias("byte", Byte.class);
  registerAlias("long", Long.class);
  registerAlias("short", Short.class);
  registerAlias("int", Integer.class);
  registerAlias("integer", Integer.class);
  registerAlias("double", Double.class);
  registerAlias("float", Float.class);
  registerAlias("boolean", Boolean.class);

  ...

typeHandlers(类型处理器)

                                         
	                                
	...                                                
	 
	...                                                
                                        

ibatis内置的类型处理器

内置处理器typeHandler,主要的效用,就是为了解决在自动映射中,javaTypejdbcType之间的类型转换.

从 3.4.5 开始,MyBatis 默认支持 JSR-310.

若需要自定义类型处理器,只需要实现TypeHandler或者BaseTypeHandler,实现具体行为和属性即可.

可参考的内置类是: org.apache.ibatis.type.TypeHandlerRegistry .

public TypeHandlerRegistry() {
  register(Boolean.class, new BooleanTypeHandler());
  register(boolean.class, new BooleanTypeHandler());
  register(JdbcType.BOOLEAN, new BooleanTypeHandler());
  register(JdbcType.BIT, new BooleanTypeHandler());

  register(Byte.class, new ByteTypeHandler());
  register(byte.class, new ByteTypeHandler());
  register(JdbcType.TINYINT, new ByteTypeHandler());

  register(Short.class, new ShortTypeHandler());
  register(short.class, new ShortTypeHandler());
  register(JdbcType.SMALLINT, new ShortTypeHandler());

  register(Integer.class, new IntegerTypeHandler());
  register(int.class, new IntegerTypeHandler());
  register(JdbcType.INTEGER, new IntegerTypeHandler());

  ...

内置的枚举类型处理器

ibatis中内置了两种枚举类型处理器.

org.apache.ibatis.type.EnumTypeHandler , 以枚举字符串名称作为参数传递, toString() .

org.apache.ibatis.type.EnumOrdinalTypeHandler , 以整数下标作为参数传递, ordinal() .

EnumTypeHandler是默认枚举类型处理器.但是自动映射器(auto-mapper)会自动地选用 EnumOrdinalTypeHandler 来处理.

使用指定枚举类型处理器的步骤:

  1. 指定枚举类型处理器的完全限定名,并指定需要转换映射的javaTypejdbcType.
    这一操作,可在配置标签typeHandler中一步设定,也可分开设置.
    即在子定义实现的枚举类型处理器的类级别上使用注解@MappedType(EnumTypeName.class)
    @MappedJdbcTypes(value ={}, includeNullJdbcType = true)
    但是从3.4.0开始,处理枚举类型是,不需要对未知的枚举jdbc类型进行null设置了.
                  
    或者不设置javaType属性,在自定义的枚举类型处理器中,使用注解@MappedTypes@MappedJdbcTypes .
    @MappedTypes(MyEnum.class) 
    @MappedJdbcTypes(value ={}, includeNullJdbcType = true)
    public class MyEnumTypeHandler extends BaseTypeHandler
    {
  2. 在映射文件中,显示为sql语句指定类型处理器.
                                    
    	
                                                       
                                                          
                                                                   
                                                  
    	INSERT INTO tbl_name(colu) VALUE(#{prop,                   
    	typeHandler=org.apache.ibatis.type.EnumTypeHandler})       
                                                          

     

  3. 获取mapper的实例,就可遍历的 含有枚举类型的表了.

objectFactory(对象工厂配置)

ibatis创建一个结果对象的实例时,需要使用ObjectFactory对象实例.

默认情况下,ibatis使用的对象工厂类对象是: org.apache.ibatis.reflection.factory.DefaultObjectFactory .

若需要自定义的话,只需要实现DefaultObjectFactory,新增所需的行为和属性即可.

ibatis的对象工厂可满足大多数需求,若无特殊需求,无需设置.

           
	 
	...                           
                  

plugins(插件配置)

                            
	         
		 
		...                          
	                        
	...                              
                           

ibatis中的插件主要效用是,拦截sql执行语句的执行过程.

以下是ibatis允许拦截的方法.

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

environments(环境配置集)

                
	                  
		     
			 
			...                          
		            
		             
			 
			...                          
		                    
	                       
	...                                  
	                         

environments解析

environments可以配置多个数据源/environment,一个数据源包含一个数据库配置/datasource

和一个数据事务配置/transactionManager.

其属性defalut表示,在缺省的情况下,将启用哪个数据源配置.

environment(数据源配置)

标签environment的属性id,表示的是全局唯一标识符.

transactionManager(数据事务配置)

配置方式

JBDC:使用JDBC来管理事务.

MANAGE:让容器来管理事务,什么也不做.

自定义:自定义数据库事务管理的方式.

dataSource(数据库配置)

ibatis提供了三种内建的数据源类型.

type=”[UNPOOLED|POOLED|JNDI]”

补充:也可使用其他数据源配置,通常使用POOLED.

UNPOOLED(非连接池数据库)

driver 驱动的完全限定名
url 数据库的url地址
username \
password \
defaultTransactionIsolationLevel 连接事务的隔离级别

作为可选项,可以传递属性给数据库驱动. driver.encoding=UTF8 

相当于DriverManager.getConnection(url,properties)的效用.

可参考jdk中DriverManager内置的源码

@CallerSensitive
public static Connection getConnection(String url,
    java.util.Properties info) throws SQLException {

    return (getConnection(url, info, Reflection.getCallerClass()));
}

POOLED(连接池数据库)

driver 驱动的完全限定名
url 数据库的url地址
username \
password \
defaultTransactionIsolationLevel 连接事务的隔离级别
poolMaximumActiveConnections 可活动的连接数,默认值10
poolMaximumIdleConnections 可存在的空闲连接数
poolMaximumCheckoutTime 被强制返回之前,池中连接被check out的时间,默认值20000毫秒.
poolTimeToWait 获取连接花费较长时间,连接池打印状态日志,并尝试重新连接;默认值20000毫秒,20.
poolMaximumLocalBadConnectionTolerance 从连接池中,若获取的是坏连接,允许重新获取新连接的次数,默认值3.设置的次数不应当超过poolMaximumIdleConnections poolMaximumLocalBadConnectionTolerance之和.
poolPingQuery 发送数据库的侦测查询,校验连接是否正常工作,且等待接收请求.默认值”NO PING QUERY SET”.
poolPingEnabled 是否开启侦测查询.若开启,应当设置poolPingQuery的属性为一个可执行且速度快的sql语句,默认值false.
poolPingConnectionsNotUsedFor 设置poolPingQuery的频率,建议设置时间同连接超时时间.默认值0,表示所有连接每刻都被侦测,仅当poolPingEnabledtrue时生效.

JNDI(JNDI数据源)

为了能够在例如EJB,或应用服务器中的容器使用数据源.

容器可以集中,或在外部配置数据源,然后放置一个JNDI上下文引用.

initial_context(可选属性,表示在InitialContext 中寻找上下文.如果未设置,

data_source将直接从InitialContext 中寻找.)

data_source(表示引用数据源实例位置的上下文路径,若提供了initial_context配置,

则会在其返回的上下文中寻找;没有提供则直接在InitialContext中寻找.)

前缀`env`可将配置属性传递给初始上下文.

env.encoding=UTF8

databaseIdProvider(数据库厂商标识)

ibatis根据不同数据库厂商的标识,执行不同的sql语句.

可参考java.sql.DatabaseMetaData.getDatabaseProductName()

     
	 
	...                          
            

mappers(映射文件关联)

效用主要是引用映射器.

                                  
	 
	...                                    
	                    
	...                                    
                                 

完整配置属性列表


	
	
	
	
	
	
	
		
			
			
		
	
	
	

 

  

你可能感兴趣的:(归档弃用)