`

MyBatis XML 映射配置文件

阅读更多

在前面说了MyBatis 入门 ,了解了开发的基本流程。从上一篇博客中,我们可以发现MyBatis 主要配置文件有两个,一个是 mybatis-config.xml (名称不固定),一个是实体类与表之间的映射文件(根据实体的个数,可能存在多个)。这里先来总结一下mybatis-config.xml 配置文件。

    mybatis-config.xml 主要的功能就是为MyBatis 指定数据库相关信息、实体与表的映射配置文件、MyBatis 运行时的一些方式设置、插件配置等等。

其主要有:

·properties 属性

·settings 设置

·typeAliases 类型命名

·typeHandlers 类型处理器

·objectFactory 对象工厂

·plugins 插件

·environments 环境

·environment 环境变量

·transactionManager 事务管理器

·dataSource 数据源

·databaseIdProvider chinese?

·mappers 映射器

 

properties

主要配置数据库中的驱动、url 、用户名、密码等信息,这个大家做JDBC 时都很熟悉了,就不多说了。

 

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

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



 

typeAliases

类别名,是为了Java 类型命名一个简短的名称,注意的是它只和XML 配置有关。

<typeAliases>
  <typeAlias alias="Blog" type="com.iflytek.model.Blog"/>
 </typeAliases>
 

 

使用这个配置,Blog 就可以替代com.iflytek.model.Blog

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

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

Enumeration Type

VARCHAR- 任何兼容的字符串类型, 作为代码存储( 而不是索引)

EnumOrdinalTypeHandler

Enumeration Type

Any compatible NUMERIC or DOUBLE, as the position is stored (not the code itself).

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

@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>

 

使用这样的类型处理器将会覆盖已经存在的处理JavaString 类型属性和VARCHAR 参数及结果的类型处理器。要注意MyBatis 不会审视数据库元信息来决定使用哪种类型, 所以你必须在参数和结果映射中指定那是VARCHAR 类型的字段, 来绑定到正确的类型处理器上。这是因为MyBatis 直到语句被执行都不知道数据类型的这个现实导致的。

 

environments

MyBatis 可以配置多种环境。这会帮助我们将SQL 映射应用于多种数据库中。例如,你也许为开发要设置不同的配置,测试和生产环境。或者你可能有多种生产级数据库却共享相同的模式,所以你会想对不同数据库使用相同的SQL 映射。这里需要注意的是你可以配置多种环境,但是你只能为每个SqlSessionFactory 实例选择一个。所以,如果你想连接两个数据库, 你需要创建两个 SqlSessionFactory 实例, 每个数据库对应一个。

为了明确创建哪种环境, 你可以将它作为可选的参数传递给 SqlSessionFactoryBuilder 。 可以接受环境配置的两个方法签名是:

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
	SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties);
 

配置环境

<environments default="development">
		<environment id="development">
			<!-- 使用JDBC的事务管理 -->
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${database.driver}" />
				<property name="url" value="${database.url}" />
				<property name="username" value="${database.username}" />
				<property name="password" value="${database.password}" />
			</dataSource>
		</environment>

	</environments>
 

 

说明:

    1 Default ,默认的环境,可以随意定义,但是environment 中的Id 则必须指定到default

    2 MyBatis 中有两种事务管理,即type=”[JDBC|MANAGED]”JDBC ,这个配置直接简单使用了JDBC 的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。 MANAGED ,这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期( 比如 Spring JEE 应用服务器的上下文) 默认情况下它会关闭连接。 然而一些容器并不希望这样, 因此如果你需要从连接中停止它, 需要将 closeConnection 属性设置为 false

    3、对于dataSourceMyBatis 中提供了三种内建的数据源类型

· UNPOOLED :这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢, 这是对简单应用程序的一个很好的选择, 因为它不需要及时的可用连接。 不同的数据库对这 个的表现也是不一样的, 所以对某些数据库来说配置数据源并不重要, 这个配置也是闲置的。 UNPOOLED 类型的数据源仅仅用来配置以下 5 种属性: driverurlusernamepassworddefaultTransactionIsolationLevel( 默认的连接事务隔离级别)

· POOLED :这是 JDBC 连接对象的数据源连接池的实现, 用来避免创建新的连接实例 时必要的初始连接和认证时间。这是一种当前 Web 应用程序用来快速响应请求很流行的方法。 除了上述(UNPOOLED) 的属性之外, 还有很多属性可以用来配置 POOLED 数据源:

poolMaximumActiveConnections – 在任意时间存在的活动( 也就是正在使用) 连 接的数量。默认值:10

poolMaximumIdleConnections – 任意时间存在的空闲连接数。

poolMaximumCheckoutTime – 在被强制返回之前, 池中连接被检查的时间。默认 值:20000 毫秒( 也就是 20 )

poolTimeToWait – 这是给连接池一个打印日志状态机会的低层次设置, 还有重新 尝试获得连接, 这些情况下往往需要很长时间 为了避免连接池没有配置时静默失 败) 。默认值:20000 毫秒( 也就是 20 )

poolPingQuery – 发送到数据的侦测查询, 用来验证连接是否正常工作, 并且准备 接受请求。默认是“NO PING QUERY SET , 这会引起许多数据库驱动连接由一 个错误信息而导致失败。

poolPingEnabled – 这是开启或禁用侦测查询。如果开启, 你必须用一个合法的 SQL 语句( 最好是很快速的) 设置 poolPingQuery 属性。默认值:false

poolPingConnectionsNotUsedFor – 这是用来配置 poolPingQuery 多次时间被用一次。 这可以被设置匹配标准的数据库连接超时时间, 来避免不必要的侦测。 默认值: 0( 也就是所有连接每一时刻都被侦测- 但仅仅当 poolPingEnabled true 时适用)

·JNDI – 这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器, 容器可以集 中或在外部配置数据源, 然后放置一个 JNDI 上下文的引用。这个数据源配置只需要两个属性:

initial_context – 这 个 属 性 用 来 从 初 始 上 下 文 中 寻 找 环 境 ( 也 就 是 initialContext.lookup(initial ——context) 。这是个可选属性, 如果被忽略, 那么 data_source 属性将会直接以 initialContext 为背景再次寻找。

data_source – 这是引用数据源实例位置的上下文的路径。它会以由 initial_context 查询返回的环境为背景来查找, 如果 initial_context 没有返回结果时, 直接以初始 上下文为环境来查找。

 

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>
<!-- Using url fully qualified paths -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- Using mapper interface classes -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- Register all interfaces in a package as mappers -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

 

分享到:
评论

相关推荐

    spring和Mybatis的xml配置文件提示约束包

    "spring和Mybatis的xml配置文件提示约束包"这个主题,主要是关于在XML配置文件中使用的DTD(Document Type Definition)文档类型定义,它为XML文件提供了结构约束和语法规范。 DTD是一种元语言,用于定义XML文档的...

    myBatis xml提示文件

    XML提示文件是MyBatis框架的重要组成部分,用于配置SQL映射,为开发人员提供代码提示和智能感知功能,提高开发效率。 首先,我们要理解MyBatis XML提示文件的作用。这个文件通常以`.xml`为扩展名,例如`Mapper.xml`...

    mybatis xml文件自动生成

    "mybatis xml文件自动生成"是开发过程中的一个重要环节,它可以帮助开发者提高效率,减少手动编写XML映射文件和对应的POJO(Plain Old Java Object)类的工作量。 MyBatis的Mapper文件是其核心组成部分之一,它包含...

    mybatis生成映射文件和xml文件所需jar包

    在Maven项目中使用MyBatis时,我们需要依赖一些核心库,包括处理XML映射文件和数据库连接的jar包。在你提到的场景中,我们重点关注的是"mybatis生成映射文件和xml文件"的过程,这通常涉及到逆向工程(Reverse ...

    mybatis xml添加提示

    在使用MyBatis框架进行开发时,XML映射文件是不可或缺的一部分,它负责定义SQL语句、参数映射以及结果集映射等。然而,在实际操作中,由于XML配置文件的特殊性,开发者可能会遇到没有代码提示的问题,这无疑增加了...

    mybatis配置xml最新dtd文件

    这些文件定义了MyBatis配置文件(mybatis-3-config.xml)和映射文件(mapper.xml)的元素、属性和它们的顺序。 首先,`mybatis-3-config.dtd`是MyBatis配置文件的DTD。它定义了如下的主要元素: 1. `...

    MyBatis自动生成配置文件全解.zip

    在实际的开发过程中,为了提高效率,MyBatis提供了一种自动化工具,可以帮助开发者生成配置文件,包括Mapper接口、XML映射文件、实体类等。这个压缩包文件“MyBatis自动生成配置文件全解.zip”显然包含了关于如何...

    基于MyBatis XML配置方法(全面了解)

    MyBatis的配置文件包含了多个元素,包括settings、properties、typeAliases、typeHandlers、objectFactory、plugins、environments、environment、transactionManager、dataSource、databaseIdProvider和mappers等。...

    关于MyBatis找不到映射文件的问题

    在MyBatis的核心配置文件mybatis-config.xml中,我们需要使用元素来指定映射文件的位置。例如:&lt;mappers&gt; &lt;mapper resource="mapper/UserMapper.xml" /&gt; 二、找不到映射文件的问题 然而,在某些情况下,即使我们...

    Mybatis XML配置信息说明

    总之,Mybatis的XML配置文件是其强大功能的基础,它不仅提供了数据库连接、事务管理等基础设置,还允许开发者通过XML映射文件实现SQL与Java对象的灵活绑定。通过深入理解并熟练掌握这些配置,可以更高效地利用...

    mybatis导出xml文件(只支持mysql数据库)

    XML映射文件是MyBatis的核心组成部分,它们包含了SQL语句、参数类型和返回结果的配置。 描述中的"个人原创,如有不足,欢迎站内M"表明这是一个由个人开发的工具或者插件,用于帮助开发者从MySQL数据库中导出对应的...

    mybatis映射文件xml+bean+dao自动构建

    - **Mapper XML文件生成**:为每个DAO接口生成对应的XML映射文件,包含SQL语句和结果映射配置。 - **Service层代码生成**:虽然没有直接提及,但通常这类工具也会提供生成Service层代码的选项,以便于实现业务逻辑。...

    Mybatis关联映射Demo

    在实际使用中,我们需要配置Mybatis的全局配置文件`mybatis-config.xml`,指定日志工厂、数据库连接等信息。然后,在实体类中定义相应的属性,例如`@OneToOne`, `@OneToMany`, `@ManyToMany`注解,与XML映射文件中的...

    mybatis 注解+配置文件方式完整例子

    同时,MyBatis还支持使用XML映射文件来定义SQL语句。在`UserMapper.xml`文件中,我们可以这样写: ```xml SELECT * FROM user WHERE id = #{id} INSERT INTO user(username, password) VALUES (#{...

    mybatis映射文件自动生成工具

    MyBatis映射文件自动生成工具是一款高效实用的开发辅助软件,主要针对MyBatis框架下的XML映射文件编写工作。这款工具极大地提高了开发效率,减少了手动编写XML映射文件的繁琐过程。通过在`generator.xml`配置文件中...

    Mybatis主配置文件、附配置文件、实体类、sql生成工具

    Mybatis通过注解或XML映射文件将实体类与数据库表关联,实现ORM(对象关系映射)。实体类的创建遵循JavaBean规范,包含getter和setter方法。 **四、SQL生成工具(Mybatis Generator)** Mybatis Generator是一个...

    MyBatis-2 全局配置文件

    在MyBatis中,全局配置文件(通常命名为`mybatis-config.xml`)扮演着核心角色,它为整个MyBatis框架提供了基础设置,定义了数据库连接、事务管理、类型别名、对象工厂等关键信息。接下来,我们将深入探讨这个全局...

    Mybatis-generator 生成Mybatis配置文件

    【Mybatis-generator 生成Mybatis配置文件】 Mybatis Generator 是一款强大的工具,它能够自动根据数据库表结构生成MyBatis的映射文件、实体类以及Mapper接口,极大地提高了开发效率。在项目开发过程中,手动编写...

    MyBatis+MySQL本地自动生成映射类和XML文件

    2. **XML映射文件**:MyBatis的XML映射文件是SQL查询的载体,它包含了SQL语句、参数类型、结果映射等信息。每个Mapper接口通常会有一个对应的XML文件,文件中定义了接口方法的具体实现,即SQL语句。 3. **自动生成...

    mybatis入门实例(xml)

    综上所述,MyBatis 的 XML 配置文件是实现 SQL 映射和 Java 代码解耦的关键。通过定义映射文件,我们可以方便地管理数据库操作,提高代码的可读性和可维护性。在 "mybatis_test01" 这个例子中,你可以进一步学习如何...

Global site tag (gtag.js) - Google Analytics