Mybatis全局配置
Mybatis基本介绍
- MyBatis 概述
- MyBatis 是一个基于 Java 的持久层框架,它封装了 JDBC 操作,简化了数据库交互。MyBatis 通过 XML 或注解配置 SQL 映射,将 Java 对象与数据库记录关联,支持定制化 SQL、存储过程和高级映射。
- MyBatis 的核心组件
- SqlSessionFactory:创建 SqlSession 的工厂类,线程安全。
- SqlSession:执行 SQL 命令、获取映射器和管理事务的接口,非线程安全。
- Mapper:定义 SQL 操作的接口,MyBatis 通过动态代理实现。
- MyBatis 的工作流程
- 配置 MyBatis:通过 XML 或 Java 配置数据源和 SQL 映射。
- 创建 SqlSessionFactory:加载配置文件,创建 SqlSessionFactory。
- 获取 SqlSession:通过 SqlSessionFactory 创建 SqlSession。
- 执行 SQL:通过 SqlSession 或 Mapper 接口执行 SQL。
- 关闭 SqlSession:操作完成后关闭 SqlSession。
导入依赖
-
需要导入mysql和mybatis的相关依赖
<!--mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> <!-- Mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency>
全局配置文件
-
mybatis-config.xml:全局配置文件,用于配置数据源、事务管理器、类型处理器、插件等
-
全局配置文件是 MyBatis 启动时加载的第一个文件,它为整个应用程序提供了基础的配置支持
-
MyBatis 的全局配置文件是一个 XML 文件,其基本结构如下
<configuration>:根元素,包含所有配置项。- DTD 声明:指定了 MyBatis 配置文件的文档类型定义(DTD),用于验证 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> <!-- 配置内容 --> </configuration> -
属性配置(
) -
用于定义外部属性文件或直接定义属性,可以在配置文件中通过
${}引用 -
resource:指定外部属性文件的路径(如db.properties)。 -
<property>:直接定义属性<properties resource="db.properties"> <property name="username" value="root"/> </properties>
-
-
设置配置(
) -
用于配置 MyBatis 的全局行为,例如缓存、懒加载、日志等
-
cacheEnabled:是否启用二级缓存。-
一级缓存(Local Cache):默认开启,作用于 SqlSession 级别。
- 一级缓存是 SqlSession 级别的缓存,同一个 SqlSession 中执行的相同查询会被缓存
- 一级缓存的生命周期与 SqlSession 一致。当 SqlSession 关闭或清空时,缓存会被清除
- 当 SqlSession 关闭时,一级缓存会被清空
- 当执行
INSERT、UPDATE、DELETE操作时,一级缓存会被清空
-
二级缓存(Global Cache):需要手动配置,作用于 Mapper 级别(跨 SqlSession)
- 二级缓存是 Mapper 级别的缓存,多个 SqlSession 共享同一个缓存
- 二级缓存的生命周期与应用程序一致,只有当缓存被显式清除或配置的缓存策略失效时,缓存才会被清除
- 当执行
INSERT、UPDATE、DELETE操作时,二级缓存会被清空
-
-
lazyLoadingEnabled:是否启用懒加载。- MyBatis 的懒加载功能默认是关闭的,需要在配置文件中启用
- 懒加载的核心思想是 按需加载。当查询一个对象时,MyBatis 不会立即加载其关联对象的数据,而是在首次访问关联对象时才执行查询
- 假设有两个表:
user表和order表,一个用户可以有多个订单。如果查询用户信息时立即加载所有订单数据,可能会导致性能问题(尤其是订单数据量很大时)。通过懒加载,只有在访问用户的订单数据时才会执行订单查询
-
logImpl:指定日志实现(如 SLF4J、LOG4J 等)<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="logImpl" value="SLF4J"/> </settings>
-
-
类型别名配置(
) -
为 Java 类型设置别名,简化映射文件中的类型引用
-
<typeAlias>:为单个类设置别名。 -
<package>:为指定包下的所有类设置别名(默认别名为类名的小写形式)<typeAliases> <typeAlias alias="User" type="com.example.model.User"/> <package name="com.example.model"/> </typeAliases>
-
-
类型处理器配置(
) -
用于自定义类型处理器,处理 Java 类型与数据库类型之间的转换
-
<typeHandler>:指定自定义的类型处理器<typeHandlers> <typeHandler handler="com.example.MyTypeHandler"/> </typeHandlers>
-
-
插件配置(
) -
用于配置 MyBatis 插件(拦截器),可以在 SQL 执行前后插入自定义逻辑
-
<plugin>:指定插件类<plugins> <plugin interceptor="com.example.MyPlugin"/> </plugins>
-
-
环境配置(
) -
用于配置 MyBatis 的运行环境,包括数据源和事务管理器
-
default:指定默认的环境 ID。 -
<environment>:定义一个环境,包含事务管理器和数据源。transactionManager:事务管理器类型(如JDBC或MANAGED)。dataSource:数据源类型(如POOLED、UNPOOLED或JNDI)。
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <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>
-
-
映射器配置(
) -
用于指定 MyBatis 的映射文件或映射接口
-
<mapper resource>:指定 XML 映射文件的路径。 -
<mapper class>:指定映射接口的类。 -
<package>:指定包含映射接口的包<mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> <mapper class="com.example.mapper.UserMapper"/> <package name="com.example.mapper"/> </mappers>
-
加载全局配置文件
-
在 Java 代码中,可以通过
SqlSessionFactoryBuilder加载全局配置文件String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
完整示例:
<?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>
<!-- 加载外部属性文件 -->
<properties resource="db.properties"/>
<!-- 全局设置 -->
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="logImpl" value="SLF4J"/>
</settings>
<!-- 类型别名 -->
<typeAliases>
<typeAlias alias="User" type="com.example.model.User"/>
<package name="com.example.model"/>
</typeAliases>
<!-- 类型处理器 -->
<typeHandlers>
<typeHandler handler="com.example.MyTypeHandler"/>
</typeHandlers>
<!-- 插件 -->
<plugins>
<plugin interceptor="com.example.MyPlugin"/>
</plugins>
<!-- 环境配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<!-- 映射器配置 -->
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
<mapper class="com.example.mapper.UserMapper"/>
<package name="com.example.mapper"/>
</mappers>
</configuration>

浙公网安备 33010602011771号