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 关闭时,一级缓存会被清空
        • 当执行 INSERTUPDATEDELETE 操作时,一级缓存会被清空
      • 二级缓存(Global Cache):需要手动配置,作用于 Mapper 级别(跨 SqlSession)

        • 二级缓存是 Mapper 级别的缓存,多个 SqlSession 共享同一个缓存
        • 二级缓存的生命周期与应用程序一致,只有当缓存被显式清除或配置的缓存策略失效时,缓存才会被清除
        • 当执行 INSERTUPDATEDELETE 操作时,二级缓存会被清空
    • 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:事务管理器类型(如 JDBCMANAGED)。
      • dataSource:数据源类型(如 POOLEDUNPOOLEDJNDI)。
      <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>
posted @ 2025-03-17 21:53  QAQ001  阅读(42)  评论(0)    收藏  举报