欢迎来到电脑知识学习网,专业的电脑知识大全学习平台!

手机版

mybatis配置文件详解(mybatis快速入门教程)

软件应用 发布时间:2021-10-07 16:50:31

接下来将学习 MyBatis 配置文件,MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。


mybatis配置文件详解(mybatis快速入门教程)(1)



一、MyBatis 配置文件概览

如下是一个典型MyBatis配置文件(mybatis-config.xml):

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- 1、属性:例如jdbc.properties -->

<properties resource="jdbc.properties"></properties>

<!-- 2、设置:定义全局性设置,例如开启二级缓存 -->

<settings>

<setting name="cacheEnabled" value="true"/>

</settings>

<!-- 3、类型名称:为一些类定义别名 -->

<typeAliases>

<typeAlias type="com.rickie.po.User" alias="user"></typeAlias>

</typeAliases>

<!-- 4、类型处理器:定义Java类型与数据库中的数据类型之间的转换关系 -->

<typeHandlers></typeHandlers>

<!-- 5、对象工厂 -->

<objectFactory type=""></objectFactory>

<!-- 6、插件:mybatis的插件,支持自定义插件 -->

<plugins>

<plugin interceptor=""></plugin>

</plugins>

<!-- 7、环境:配置mybatis的环境 -->

<environments default="development">

<!-- 环境变量:支持多套环境变量,例如开发环境、生产环境 -->

<environment id="development">

<!-- 事务管理器:默认JDBC -->

<transactionManager type="JDBC" />

<!-- 数据源:使用连接池,并加载mysql驱动连接数据库 -->

<dataSource type="POOLED">

<property name="driver" value="com.mysql.cj.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />

<property name="username" value="root" />

<property name="password" value="123456" />

</dataSource>

</environment>

</environments>

<!-- 8、数据库厂商标识 -->

<databaseIdProvider type=""></databaseIdProvider>

<!-- 9、映射器:指定映射文件或者映射类 -->

<mappers>

<mapper resource="UserMapper.xml" />

</mappers>

</configuration>

必须注意:MyBatis 配置文件的属性位置顺序是 固定 的,不允许颠倒顺序,否则 MyBatis 在解析 XML 文件的时候就会抛出异常,这个与 MyBatis 框架启动加载配置信息顺序有关。

下面这张图比较清晰地描述了MyBatis配置文件中的配置项:

mybatis配置文件详解(mybatis快速入门教程)(2)

我们的核心配置文件 configuration(配置)作为最顶级节点,其余 9 大属性都必须嵌套在其内,对于内部 9 大节点,我们逐一讲解。


mybatis配置文件详解(mybatis快速入门教程)(3)

专栏

SkyWalking分布式链路追踪和监控

作者:软件架构

19.8币

109人已购

查看



二、properties(属性)

属性标签,显而易见就是提供属性配置,可进行动态替换,一般可以在 Java 属性文件中配置,例如 jdbc.properties 配置文件 ,或通过 properties 元素标签中的子元素 property 来指定配置。

举例我们需要配置数据源信息,采用 property 标签可以这样配置:

<properties>

<property name="driver" value="com.mysql.jdbc.Driver"/>

<property name="url" value="jdbc:mysql://127.0.0.1:3306/myDB"/>

<property name="username" value="user1"/>

<property name="password" value="123456"/>

</properties>

设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值。比如:

<dataSource type="POOLED">

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

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

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

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

</dataSource>


mybatis配置文件详解(mybatis快速入门教程)(4)

软件架构-知识星球

圈主:软件架构

45成员

进入圈子



三、settings(设置)

settings 标签元素,是 MyBatis 中极为重要的调整设置,它们会动态改变 MyBatis 的运行时行为,这些配置就像 MyBatis 内置的许多功能,当你需要使用时可以根据需要灵活调整,并且 settings 能配置的东西特别多,我们先来一起看看,一个完整的属性配置示例:

<settings>

<setting name="cacheEnabled" value="true"/>

<setting name="lazyLoadingEnabled" value="true"/>

<setting name="multipleResultSetsEnabled" value="true"/>

<setting name="useColumnLabel" value="true"/>

<setting name="useGeneratedKeys" value="false"/>

<setting name="autoMappingBehavior" value="PARTIAL"/>

<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>

<setting name="defaultExecutorType" value="SIMPLE"/>

<setting name="defaultStatementTimeout" value="25"/>

<setting name="defaultFetchSize" value="100"/>

<setting name="safeRowBoundsEnabled" value="false"/>

<setting name="mapUnderscoreToCamelCase" value="false"/>

<setting name="localCacheScope" value="SESSION"/>

<setting name="jdbcTypeForNull" value="OTHER"/>

<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>

<... more .../>

</settings>

settings 支持了特别多功能支持,其实常规开发中使用到的属性项不会特别多,除非项目有特殊要求,所以建议大家把这些设置当做字典即可,不必详记每一个属性使用,需要时翻阅研读。

四、typeAliases(类型别名)

类型别名可以给 Java 类型设置一个简称。 它仅用于 XML 配置,意在降低冗余的全限定类名书写,因为书写类的全限定名太长了,我们希望有一个简称来指代它。类型别名在 Mybatis 中分为 系统内置 和 用户自定义 两类,Mybatis 会在解析配置文件时把 typeAliases 实例存储进入 Configuration 对象中,需要使用时直接获取。

一般我们可以自定义别名,例如:

<typeAliases>

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

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

</typeAliases>

像这样配置时,我们就可以在任何需要使用 domain.blog.Author 的地方,直接使用别名 author 。

五、typeHandlers(类型处理器)

MyBatis 在设置预处理 SQL 语句(PreparedStatement)中所需要的 参数 或从 结果集 ResultSet 中获取对象时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。

mybatis配置文件详解(mybatis快速入门教程)(5)

类型处理器,主要用于处理 Java 类型与 JDBC 类型的映射匹配关系处理。

六、objectFactory(对象工厂)

每次 MyBatis 创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成实例化工作。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认无参构造方法,要么通过存在的参数映射来调用带有参数的构造方法。 如果想覆盖对象工厂的默认行为,可以通过创建自己的对象工厂来实现。

正常情况下我们不需要使用到,或者说不建议使用。

七、plugins(插件)

MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。

八、environments(环境配置)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境

所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。

environments元素定义了如何配置环境:

<environments default="development">

<environment id="development">

<transactionManager type="JDBC">

<property name="..." value="..."/>

</transactionManager>

<dataSource type="POOLED">

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

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

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

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

</dataSource>

</environment>

</environments>

(1)事务管理器(transactionManager)

在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]”)。

如果你正在使用 Spring MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

(2)数据源(dataSource)

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

九、databaseIdProvider(数据库厂商标识)

MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载带有匹配当前数据库 databaseId 属性和所有不带 databaseId 属性的语句。 如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。 为支持多厂商特性,只要像下面这样在 mybatis-config.xml 文件中加入 databaseIdProvider 即可:

<databaseIdProvider type="DB_VENDOR" />

十、mappers(映射器)

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。

<!-- 使用相对于类路径的资源引用 -->

<mappers>

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

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

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

</mappers>

<!-- 使用完全限定资源定位符(URL) -->

<mappers>

<mapper url="file:///var/mappers/AuthorMapper.xml"/>

<mapper url="file:///var/mappers/BlogMapper.xml"/>

<mapper url="file:///var/mappers/PostMapper.xml"/>

</mappers>

<!-- 使用映射器接口实现类的完全限定类名 -->

<mappers>

<mapper class="org.mybatis.builder.AuthorMapper"/>

<mapper class="org.mybatis.builder.BlogMapper"/>

<mapper class="org.mybatis.builder.PostMapper"/>

</mappers>

<!-- 将包内的映射器接口实现全部注册为映射器 -->

<mappers>

<package name="org.mybatis.builder"/>

</mappers>





责任编辑:电脑知识学习网

软件应用