mybatis映射配置文件 1.docx
- 文档编号:26223600
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:21
- 大小:27.41KB
mybatis映射配置文件 1.docx
《mybatis映射配置文件 1.docx》由会员分享,可在线阅读,更多相关《mybatis映射配置文件 1.docx(21页珍藏版)》请在冰豆网上搜索。
mybatis映射配置文件1
XML映射配置文件
MyBatis的XML配置文件包含了影响MyBatis行为甚深的设置和属性信息。
XML文档的高层级结构如下:
∙configuration配置
∙properties属性
∙settings设置
∙typeAliases类型命名
∙typeHandlers类型处理器
∙objectFactory对象工厂
∙plugins插件
∙environments环境
∙environment环境变量
∙transactionManager事务管理器
∙dataSource数据源
∙databaseIdProviderchinese?
∙mappers映射器
properties
这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递。
例如:
33TYyg"/> 其中的属性就可以在整个配置文件中使用,使用可替换的属性来实现动态配置。 比如: 这个例子中的username和password将会由properties元素中设置的值来替换。 driver和url属性将会从包含进来的config.properties文件中的值来替换。 这里提供很多配置的选项。 属性也可以被传递到SqlSessionBuilder.build()方法中。 例如: SqlSessionFactoryfactory=sqlSessionFactoryBuilder.build(reader,props); //...or... SqlSessionFactoryfactory=sqlSessionFactoryBuilder.build(reader,environment,props); 如果在这些地方,属性多于一个的话,MyBatis按照如下的顺序加载它们: ∙在properties元素体内指定的属性首先被读取。 ∙从类路径下资源或properties元素的url属性中加载的属性第二被读取,它会覆盖已经存在的完全一样的属性。 ∙作为方法参数传递的属性最后被读取,它也会覆盖任一已经存在的完全一样的属性,这些属性可能是从properties元素体内和资源/url属性中加载的。 因此,最高优先级的属性是那些作为方法参数的,然后是资源/url属性,最后是properties元素中指定的属性。 settings 这些是极其重要的调整,它们会修改MyBatis在运行时的行为方式。 下面这个表格描述了设置信息,它们的含义和默认值。 设置参数 描述 有效值 默认值 cacheEnabled 这个配置使全局的映射器启用或禁用缓存。 true|false true lazyLoadingEnabled 全局启用或禁用延迟加载。 当禁用时,所有关联对象都会即时加载。 true|false true aggressiveLazyLoading 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。 否则,每种属性将会按需要加载。 true|false true multipleResultSetsEnabled 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) true|false true useColumnLabel 使用列标签代替列名。 不同的驱动在这方便表现不同。 参考驱动文档或充分测试两种方法来决定所使用的驱动。 true|false true useGeneratedKeys 允许JDBC支持生成的键。 需要适合的驱动。 如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) true|false False autoMappingBehavior 指定MyBatis如何自动映射列到字段/属性。 PARTIAL只会自动映射简单,没有嵌套的结果。 FULL会自动映射任意复杂的结果(嵌套的或其他情况)。 NONE,PARTIAL,FULL PARTIAL defaultExecutorType 配置默认的执行器。 SIMPLE执行器没有什么特别之处。 REUSE执行器重用预处理语句。 BATCH执行器重用语句和批量更新 SIMPLEREUSEBATCH SIMPLE defaultStatementTimeout 设置超时时间,它决定驱动等待一个数据库响应的时间。 Anypositiveinteger NotSet(null) safeRowBoundsEnabled AllowsusingRowBoundsonnestedstatements. true|false False mapUnderscoreToCamelCase EnablesautomaticmappingfromclassicdatabasecolumnnamesA_COLUMNtocamelcaseclassicJavapropertynamesaColumn. true|false False localCacheScope MyBatisuseslocalcachetopreventcircularreferencesandspeeduprepeatednestedqueries.Bydefault(SESSION)allqueriesexecutedduringasessionarecached.IflocalCacheScope=STATEMENTlocalsessionwillbeusedjustforstatementexecution,nodatawillbesharedbetweentwodifferentcallstothesameSqlSession. SESSION|STATEMENT SESSION jdbcTypeForNull SpecifiestheJDBCtypefornullvalueswhennospecificJDBCtypewasprovidedfortheparameter.SomedriversrequirespecifyingthecolumnJDBCtypebutothersworkwithgenericvalueslikeNULL,VARCHARorOTHER. JdbcTypeenumeration.Mostcommonare: NULL,VARCHARandOTHER OTHER lazyLoadTriggerMethods SpecifieswhichObject'smethodstriggeralazyload Amethodnamelistseparatedbycommas equals,clone,hashCode,toString 一个设置信息元素的示例,完全的配置如下所示: typeAliases 类型别名是为Java类型命名一个短的名字。 它只和XML配置有关,只用来减少类完全限定名的多余部分。 例如: 使用这个配置,“Blog”可以任意用来替代“domain.blog.Blog”所使用的地方。 YoucanalsospecifyapackagewhereMyBatiswillsearchforbeans.Forexample: Eachbeanfoundindomain.blog,ifnoannotationisfound,willberegisteredasanaliasusinguncapitalizednon-qualifiedclassnameofthebean.Thasisdomain.blog.AuthorwillberegisteredasAuthor.Ifthe@Aliasannotationisfounditsvaluewillbeusedasanalias.Seetheexamplebelow: @Alias("author") publicclassAuthor{ ... } 对于普通的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 无论是MyBatis在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成Java类型。 下面这个表格描述了默认的类型处理器。 类型处理器 Java类型 JDBC类型 BooleanTypeHandler java.lang.Boolean,boolean 任何兼容的布尔值 ByteTypeHandler java.lang.Byte,byte 任何兼容的数字或字节类型 ShortTypeHandler java.lang.Short,short 任何兼容的数字或短整型 IntegerTypeHandler java.lang.Integer,int 任何兼容的数字和整型 LongTypeHandler java.lang.Long,long 任何兼容的数字或长整型 FloatTypeHandler java.lang.Float,float 任何兼容的数字或单精度浮点型 DoubleTypeHandler java.lang.Double,double 任何兼容的数字或双精度浮点型 BigDecimalTypeHandler java.math.BigDecimal 任何兼容的数字或十进制小数类型 StringTypeHandler java.lang.String CHAR和VARCHAR类型 ClobTypeHandler java.lang.String XX文库-让每个人平等地提升自我CLOB和LONGVARCHAR类型 NStringTypeHandler java.lang.String NVARCHAR和NCHAR类型 NClobTypeHandler java.lang.String NCLOB类型 ByteArrayTypeHandler byte[] 任何兼容的字节流类型 BlobTypeHandler byte[] BLOB和LONGVARBINARY类型 DateTypeHandler java.util.Date TIMESTAMP类型 DateOnlyTypeHandler java.util.Date DATE类型 TimeOnlyTypeHandler java.util.Date TIME类型 SqlTimestampTypeHandler java.sql.Timestamp TIMESTAMP类型 SqlDateTypeHandler java.sql.Date DATE类型 SqlTimeTypeHandler java.sql.Time TIME类型 ObjectTypeHandler Any 其他或未指定类型 EnumTypeHandler EnumerationType VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引) EnumOrdinalTypeHandler EnumerationType AnycompatibleNUMERICorDOUBLE,asthepositionisstored(notthecodeitself). 你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。 //TODOtranslationneededTodoso,simplyextendtheorg.apache.ibatis.type.BaseTypeHandlerclassandoptionallymapyournewTypeHandlerclasstoaJDBCtype.例如: //ExampleTypeHandler.java @MappedJdbcTypes(JdbcType.VARCHAR) publicclassExampleTypeHandlerextendsBaseTypeHandler @Override publicvoidsetNonNullParameter(PreparedStatementps,inti,Stringparameter,JdbcTypejdbcType)throwsSQLException{ ps.setString(i,parameter); } @Override publicStringgetNullableResult(ResultSetrs,StringcolumnName)throwsSQLException{ returnrs.getString(columnName); } @Override publicStringgetNullableResult(ResultSetrs,intcolumnIndex)throwsSQLException{ returnrs.getString(columnIndex); } @Override publicStringgetNullableResult(CallableStatementcs,intcolumnIndex)throwsSQLException{ returncs.getString(columnIndex); } } --mybatis-config.xml--> 使用这样的类型处理器将会覆盖已经存在的处理Java的String类型属性和VARCHAR参数及结果的类型处理器。 要注意MyBatis不会审视数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指定那是VARCHAR类型的字段,来绑定到正确的类型处理器上。 这是因为MyBatis直到语句被执行都不知道数据类型的这个现实导致的。 //TODOtranslationneededMyBatiswillknowthetheJavatypethatyouwanttohandlewiththisTypeHandlerbyintrospectingitsgenerictype,butyoucanoverridethisbehaviorbytwomeans: ∙AddingajavaTypeattributetothetypeHandlerelement(forexample: javaType="String") ∙Addinga@MappedTypesannotationtoyourTypeHandlerclassspecifyingthelistofjavatypestoassociateitwith.ThisannotationwillbeignoredifthejavaTypeattributeasalsobeenspecified. AssociatedJDBCtypecanbespecifiedbytwomeans: ∙AddingajdbcTypeattributetothetypeHandlerelement(forexample: jdbcType=VARCHAR). ∙Addinga@MappedJdbcTypesannotationtoyourTypeHandlerclassspecifyingthelistofJDBCtypestoassociateitwith.ThisannotationwillbeignoredifthejdbcTypeattributeasalsobeenspecified. AndfinallyyoucanletMyBatissearchforyourTypeHandlers: --mybatis-config.xml--> NotethatwhenusingtheautodiscoveryfeatureJDBCtypescanonlybespecifiedwithannotations. objectFactory MyBatis每次创建结果对象新的实例时,它使用一个ObjectFactory实例来完成。 如果参数映射存在,默认的ObjectFactory不比使用默认构造方法或带参数的构造方法实例化目标类做的工作多。 如果你想重写默认的ObjectFactory,你可以创建你自己的。 比如: //ExampleObjectFactory.java publicclassExample
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mybatis映射配置文件 mybatis 映射 配置文件