MyBatis 的核心配置文件是干什么的? 它的结构是怎样的? 哪些是必须配置的,哪些是可选的?

news2025/3/13 21:36:41

MyBatis 的核心配置文件(通常命名为 mybatis-config.xml)是 MyBatis 应用程序的入口点,它定义了 MyBatis 的全局配置信息 。

核心配置文件的作用:

  1. 配置 MyBatis 的运行时行为: 通过 <settings> 标签设置全局参数,控制 MyBatis 的各种行为,例如是否开启缓存、是否使用延迟加载、是否自动映射等。
  2. 配置数据源和事务管理器: 通过 <environments> 标签配置数据库连接信息和事务管理方式。
  3. 注册类型别名: 通过 <typeAliases> 标签为 Java 类型定义别名,简化 XML 映射文件中的类型引用。
  4. 注册类型处理器: 通过 <typeHandlers> 标签注册自定义的类型处理器,处理 Java 类型与 JDBC 类型之间的转换。
  5. 注册对象工厂: 通过 <objectFactory> 标签注册自定义的对象工厂,用于创建结果对象。
  6. 注册插件: 通过 <plugins> 标签注册插件,拦截 MyBatis 的核心执行流程。
  7. 加载映射器: 通过 <mappers> 标签加载 SQL 映射文件或 Mapper 接口,将 SQL 语句与 Java 代码关联起来。

核心配置文件的结构 (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>

  <!-- 属性配置 (可选) -->
  <properties resource="db.properties"/>

  <!-- 全局设置 (可选) -->
  <settings>
    <setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="false"/>
    <!-- 其他设置 -->
  </settings>

  <!-- 类型别名 (可选) -->
  <typeAliases>
    <typeAlias alias="User" type="com.example.model.User"/>
    <!-- 或者使用包扫描 -->
    <!-- <package name="com.example.model"/> -->
  </typeAliases>

  <!-- 类型处理器 (可选) -->
  <typeHandlers>
    <typeHandler handler="com.example.MyTypeHandler"/>
    <!-- 或者使用包扫描 -->
    <!-- <package name="com.example.typehandler"/> -->
  </typeHandlers>
    
    <!-- 对象工厂(可选) -->
    <objectFactory type="com.example.MyObjectFactory"/>

  <!-- 插件 (可选) -->
  <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>
  
  <!-- 数据库厂商标识(可选)-->
  <databaseIdProvider type="DB_VENDOR">
      <property name="SQL Server" value="sqlserver"/>
      <property name="MySQL" value="mysql"/>
      <property name="Oracle" value="oracle" />
  </databaseIdProvider>

  <!-- 映射器 (必须) -->
  <mappers>
    <mapper resource="com/example/mapper/UserMapper.xml"/>
    <!-- 或者使用类路径 -->
    <!-- <mapper class="com.example.mapper.UserMapper"/> -->
    <!-- 或者使用包扫描 -->
    <!-- <package name="com.example.mapper"/> -->
  </mappers>

</configuration>

各部分配置详解:

  • <configuration>: 根元素,所有配置都包含在这个元素中。
  • <properties> (可选):
    • 用于加载外部属性文件(例如 db.properties),可以在配置文件中引用属性文件中的值。
    • resource 属性指定属性文件的路径。
    • 也可以直接在 <properties> 标签内部定义属性。
  • <settings> (可选):
    • 用于配置 MyBatis 的全局设置,控制 MyBatis 的运行时行为。
    • 常用的设置包括:
      • cacheEnabled: 是否开启二级缓存 (默认 true)。
      • lazyLoadingEnabled: 是否开启延迟加载 (默认 false)。
      • aggressiveLazyLoading: 是否开启积极的延迟加载 (默认 false,MyBatis 3.4.1 及之前版本默认为 true)。
      • multipleResultSetsEnabled: 是否允许单个语句返回多个结果集 (默认 true)。
      • useColumnLabel: 是否使用列标签代替列名 (默认 true)。
      • useGeneratedKeys: 是否允许 JDBC 支持自动生成主键 (默认 false)。
      • autoMappingBehavior: 自动映射的行为 (默认 PARTIAL,可选值:NONEPARTIALFULL)。
      • defaultExecutorType: 默认的执行器类型 (默认 SIMPLE,可选值:SIMPLEREUSEBATCH)。
      • mapUnderscoreToCamelCase: 是否开启驼峰命名自动映射 (默认 false)。
      • localCacheScope: 一级缓存的作用域(默认 SESSION,可选值 SESSIONSTATEMENT
      • jdbcTypeForNull: 当传入的参数为 null 时,使用的 JDBC 类型(默认OTHER,通常设置为 NULL)。
      • defaultStatementTimeout: 默认的语句超时时间(秒)。
  • <typeAliases> (可选):
    • 用于为 Java 类型定义别名,简化 XML 映射文件中的类型引用。
    • typeAlias 标签定义单个别名,package 标签扫描指定包下的所有类,并自动生成别名(类名首字母小写)。
  • <typeHandlers> (可选):
    • 用于注册自定义的类型处理器。
    • typeHandler 标签注册单个类型处理器,package 标签扫描指定包下的所有类型处理器。
  • <objectFactory> (可选):
    • 注册一个自定义对象工厂,MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。
  • <plugins> (可选):
    • 用于注册插件,拦截 MyBatis 的核心执行流程(例如,拦截 SQL 执行、参数设置、结果映射等)。
    • plugin 标签注册单个插件,interceptor 属性指定插件类的全限定名。
  • <environments> (必须):
    • 用于配置数据源和事务管理器。
    • default 属性指定默认的环境 ID。
    • <environment> 标签定义一个环境,id 属性是环境的唯一标识符。
    • <transactionManager> 标签配置事务管理器:
      • type="JDBC": 使用 JDBC 的事务管理机制(需要手动提交或回滚事务)。
      • type="MANAGED": 将事务管理委托给容器(例如 Spring 或 Java EE 容器)。
    • <dataSource> 标签配置数据源:
      • type="POOLED": 使用 MyBatis 内置的连接池。
      • type="UNPOOLED": 不使用连接池,每次都创建新的连接。
      • type="JNDI": 使用 JNDI 数据源。
      • <property> 标签配置数据源的属性,例如驱动类名、URL、用户名、密码等。
  • <databaseIdProvider>(可选):
    • MyBatis 可以根据不同的数据库厂商执行不同的 SQL 语句
  • <mappers> (必须):
    • 用于加载 SQL 映射文件或 Mapper 接口。
    • <mapper resource="..."/>: 加载 XML 映射文件。
    • <mapper class="..."/>: 加载 Mapper 接口(使用注解配置 SQL)。
    • <package name="..."/>: 扫描指定包下的所有 Mapper 接口或 XML 映射文件(XML 文件需要与 Mapper 接口在同一个包下,且文件名与接口名相同)。

必须配置的元素:

  • <environments>: 必须配置至少一个数据源环境,否则 MyBatis 无法连接数据库。
  • <mappers>: 必须加载至少一个 SQL 映射文件或 Mapper 接口,否则 MyBatis 无法执行 SQL 语句。

可选配置的元素:

  • <properties>
  • <settings>
  • <typeAliases>
  • <typeHandlers>
  • <objectFactory>
  • <plugins>
  • <databaseIdProvider>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Python+SQLite实现校园信息化统计平台

一、项目基本情况 概述 本项目以清华大学为预期用户&#xff0c;作为校内信息化统计平台进行服务&#xff0c;建立网页端和移动端校内信息化统计平台&#xff0c;基于Project_1的需求实现。 本项目能够满足校内学生团体的几类统计需求&#xff0c;如活动报名、实验室招募、多…

[多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现

标题&#xff1a;[多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现 水墨不写bug 文章目录 一、生产者消费者模型特点&#xff1a;二、实现2.1详细解释1. 成员变量2. 构造函数3. Isfull 和 Isempty4. Push 函数5. Pop 函数6. 析构函数7. GetSize 函数 三、总结与多线…

vue组件库el-menu导航菜单设置index,地址不会变更的问题

请先确认 1.路由已配置好 route-index.js如下&#xff0c; 2.view-ProHome.vue中已预留路由展示位 3.导航菜单复制组件库&#xff0c;并做修改 其中index与路由配置的地址一致 运行后发现点击菜单&#xff0c;url地址还是不变&#xff0c;查看组件库 Element - The worlds …

MySQL 优化方案

一、MySQL 查询过程 MySQL 查询过程是指从客户端发送 SQL 语句到 MySQL 服务器&#xff0c;再到服务器返回结果集的整个过程。这个过程涉及多个组件的协作&#xff0c;包括连接管理、查询解析、优化、执行和结果返回等。 1.1 查询过程的关键组件 连接管理器&#xff1a;管理…

智能对话小程序功能优化day1-登录鉴权

目录 1.数据库表构建。 2.完善登录相关的实例对象。 3.登录相关功能实现。 4.小程序效果。 最近尝试下trae加入claude3.7后的读图生成代码功能&#xff0c;可以看到简单的页面一次性生成确实准确率高了不少&#xff0c;想起来之前笔记中开发的智能问答小程序功能还是有些简…

MinIO的预签名直传机制

我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口&#xff0c;然后我们在前端调用这些接口完成文件的上传下载机制&#xff0c;但是&#xff0c;当并发量过大&#xff0c;频繁访问会对后端的并发往往会对服务器造成极大的压力…

Qt开源控件库(qt-material-widgets)的编译及使用

项目简介 qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。 项目地址 项目地址&#xff1a;qt-material-widgets 本地构建环境 Win11 家庭中文版 VS2019 Qt5.15.2 (MSVC2019) 本地构建流程 克隆后的目录结构如图&#xff1a; 直接使用Qt Crea…

用python批量生成文件夹

问题描述 当批量生成文件夹时&#xff0c;手动右键创建文件夹是一个繁琐的过程&#xff0c;尤其是文件夹的命名过程。假设从3月10日到3月19日&#xff0c;每天要为某个日常工作创建一个名为2025031x的文件夹&#xff0c;手动创建文件夹并命名费时费力。 百度给出了以下四种方法…

【MySQL】基本操作 —— DDL

目录 DDLDDL 常用操作对数据库的常用操作查看所有数据库创建数据库切换、显示当前数据库删除数据库修改数据库编码 对表的常用操作创建表数据类型数值类型日期和时间类型字符串类型 查看当前数据库所有表查看指定表的创建语句查看指定表结构删除表 对表结构的常用操作给表添加字…

游戏引擎学习第152天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾昨天的内容 这个节目展示了我们如何从零开始制作一款完整的游戏。我们不使用任何游戏引擎或库&#xff0c;而是从头开始创建一款游戏&#xff0c;整个开发过程都会呈现给大家。你将能够看到每一行代码的编写&#xff0c;了解…

考研数学非数竞赛复习之Stolz定理求解数列极限

在非数类大学生数学竞赛中&#xff0c;Stolz定理作为一种强大的工具&#xff0c;经常被用来解决和式数列极限的问题&#xff0c;也被誉为离散版的’洛必达’方法&#xff0c;它提供了一种简洁而有效的方法&#xff0c;使得原本复杂繁琐的极限计算过程变得直观明了。本文&#x…

故障诊断——neo4j入门

文章目录 neo4jQuickStartDemo neo4j QuickStart 详情可见博客&#xff1a;https://www.cnblogs.com/nhdlb/p/18703804&#xff0c;使用docker拉取最近的一个版本进行创建 docker run -it -d -p 7474:7474 -p 7687:7687 \ -v /disk5/neo4j_docker/data:/data \ -v /disk5/ne…

【JavaWeb】快速入门——HTMLCSS

文章目录 一、 HTML简介1、HTML概念2、HTML文件结构3、可视化网页结构 二、 HTML标签语法1、标题标签2、段落标签3、超链接4、换行5、无序列表6、路径7、图片8、块1 盒子模型2 布局标签 三、 使用HTML表格展示数据1、定义表格2、合并单元格横向合并纵向合并 四、 使用HTML表单收…

若依框架-给sys_user表添加新字段并获取当前登录用户的该字段值

目录 添加字段 修改SysUser类 修改SysUserMapper.xml 修改user.js 前端获取字段值 添加字段 若依框架的sys_user表是没有age字段的&#xff0c;但由于业务需求&#xff0c;我需要新添加一个age字段&#xff1a; 修改SysUser类 添加age字段后&#xff0c;要在SysUser类 …

前端监测窗口尺寸和元素尺寸变化的方法

前端监测窗口尺寸变化和元素尺寸变化的方法 window.resize 简介 window.resize事件是浏览器提供的一种事件&#xff0c;用于监听窗口大小的改变。这意味着当用户调整浏览器窗口大小时&#xff0c;相关的JavaScript代码将被触发执行。这为开发者提供了一种机制&#xff0c;可…

ubuntu 部署deepseek

更新 apt update 升级 apt upgrade 格式化硬盘 mkfs.ext4 /dev/sdb 安装nginx 查看端口 一、安装Ollama Ollama是一个开源的大型语言模型&#xff08;LLM&#xff09;推理服务器&#xff0c;为用户提供了灵活、安全和高性能的语言模型推理解决方案。 ollama/docs/linux.m…

MySQL库和表的操作详解:从创建库到表的管理全面指南

目录 一、MySQL库的操作详解 〇、登录MySQL 一、数据库的创建与字符集设置 1. 创建数据库的语法 2. 创建数据库示例 查看创建出来的文件: bash下查看MySQL创建的文件 二、字符集与校验规则 1. 查看系统默认设置 2. 查看支持的字符集与校验规则 3. 校验规则对查询的影响…

PyTorch 系列教程:使用CNN实现图像分类

图像分类是计算机视觉领域的一项基本任务&#xff0c;也是深度学习技术的一个常见应用。近年来&#xff0c;卷积神经网络&#xff08;cnn&#xff09;和PyTorch库的结合由于其易用性和鲁棒性已经成为执行图像分类的流行选择。 理解卷积神经网络&#xff08;cnn&#xff09; 卷…

Java 大视界 -- Java 大数据中的数据可视化大屏设计与开发实战(127)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

「Unity3D」UGUI将元素固定在,距离屏幕边缘的某个比例,以及保持元素自身比例

在不同分辨率的屏幕下&#xff0c;UI元素按照自身像素大小&#xff0c;会发生位置与比例的变化&#xff0c;本文仅利用锚点&#xff08;Anchors&#xff09;使用&#xff0c;来实现UI元素&#xff0c;固定在某个比例距离的屏幕边缘。 首先&#xff0c;将元素的锚点设置为中心&…