MyBatis配置文件基本结构资料.docx
- 文档编号:13526709
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:26
- 大小:65.18KB
MyBatis配置文件基本结构资料.docx
《MyBatis配置文件基本结构资料.docx》由会员分享,可在线阅读,更多相关《MyBatis配置文件基本结构资料.docx(26页珍藏版)》请在冰点文库上搜索。
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的运行时行为,所以我们需要清楚的知道这些属性的作用及默认值。 设置参数描述有效值默认值 true|falsetrue cacheEnabled该配置影响的所有映射器中配置的缓存的全局开关 lazyLoadingEnabled延迟加载的全局开关。 当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态true|falsefalseaggressiveLazyLoading当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载。 true|falsetruemultipleResultSetsEnabled是否允许单一语句返回多结果集(需要兼容驱动)。 true|falsetrueuseColumnLabel使用列标签代替列名。 不同的驱动在这方面会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。 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|falseFalsemapUnderscoreToCamelCase是否开启自动驼峰命名规则(camelcase)映射,即从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射。 true|falseFalselocalCacheScopeMyBatis利用本地缓存机制(LocalCache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为SESSION,这种情况下会缓存一个会话中执 行的所有查询。 若设置值为STATEMENT,本地会话仅用在语句执行上,对相同SqlSession 的不同调用将不会共享数据。 SESSION|STATEMENTSESSION OTHER lazyLoadTriggerMethodslistseparatedbycommasdefaultScriptingLanguage 指定哪个对象的方法触发一次延迟加载。 Amethodname equals,clone,hashCode,toString 指定动态SQL生成的默认语言。 Atypealiasorfully qualifiedclassname.org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDrivercallSettersOnNulls指定当结果集中值为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_LOGGING NotsetproxyFactory指定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类型内建了相应的类型别名。 它们都是大小写不敏感的,需要注意的是有基本类型名称重复导致的特殊处理。 别名 _byte _long _short _intint 映射的类型 byte long short _integer int _double double _float float _booleanboolean string String byteByte longLong short Short intInteger integer Integer double Double floatFloat boolean Boolean dateDate decimal BigDecimal bigdecimalBigDecimal object Object mapMap hashmapHashMap listList arraylist ArrayList collectionCollection iterator Iterator typeHandlers 无论是MyBatis在预处理语句(PreparedStatemen)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成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或INTEGERLongTypeHandlerjava.lang.Long,long数据库兼容的NUMERIC或LONGINTEGER FloatTypeHandlerjava.lang.Float,float数据库兼容的NUMERIC或FLOAT DoubleTypeHandlerjava.lang.Double,double数据库兼容的NUMERIC或DOUBLEBigDecimalTypeHandlerjava.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) J } @OverridepublicStringgetNullableResult(ResultSetrs,StringcolumnName)throwsSQLException {return rs.getString(columnName) @OverridepublicStringgetNullableResult(ResultSetrs,intcolumnIndex)throwsSQLException {return rs.getString(columnIndex) J } @OverridepublicStringgetNullableResult(CallableStatementcs,intcolumnIndex)throwsSQLException {returncs.getString(columnIndex); }}并且还需要在配置文件里面加上: [html]viewplaincopy --mybatis-config.xml--> 使用这个的类型处理器将会覆盖已经存在的处理Java的String类型属性和VARCHAR参数 及结果的类型处理器。 要注意MyBatis不会窥探数据库元信息来决定使用哪种类型,所以必须在参数和结果映射中指明是VARCHAR类型字段,以使其能绑定到正确的类型处理器上。 这是因为,MyBatis直到语句被执行才清楚数据类型。 通过类型处理器的泛型,MyBatis可以得知该类型处理器的Java类型,不过这种行为可以通过两种方法改变: 在类型处理器的元素(typeHandlerelement)上增加一个javaType属性(比如,javaType="String"); 在类型处理器的类上(TypeHandlerclass)增加一个@MappedTypes注解来指定与其关联的 Java类型列表。 如果在javaType属性中也同时制定,则注解方式将被忽略。 可以通过两种方式来指定被关联的JDBC类型: 在类型处理器的配置元素上增加一个javaType属性(比如: javaType="VARCHAR"); 在类型处理器的类上(TypeHandle
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MyBatis 配置文件 基本 结构 资料
![提示](https://static.bingdoc.com/images/bang_tan.gif)