MyBatis 配置文件基本结构.docx
- 文档编号:8001399
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:22
- 大小:29.07KB
MyBatis 配置文件基本结构.docx
《MyBatis 配置文件基本结构.docx》由会员分享,可在线阅读,更多相关《MyBatis 配置文件基本结构.docx(22页珍藏版)》请在冰豆网上搜索。
MyBatis配置文件基本结构
MyBatis配置文件基本结构
一、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"); 在类型处理器的类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MyBatis 配置文件基本结构 配置文件 基本 结构
![提示](https://static.bdocx.com/images/bang_tan.gif)