MyBatis xml配置文件详解.docx

上传人:b****3 文档编号:3508116 上传时间:2022-11-23 格式:DOCX 页数:22 大小:29.11KB
下载 相关 举报
MyBatis xml配置文件详解.docx_第1页
第1页 / 共22页
MyBatis xml配置文件详解.docx_第2页
第2页 / 共22页
MyBatis xml配置文件详解.docx_第3页
第3页 / 共22页
MyBatis xml配置文件详解.docx_第4页
第4页 / 共22页
MyBatis xml配置文件详解.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

MyBatis xml配置文件详解.docx

《MyBatis xml配置文件详解.docx》由会员分享,可在线阅读,更多相关《MyBatis xml配置文件详解.docx(22页珍藏版)》请在冰豆网上搜索。

MyBatis xml配置文件详解.docx

MyBatisxml配置文件详解

MyBatisxml配置文件详解

一、MyBatis配置文件基本结构

在使用mybatis框架时,首先导入其对应的jar包,并进行相应的配置,所以得对配置文件的每个参数都得了解。

一个完全的mybatis配置文件结构如下:

[html]viewplaincopy

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEconfiguration

PUBLIC"-//mybatis.org//DTDConfig3.0//EN"

"http:

//mybatis.org/dtd/mybatis-3-config.dtd">

--配置文件的根元素-->

--属性:

定义配置外在化-->

--设置:

定义mybatis的一些全局性设置-->

--具体的参数名和参数值-->

--类型名称:

为一些类定义别名-->

--类型处理器:

定义Java类型与数据库中的数据类型之间的转换关系-->

--对象工厂-->

--插件:

mybatis的插件,插件可以修改mybatis的内部运行规则-->

--环境:

配置mybatis的环境-->

--环境变量:

可以配置多个环境变量,比如使用多数据源时,就需要配置多个环境变量-->

--事务管理器-->

--数据源-->

--数据库厂商标识-->

--映射器:

指定映射文件或者映射类-->

properties

properties元素主要是用来定义配置外在化,比如数据库的连接属性等。

这些属性都是可外部配置且可动态替换的,既可以在典型的Java属性文件中配置,亦可以通过properties元素的子元素来传递。

例如:

[html]viewplaincopy

33TYyg"/>

其中的属性就可以在整个配置文件中使用来替换需要动态配置的属性值。

比如在数据源中使用的例子:

[html]viewplaincopy

这个例子中的username和password将会由properties元素中设置的相应值来替换。

driver和url属性将会由config.properties文件中对应的值来替换。

这样就为配置提供了诸多灵活选择。

属性也可以被传递到SqlSessionBuilder.build()方法中。

例如:

[html]viewplaincopy

SqlSessionFactoryfactory=sqlSessionFactoryBuilder.build(reader,props);

//...or...

SqlSessionFactoryfactory=sqlSessionFactoryBuilder.build(reader,environment,props);

但是,这也就涉及到了优先级的问题,如果属性不只在一个地方配置,那么mybatis将会按照下面的顺序来加载:

在properties元素体内指定的属性首先被读取。

然后根据properties元素中的resource属性读取类路径下属性文件或根据url属性指定的路径读取属性文件,并覆盖已读取的同名属性。

最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

因此,通过方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级的是properties属性中指定的属性。

settings

setting是指定MyBatis的一些全局配置属性,这是MyBatis中极为重要的调整设置,它们会改变MyBatis的运行时行为,所以我们需要清楚的知道这些属性的作用及默认值。

设置参数描述有效值默认值

cacheEnabled该配置影响的所有映射器中配置的缓存的全局开关true|falsetrue

lazyLoadingEnabled延迟加载的全局开关。

当开启时,所有关联对象都会延迟加载。

特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态true|falsefalse

aggressiveLazyLoading当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载。

true|falsetrue

multipleResultSetsEnabled是否允许单一语句返回多结果集(需要兼容驱动)。

true|falsetrue

useColumnLabel使用列标签代替列名。

不同的驱动在这方面会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。

true|falsetrue

useGeneratedKeys允许JDBC支持自动生成主键,需要驱动兼容。

如果设置为true则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如Derby)。

true|falseFalse

autoMappingBehavior指定MyBatis应如何自动映射列到字段或属性。

NONE表示取消自动映射;PARTIAL只会自动映射没有定义嵌套结果集映射的结果集。

FULL会自动映射任意复杂的结果集(无论是否嵌套)。

NONE,PARTIAL,FULLPARTIAL

defaultExecutorType配置默认的执行器。

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

SIMPLEREUSEBATCHSIMPLE

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

AnypositiveintegerNotSet(null)

defaultFetchSizeSetsthedriverahintastocontrolfetchingsizeforreturnresults.Thisparametervaluecanbeoverridebyaquerysetting.AnypositiveintegerNotSet(null)

safeRowBoundsEnabled允许在嵌套语句中使用分页(RowBounds)。

true|falseFalse

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

true|falseFalse

localCacheScopeMyBatis利用本地缓存机制(LocalCache)防止循环引用(circularreferences)和加速重复嵌套查询。

默认值为SESSION,这种情况下会缓存一个会话中执行的所有查询。

若设置值为STATEMENT,本地会话仅用在语句执行上,对相同SqlSession的不同调用将不会共享数据。

SESSION|STATEMENTSESSION

jdbcTypeForNull当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。

某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,比如NULL、VARCHAR或OTHER。

JdbcTypeenumeration.Mostcommonare:

NULL,VARCHARandOTHEROTHER

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

Amethodnamelistseparatedbycommasequals,clone,hashCode,toString

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

Atypealiasorfullyqualifiedclassname.org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver

callSettersOnNulls指定当结果集中值为null的时候是否调用映射对象的setter(map对象时为put)方法,这对于有Map.keySet()依赖或null值初始化的时候是有用的。

注意基本类型(int、boolean等)是不能设置成null的。

true|falsefalse

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

AnyStringNotset

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

SLF4J|LOG4J|LOG4J2|JDK_LOGGING|COMMONS_LOGGING|STDOUT_LOGGING|NO_LOGGINGNotset

proxyFactory指定Mybatis创建具有延迟加载能力的对象所用到的代理工具。

CGLIB|JAVASSISTJAVASSIST(MyBatis3.3orabove)

一个完整的settings元素示例如下:

[html]viewplaincopy

typeAliases

类型别名是为Java类型设置一个短的名字。

它只和xml配置有关,存在的意义仅在于用来减少类完全限定名的冗余,例如:

[html]viewplaincopy

当这样配置时,Blog可以用在任何使用domain.blog.Blog的地方。

也可以指定一个包名,MyBatis会在包名下搜索需要的JavaBean,比如:

[html]viewplaincopy

每一个在包domain.blog中的JavaBean,在没有注解的情况下,会使用Bean的首字母小写的非限类名来作为它的别名。

比如domain.blog.Author的别名为author;若有注解,则别名为注解值。

看下面的例子:

[html]viewplaincopy

@Alias("author")publicclassAuthor

{

...}

已经为许多常见的Java类型内建了相应的类型别名。

它们都是大小写不敏感的,需要注意的是有基本类型名称重复导致的特殊处理。

别名映射的类型

_bytebyte

_longlong

_shortshort

_intint

_integerint

_doubledouble

_floatfloat

_booleanboolean

stringString

byteByte

longLong

shortShort

intInteger

integerInteger

doubleDouble

floatFloat

booleanBoolean

dateDate

decimalBigDecimal

bigdecimalBigDecimal

objectObject

mapMap

hashmapHashMap

listList

arraylistArrayList

collectionCollection

iteratorIterator

typeHandlers

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

下表描述了一些默认的类型处理器。

类型处理器Java类型JDBC类型

BooleanTypeHandlerjava.lang.Boolean,boolean数据库兼容的BOOLEAN

ByteTypeHandlerjava.lang.Byte,byte数据库兼容的NUMERIC或BYTE

ShortTypeHandlerjava.lang.Short,short数据库兼容的NUMERIC或SHORTINTEGER

IntegerTypeHandlerjava.lang.Integer,int数据库兼容的NUMERIC或INTEGER

LongTypeHandlerjava.lang.Long,long数据库兼容的NUMERIC或LONGINTEGER

FloatTypeHandlerjava.lang.Float,float数据库兼容的NUMERIC或FLOAT

DoubleTypeHandlerjava.lang.Double,double数据库兼容的NUMERIC或DOUBLE

BigDecimalTypeHandlerjava.math.BigDecimal数据库兼容的NUMERIC或DECIMAL

StringTypeHandlerjava.lang.StringCHAR,VARCHAR

ClobTypeHandlerjava.lang.StringCLOB,LONGVARCHAR

NStringTypeHandlerjava.lang.StringNVARCHAR,NCHAR

NClobTypeHandlerjava.lang.StringNCLOB

ByteArrayTypeHandlerbyte[]数据库兼容的字节流类型

BlobTypeHandlerbyte[]BLOB,LONGVARBINARY

DateTypeHandlerjava.util.DateTIMESTAMP

DateOnlyTypeHandlerjava.util.DateDATE

TimeOnlyTypeHandlerjava.util.DateTIME

SqlTimestampTypeHandlerjava.sql.TimestampTIMESTAMP

SqlDateTypeHandlerjava.sql.DateDATE

SqlTimeTypeHandlerjava.sql.TimeTIME

ObjectTypeHandlerAnyOTHER或未指定类型

EnumTypeHandlerEnumerationTypeVARCHAR-任何兼容的字符串类型,存储枚举的名称(而不是索引)

EnumOrdinalTypeHandlerEnumerationType任何兼容的NUMERIC或DOUBLE类型,存储枚举的索引(而不是名称)。

可以重写类型处理器或创建自己的类型处理器来处理不支持的或非标准的类型。

具体的做法为:

实现org.apache.ibatis.type.TypeHandler接口,或继承一个很便利的类org.apache.ibatis.type.BaseTypeHandler,然后可以选择性地将它映射到一个JDBC类型。

比如:

[html]viewplaincopy

//

ExampleTypeHandler.java

@MappedJdbcTypes(JdbcType.VARCHAR)publicclassExampleTypeHandlerextendsBaseTypeHandler

{

@OverridepublicvoidsetNonNullParameter(PreparedStatementps,inti,Stringparameter,JdbcTypejdbcType)throwsSQLException

{ps.setString(i,

parameter)

;

}

@OverridepublicStringgetNullableResult(ResultSetrs,StringcolumnName)throwsSQLException

{return

rs.getString(columnName)

;

}

@OverridepublicStringgetNullableResult(ResultSetrs,intcolumnIndex)throwsSQLException

{return

rs.getString(columnIndex)

;

}

@OverridepublicStringgetNullableResult(CallableStatementcs,intcolumnIndex)throwsSQLException

{return

cs.getString(columnIndex);

}}

并且还需要在配置文件里面加上:

[html]viewplaincopy

--mybatis-config.xml-->

使用这个的类型处理器将会覆盖已经存在的处理Java的String类型属性和VARCHAR参数及结果的类型处理器。

要注意MyBatis不会窥探数据库元信息来决定使用哪种类型,所以必须在参数和结果映射中指明是VARCHAR类型字段,以使其能绑定到正确的类型处理器上。

这是因为,MyBatis直到语句被执行才清楚数据类型。

通过类型处理器的泛型,MyBatis可以得知该类型处理器的Java类型,不过这种行为可以通过两种方法改变:

在类型处理器的元素(typeHandlerelement)上增加一个javaType属性(比如,javaType="String");

在类型处理器的类上(TypeHa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1