目录
1、核心配置文件的作用
-
数据库连接配置:配置数据源信息,包括数据库驱动、连接 URL、用户名和密码等。这些信息用于建立数据库连接,使得 MyBatis 能够与数据库交互。
-
类型处理器配置:指定 Java 类型与数据库类型之间的映射关系,以及如何将数据库结果集中的数据转换为 Java 对象,或者将 Java 对象的属性映射到 SQL 语句中的参数。
-
对象工厂配置:配置 MyBatis 如何创建和管理对象实例,例如通过指定自定义的对象工厂来创建对象。
-
插件配置:允许用户定义和配置自定义插件,用于拦截 MyBatis 的执行过程,实现一些额外的功能,例如性能监控、日志记录等。
-
缓存配置:配置 MyBatis 的缓存机制,包括一级缓存和二级缓存,以及相关的缓存策略和属性。
-
其他全局设置:包括是否启用延迟加载、是否自动映射结果集等全局设置。
2、配置结构图
3、常用元素
1、<configuration>(配置)
<configuration>
标签是 MyBatis 配置文件(通常是 mybatis-config.xml
)的根元素,它定义了 MyBatis 的全局配置。在核心配置文件中,<configuration>
的子元素必须按照上图的顺序进行配置,否则mybatis解析xml文件会报错。
<configuration>
<!-- 环境配置 -->
<!-- 加载类路径下的属性文件 -->
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 数据库连接相关配置 ,db.properties文件中的内容-->
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!--设置配置映射文件的位置-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
2、<properties>(属性)
<properties>
元素用于定义属性,并且可以在配置文件的其他地方引用这些属性。这个功能允许你在配置文件中定义一些可重复使用的值,以便在多个地方使用相同的值,或者以一种更灵活的方式配置一些属性。举例来说,可以将数据库连接信息、文件路径、常量值等定义为属性,在配置文件的其他地方引用这些属性,使得配置更加灵活、可维护,并且能够适应不同的环境。
具体用法
-
定义属性值:你可以在
<properties>
元素中定义各种属性,并为这些属性指定相应的值。 -
引用属性值:在配置文件的其他部分,你可以使用
${}
语法来引用之前定义的属性值。这样可以使配置文件更加简洁、可读,并且方便维护。 -
动态配置:属性值可以是动态的,也就是说它们可以根据环境或其他条件而变化。这使得配置文件更加灵活,能够适应不同的运行环境。
-
加密:有时候,敏感信息(如密码)可能需要加密存储。你可以使用
<properties>
元素引用加密的属性值,以增加安全性。
<!-- 引入外部属性文件 jdbc.properties -->
<properties resource="jdbc.properties">
environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 数据库连接相关配置 ,db.properties文件中的内容-->
<dataSource type="POOLED">
<!-- 设置数据库驱动,使用了动态属性 ${mysql.driver}-->
<property name="driver" value="${mysql.driver}"/>
<!-- 设置数据库连接 URL,使用动态属性 ${mysql.url} -->
<property name="url" value="${mysql.url}"/>
<!-- 设置数据库用户名,使用了动态属性 ${mysql.username}-->
<property name="username" value="${mysql.username}"/>
<!-- 设置数据库密码,使用了动态属性 ${mysql.password} -->
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
</properties>
对应的jdbc.properties文件
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8
mysql.username=root
mysql.password=123456
<dataSoure>元素中连接数据库的4个属性值将会由db.properties文件中对应的值来动态替换。这样,<properties>元素就能通过db.properties文件实现动态参数配置。
3、<settings>(设置)
<setting>
元素用于配置 MyBatis 的各种全局设置。它可以用来控制 MyBatis 的行为,影响 SQL 执行、结果映射、缓存等方面的表现。<setting>
元素通常包含在 <configuration>
元素内部。
具体用法
-
配置全局设置:可以通过设置各种属性来影响 MyBatis 的全局行为。例如,可以通过设置
mapUnderscoreToCamelCase
来开启或关闭自动将数据库列名下划线分隔符转换为驼峰命名的功能。 -
控制缓存:可以配置缓存的行为,例如设置是否开启本地缓存或二级缓存、缓存的失效策略等。
-
配置语句执行相关的行为:可以设置一些和语句执行相关的选项,例如设置是否启用延迟加载、是否开启懒加载、批处理的大小等。
-
调整日志级别:可以设置 MyBatis 的日志级别,以控制日志输出的详细程度。
-
其他全局设置:可以根据需求设置其他全局性的选项,以满足特定的应用场景和性能需求。
<!-- 将数据库列名下划线分隔符转换为驼峰命名 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 开启缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 开启懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 设置日志实现为标准输出 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
4、<typeAliases>(类型别名)
<typeAliases>
是 MyBatis 配置文件中的一个元素,用于配置类型别名。它允许你为 Java 类型指定别名,以便在 MyBatis 映射文件中使用这些别名而不必每次都使用完整的类名。它仅用于 XML 配置,意在降低冗余的全限定类名书写。
具体作用
-
简化映射文件:通过配置类型别名,可以简化 MyBatis 映射文件中的配置,使得配置更加简洁、易读。
-
提高可维护性:使用类型别名可以使代码更易于维护和修改,因为你只需要在一个地方定义别名,而不必在多个地方使用完整的类名。
-
提高可移植性:如果你的应用程序需要在不同的环境中运行,可能会涉及到不同的类包名,使用类型别名可以使代码更具可移植性,因为你只需在配置文件中修改别名即可,而不必修改代码。
<typeAliases>
<!-- 将 com.example.User 类型指定为别名 "User" -->
<typeAlias type="com.example.User" alias="User"/>
</typeAliases>
5、<typeHandlers>(类型处理器)
<typeHandlers>
是 MyBatis 配置文件中的一个元素,用于配置自定义类型处理器(Type Handlers)。Type Handlers 用于处理 Java 对象与数据库之间的数据类型转换,允许你指定如何将数据库中的数据类型映射到 Java 类型,并且可以自定义转换逻辑。定义了三个类型处理器的映射关系:一个自定义类型处理器用于处理枚举类型转换,一个默认的类型处理器,以及一个用于处理数据库中的整型与 Java 中的布尔类型之间转换的类型处理器。
具体作用
-
注册自定义类型处理器:通过
<typeHandlers>
元素,你可以注册自定义的类型处理器,用于处理特定类型之间的转换。例如,你可以注册一个将数据库中的字符串类型与 Java 中的枚举类型进行转换的类型处理器。 -
指定默认类型处理器:可以在
<typeHandlers>
元素中指定默认的类型处理器,用于处理没有显式注册的类型转换。默认情况下,MyBatis 提供了一些内置的类型处理器,但是你也可以指定自定义的默认类型处理器。 -
覆盖默认类型处理器:有时候,你可能希望覆盖 MyBatis 默认提供的类型处理器,以满足特定需求或优化性能。通过在
<typeHandlers>
元素中显式地注册类型处理器,可以覆盖默认的类型处理器。
<typeHandlers>
<!-- 注册自定义的类型处理器 -->
<typeHandler handler="com.example.MyEnumTypeHandler" javaType="com.example.MyEnum"/>
<!-- 指定默认的类型处理器 -->
<typeHandler handler="com.example.MyDefaultTypeHandler"/>
<!--
覆盖默认的类型处理器,使用自定义的类型处理器,
用于处理数据库中的 INTEGER 类型与 Java 中的 Boolean 类型之间的转换
-->
<typeHandler handler="com.example.MyBooleanTypeHandler" jdbcType="INTEGER" javaType="boolean"/>
</typeHandlers>
6、<objectFactory>(对象工厂)
<objectFactory>
元素用于配置 MyBatis 在创建结果对象时所使用的对象工厂(Object Factory)。对象工厂负责实例化结果对象,可以自定义对象的创建过程,从而实现一些定制化的对象创建逻辑。
具体作用
-
自定义对象实例化逻辑:通过配置
<objectFactory>
元素,可以指定自定义的对象工厂,从而控制结果对象的创建过程。这使得你可以在对象创建时进行一些额外的逻辑处理,例如使用依赖注入框架创建对象、应用特定的构造函数等。 -
解耦对象创建逻辑:将对象创建逻辑抽象到对象工厂中,可以使得业务代码与对象创建过程解耦,提高代码的可维护性和可测试性。
-
控制对象的作用域:对象工厂可以控制对象的作用域,例如使用单例模式创建对象,确保在同一个会话中重复使用相同的对象实例。
<!--指定了一个自定义的对象工厂类 com.example.MyObjectFactory-->
<objectFactory type="com.example.MyObjectFactory"/>
7、<plugins>(插件)
<plugins>
元素用于配置 MyBatis 的插件(Plugins)。插件是一种机制,允许你在 MyBatis 的执行过程中拦截并修改其行为。通过插件,你可以在执行 SQL 语句、映射结果、缓存处理等环节介入,以实现一些自定义的功能或者性能优化。
具体作用
-
拦截并修改 MyBatis 的执行过程:通过插件,你可以拦截 MyBatis 在执行 SQL 语句、映射结果、处理缓存等方面的执行过程,并在其中注入自定义的逻辑。这使得你可以在 MyBatis 的执行过程中灵活地加入一些功能或者修改行为。
-
实现自定义功能:你可以使用插件来实现一些自定义的功能,例如性能监控、日志记录、权限控制等。
-
优化性能:插件也可以用于优化 MyBatis 的性能,例如对 SQL 语句进行优化、缓存处理等。
<plugins>
<!-- 注册自定义插件 -->
<plugin interceptor="com.example.MyInterceptor"/>
</plugins>
8、<environments>(环境配置)
<environments>
元素用于配置 MyBatis 的环境。在 MyBatis 中,一个环境代表了一个数据库连接环境,它包含了一个或多个数据源以及相应的事务管理器。Mybatis可以通过<environment>定义运行环境,如开发环境、测试环境、生产环境等,可以灵活选择不同配置,从而将SQL映射到不同运行环境的数据库中。
具体作用
-
配置数据源:通过
<environments>
元素,你可以配置一个或多个数据源,指定数据库的连接信息、连接池等相关配置。 -
配置事务管理器:每个环境都关联一个事务管理器,用于管理数据库事务。你可以配置不同的事务管理器,以满足不同数据库的事务处理需求,例如 JDBC 的事务管理器、JTA 的事务管理器等。
-
指定默认环境:可以在
<environments>
元素中指定默认的环境,以确保 MyBatis 在没有明确指定环境的情况下使用默认的数据库连接环境。
(1)<environment>(环境变量)
<environment>
元素是 MyBatis 配置文件中的一个子元素,用于定义一个数据库连接环境。在一个 <environments>
元素中可以包含多个 <environment>
元素,每个 <environment>
元素代表一个数据库连接环境。
具体作用
-
配置数据源:
<environment>
元素内部可以配置一个数据源(DataSource),用于与数据库建立连接。数据源包括连接数据库所需的信息,比如数据库 URL、用户名、密码等。 -
配置事务管理器:每个
<environment>
元素可以关联一个事务管理器(Transaction Manager),用于管理数据库操作的事务。事务管理器负责开启、提交或回滚事务。 -
定义环境标识符:通过
id
属性,可以为每个<environment>
元素定义一个唯一的标识符,以便在其他地方引用这个环境。
①<transactionManager>(事务管理器)
<transactionManager>
元素用于配置 MyBatis 在指定数据库环境中的事务管理器。在 MyBatis 中,事务管理器负责管理数据库连接的事务,包括事务的开启、提交、回滚等操作。
具体作用
-
指定事务管理器类型:可以通过
type
属性指定要使用的事务管理器的类型。MyBatis 支持多种事务管理器类型,包括 JDBC、MANAGED 等。
- JDBC:该配置直接使用jdbc的提交和回滚设置,它依赖于从数据库得到的连接来管理事务的作用域。
- MANAGED:该配置不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。默认情况下,它会关闭连接,但可以设置<transcationManager>元素的closeConnection属性为false来阻止它的默认关闭行为。
-
配置事务管理器的其他属性:根据所选的事务管理器类型,可以配置其他相关的属性。例如,对于 JDBC 事务管理器,可能需要配置数据源和事务隔离级别等信息。
②<dataSource>(数据源)
<dataSource>
元素用于配置 MyBatis 数据源,即数据库连接池,它定义了 MyBatis 与数据库之间的连接信息。
具体作用
-
指定数据源类型:通过
type
属性指定要使用的数据源类型,MyBatis 支持多种数据源类型,包括 POOLED、UNPOOLED 等。
- POOLED:表示使用连接池(Pooled)的方式管理数据库连接。当配置
<dataSource type="POOLED">
时,MyBatis 将使用连接池来管理数据库连接,节省了在创建新的连接对象时需要初始化和认证时间。 - UNPOOLED:表示非连接池(Unpooled)数据源。当配置
<dataSource type="UNPOOLED">
时,MyBatis 将使用非连接池的方式管理数据库连接,程序在每次被请求的时候会打开和关闭数据库连接,适用于对性能要求不高的简单应用程序。
-
配置数据源属性:根据所选的数据源类型,可以配置相应的数据源属性。例如,对于 POOLED 数据源类型,可能需要配置数据库驱动类名、连接 URL、用户名、密码等属性。
<!--默认采用的数据库环境为development-->
<environments default="development">
<!-- 定义名为 "development" 的数据库连接环境,配置单个数据库环境 -->
<!--id设置了当前数据库配置环境的唯一标识-->
<environment id="development">
<!-- 配置 JDBC 类型的事务管理器 -->
<transactionManager type="JDBC"/>
<!-- 配置 POOLED 类型的数据源,从外部属性文件中读取数据库连接信息 -->
<dataSource type="POOLED">
<!-- 引入外部属性文件中的数据库连接信息 -->
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
9、<mappers>(映射器)
<mappers>
元素用于配置 MyBatis 的映射器(mappers),指定 MyBatis 映射器文件的位置或者指定映射器接口的位置。映射器是 MyBatis 中用于定义 SQL 语句与 Java 方法之间映射关系的组件,它通常包含了 SQL 语句的定义以及与之对应的 Java 方法。
具体作用
-
指定映射器文件:可以通过
<mappers>
元素指定一个或多个 XML 格式的映射器文件。这些映射器文件包含了 SQL 语句的定义以及相应的 Java 方法。 -
指定映射器接口:除了指定 XML 文件外,还可以通过
<mappers>
元素指定一个或多个映射器接口的位置。MyBatis 会根据这些接口来动态生成相应的 SQL 语句。
<mappers>
<!-- 指定 XML 格式的映射器文件 ,相对路径-->
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
指定接口interface
假设有一个 User 表,包含 id、username 和 email 字段,你可以定义一个对应的 UserMapper 接口来操作这个表:
public interface UserMapper {
// 根据 id 查询用户
User getUserById(int id);
// 插入新用户
void insertUser(User user);
// 更新用户信息
void updateUser(User user);
// 删除用户
void deleteUser(int id);
}
在 XML 映射文件中,你需要为每个接口方法定义对应的 SQL 语句。例如,对应上面接口中的方法,你可以在 XML 映射文件中定义如下 SQL 语句:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM User WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO User (username, email) VALUES (#{username}, #{email})
</insert>
<update id="updateUser" parameterType="User">
UPDATE User SET username = #{username}, email = #{email} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM User WHERE id = #{id}
</delete>
</mapper>
<mappers>
<!-- 指定映射器接口 -->
<!-- 1.映射文件的位置必须反正和接口的同包目录下
2.映射文件名必须和接口同名
-->
<mapper class="com.example.mapper.UserMapper"/>
</mappers>
接口实现全注册
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="com.example.mapper"/>
</mappers>
具体可查看官网解析