Mybatis学习--XML配置文件详解

在配置的Mybatis的时候,我们可以通过一个XML来配置,也可以嵌入到其他配置文件中,

比如Spring的applicationContext.xml中。

MyBatis 的 XML 配置文件包含了影响 MyBatis 行为甚深的设置和属性信息。 XML 文档 的高层级结构如下:

configuration 配置

properties 属性

settings 设置

typeAliases 类型命名

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

databaseIdProvider chinese?

mappers 映射器

Properties

这些是外部化的, 可替代的属性, 这些属性也可以配置在典型的 Java 属性配置文件中, 或者通过 properties 元素的子元素来传递。例如:

<properties resource="org/mybatis/example/jdbc.properties">

</properties>

上面我们就引入了我们配置连接数据源的jdbc.properties连接属性然后我们就可以通过引用来使用,这一点和我们在使用spring配置数据源是一致的:

<dataSource type="POOLED">

<property name="driver" value="${driver}"/>

<property name="url" value="${url}"/>

<property name="username" value="${username}"/>

<property name="password" value="${password}"/>

</dataSource>

settings

settings是极其重要的配置, 它们会修改 MyBatis 在运行时的行为方式。 下面这个表格描述了一些设置信息的含义和默认值:


设置参数


描述


有效值


默认值


cacheEnabled


这个配置使全局的映射器启用或禁用 缓存。


true | false


true


lazyLoadingEnabled


全局启用或禁用延迟加载。当禁用时, 所有关联对象都会即时加载。 This value can be superseded for an specific relation by using the fetchType attribute on it.


true | false


false


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 执行器重用语句 和批量更新


SIMPLE REUSE BATCH


SIMPLE


defaultStatementTimeout


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


Any positive integer


Not Set (null)


safeRowBoundsEnabled


Allows using RowBounds on nested statements.


true | false


False


mapUnderscoreToCamelCase


Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn.


true | false


False


localCacheScope


MyBatis uses local cache to prevent circular references and speed up repeated nested queries. By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT local session will be used just for statement execution, no data will be shared between two different calls to the same SqlSession.


SESSION | STATEMENT


SESSION


jdbcTypeForNull


Specifies the JDBC type for null values when no specific JDBC type was provided for the parameter. Some drivers require specifying the column JDBC type but others work with generic values like NULL, VARCHAR or OTHER.


JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER


OTHER


lazyLoadTriggerMethods


Specifies which Object‘s methods trigger a lazy load


A method name list separated by commas


equals,clone,hashCode,toString


defaultScriptingLanguage


Specifies the language used by default for dynamic SQL generation.


A type alias or fully qualified class name.


org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver


callSettersOnNulls


当结果集中含有Null值时是否执行映射对象的setter或者Map对象的put方法。此设置对于原始类型如int,boolean等无效。


true | false


false


logPrefix


Specifies the prefix string that MyBatis will add to the logger names.


Any String


Not set


logImpl


Specifies which logging implementation MyBatis should use. If this setting is not present logging implementation will be autodiscovered.


SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING


Not set


proxyFactory


Specifies the proxy tool that MyBatis will use for creating lazy loading capable objects.


CGLIB | JAVASSIST


CGLIB

其实在很多时候,我们不需要去配置这么多信息,你只需要使用默认的值就可以了,除非你需要自定义状态。

typeAliases

类型别名和其他语言一样,就是用一个别名来代替你所指的对象,就好似Map的key和value一样,只不过两个都指的是一个东西,了解数据库同义词的朋友可能会更有体会。

<typeAliases>

<typeAlias alias="Author" type="domain.blog.Author"/>

<typeAlias alias="Blog" type="domain.blog.Blog"/>

<typeAlias alias="Comment" type="domain.blog.Comment"/>

<typeAlias alias="Post" type="domain.blog.Post"/>

<typeAlias alias="Section" type="domain.blog.Section"/>

<typeAlias alias="Tag" type="domain.blog.Tag"/>

</typeAliases>

这些别名的使用在官方文档中说的是仅仅在配置文件中使用。

别名的另外一种是自动扫描包中的注释来得到bean(我觉得spring里面用的多),比如:

<typeAliases>

<package name="domain"/>

</typeAliases>

这里domain指的是我们的实体包,我们的实体类定义如下:

@Alias("student")

public class Student{

...

}

如果说你的实体类中注解没有使用参数student,那么会创建一个Student bean对象,如果说你注解中定义了Alias(“student”),那么就会创建一个student bean ,我们在程序中就可以使用这个实体类

typeHandlers

这个是用来处理参数和格式化参数的,即查询SQL的输入参数和返回结果集的参数,他会根据你设置的类型来转换。

此外,Mybatis也提供了自定义类型处理,你可以实现org.apache.ibatis.type.TypeHandler

这个接口或者继承org.apache.ibatis.type.BaseTypeHandler类。例如:

// ExampleTypeHandler.java

@MappedJdbcTypes(JdbcType.VARCHAR)

public class ExampleTypeHandler extends BaseTypeHandler<String> {

@Override

public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {

ps.setString(i, parameter);

}

@Override

public String getNullableResult(ResultSet rs, String columnName) throws SQLException {

return rs.getString(columnName);

}

@Override

public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {

return rs.getString(columnIndex);

}

@Override

public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {

return cs.getString(columnIndex);

}

}

然后在配置文件中配置:

<!-- mybatis-config.xml -->

<typeHandlers>

<typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>

</typeHandlers>

就可以使用了。

Handing Enums

如果你想使用枚举型,你可以使用EnumTypeHandler or EnumOrdinalTypeHandler,

EnumTypeHandler和其他handler不一样,他只处理继承enum的特殊类。

environments

MyBatis 可以配置多种环境。这会帮助你将 SQL 映射应用于多种数据库之中。例如, 你也许为开发要设置不同的配置, 测试和生产环境。 或者你可能有多种生产级数据库却共享 相同的模式,所以你会想对不同数据库使用相同的 SQL 映射。这种用例是很多的。

一个很重要的问题要记得:你可以配置多种环境,但你只能为每个 SqlSessionFactory 实例选择一个。

所以,如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据库 对应一个。而如果是三个数据库,你就需要三个实例,以此类推。记忆起来很简单:

· 每个数据库对应一个 SqlSessionFactory

databaseIdProvider

Mybatis能够根据你的数据库提供执行不同statemaent,这种多数据源提供功能是基于映射数据库ID来实现的。如我们这样配置:

<databaseIdProvider type="DB_VENDOR">

<property name="SQL Server" value="sqlserver"/>

<property name="DB2" value="db2"/>

<property name="Oracle" value="oracle" />

</databaseIdProvider>

mappers

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是, 首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在这方面没有提供一个很好 的方法, 所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的 资源引用,或者字符表示,或 url 引用的完全限定名(包括 file:///URLs) 。例如:

<!-- Using classpath relative resources -->

<mappers>

<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>

<mapper resource="org/mybatis/builder/BlogMapper.xml"/>

<mapper resource="org/mybatis/builder/PostMapper.xml"/>

</mappers>

以上内容源自Mybatis官网,部分地方有自己添加的见解和翻译

时间: 2024-10-13 01:43:34

Mybatis学习--XML配置文件详解的相关文章

AndroidManifest.xml配置文件详解(转载)

AndroidManifest.xml配置文件详解 2013-01-05 10:25:23 分类: Android平台 AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xml文件样例.     [html] view plaincopy <?xml version="1.0" encoding="utf-8"?&g

赵雅智_AndroidManifest.xml配置文件详解

HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13235    Accepted Submission(s): 3096 Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候

Maven的pom.xml配置文件详解

1 Maven的pom.xml配置文件详解 2 Maven简述 3 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 4 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具.由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目.由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长

Maven之pom.xml配置文件详解

Maven之pom.xml配置文件详解 2019-06-05 一.什么是pom? POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml.作用类似ant的build.xml文件,功能更强大.该文件用于管理:源代码.配置文件.开发者的信息和角色.问题追踪系统.组织信息.项目授权.项目的url.项目的依赖关系等等.事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件.

web.xml配置文件详解

一.web.xml配置文件常用元素及其意义预览 1 <web-app> 2 3 <!--定义了WEB应用的名字--> 4 <display-name></display-name> 5 6 <!--声明WEB应用的描述信息--> 7 <description></description> 8 9 <!--context-param元素声明应用范围内的初始化参数--> 10 <context-param&g

Tmocat的service.xml配置文件详解(含中文翻译)

Tmocat的service.xml配置文件 英文原版 中文手译 <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional informa

AndroidManifest.xml配置文件详解 (转)

AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xml文件样例. [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <manifest> <!-- 基本配置 --> <uses-permission />

AndroidManifest.xml配置文件详解

AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xml文件样例. <?xml version="1.0" encoding="utf-8"?> <manifest> <!-- 基本配置 --> <uses-permission /> <permission />

AndroidManifest.xml配置文件详解(转)

转载博客:http://blog.csdn.net/shagoo/article/details/7485958# AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xml文件样例. <?xml version="1.0" encoding="utf-8"?> <manifest> <!--