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

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 configurationPUBLIC "-//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.mzph.cn/pingmian/72274.shtml

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

相关文章

搜广推校招面经四十九

tiktok广告算法 一、倒排索引原理及Map中Key的处理 具体使用方法见【搜广推校招面经三十六】 倒排索引&#xff08;Inverted Index&#xff09;是信息检索系统中常用的一种数据结构&#xff0c;用于快速查找包含某个关键词的文档。以下是倒排索引的原理及Map中Key的处理方式的…

【零基础入门unity游戏开发——unity3D篇】3D物理系统之 —— 3D刚体组件Rigidbody

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…

C# net deepseek RAG AI开发 全流程 介绍

deepseek本地部署教程及net开发对接 步骤详解&#xff1a;安装教程及net开发对接全流程介绍 DeepSeekRAG 中的 RAG&#xff0c;全称是 Retrieval-Augmented Generation&#xff08;检索增强生成&#xff09;&#xff0c;是一种结合外部知识库检索与大模型生成能力的技术架构。其…

用旧的手机搭建 MQTT Broker

MQTT Broker搭建 在Android上搭建MQTT所需工具: termux 通过网盘分享的文件:termux-app_v0.118.1+github-debug_armeabi-v7a.apk 链接: https://pan.baidu.com/s/1Iii2szXAc02cKVGdP1EuzQ?pwd=fqsc 提取码: fqsc 在 Termux 中使用 MQTT(Message Queuing Telemetry Trans…

b站视频下载工具软件怎么下载

自行配置FFMPEG环境 请优先选择批量下载&#xff0c;会自处理视频和音频文件。 如果要下载更高质量请登陆。 没有配置FFMPEG下载后会有报错提示&#xff0c;视频音频文件无法合并生成mp4文件 更新批量下载标题&#xff0c;只取视频原标题&#xff0c;B站反爬机制登陆后下载多了…

# linux有哪些桌面环境?有哪些显示服务器协议及显示服务器?有哪些用于开发图形用户界面的工具包?

linux有哪些桌面环境&#xff1f;有哪些显示服务器协议及显示服务器&#xff1f;有哪些用于开发图形用户界面的工具包&#xff1f; 文章目录 linux有哪些桌面环境&#xff1f;有哪些显示服务器协议及显示服务器&#xff1f;有哪些用于开发图形用户界面的工具包&#xff1f;1 显…

Java 大视界 -- Java 大数据分布式计算中的资源调度与优化策略(131)

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

躲藏博弈中的策略优化:整合历史数据、概率论与博弈论

躲藏博弈中的策略优化&#xff1a;整合历史数据、概率论与博弈论 一、引言 躲藏博弈(Hiding Games)作为一类特殊的博弈模型&#xff0c;广泛存在于军事对抗、网络安全、商业竞争甚至日常生活中。其核心在于一方(躲藏者)试图避免被另一方(寻找者)发现&#xff0c;双方各自选择…

时序数据库 TDengine 到 MySQL 数据迁移同步

简述 TDengine 是一款开源、高性能、云原生的时序数据库&#xff0c;专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。在工业自动化的时代&#xff0c;时序数据库在电力、轨道交通、智能制造等领域有着广泛的应用。 MySQL 是全球广泛使用的开源关系型数据库&a…

基于YOLO11深度学习的舌苔舌象检测识别与诊断系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

【愚公系列】《高效使用DeepSeek》003-DeepSeek文档处理和其他顶级 AI模型的区别

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

正新鸡排:在变革浪潮中领航,打造连锁餐饮新生态

在当下风云变幻的餐饮市场中&#xff0c;连锁品牌犹如逆水行舟&#xff0c;不进则退。作为国内坐拥万店的知名连锁餐饮品牌&#xff0c;正新鸡排2023年卖出了7.2亿片鸡排&#xff0c;集团营收同比增长28%。在《2024年中国鸡排连锁品牌10强榜单》中&#xff0c;正新鸡排以高达95…

MyBatis 的一级、二级缓存

文章目录 1️⃣ 一级缓存&#xff08;Local Cache&#xff09;&#x1f4cc; 定义&#x1f680; 示例代码 2️⃣ 二级缓存&#xff08;Global Cache&#xff09;&#x1f4cc; 定义&#x1f680; 使用方式 3️⃣ 一级缓存 vs. 二级缓存 &#x1f4ca;4️⃣ 数据共享问题&#x…

软件性能测试与功能测试联系和区别

随着软件开发技术的迅猛发展&#xff0c;软件性能测试和功能测试成为了确保软件质量的两个重要环节。那么只有一字之差的性能测试和功能测试分别是什么?又有哪些联系和区别呢? 一、软件性能测试是什么?   软件性能测试是为了评估软件系统在特定条件下的表现&#xff0c;包…

Vue 框架使用难点与易错点剖析:避开陷阱,提升开发效率

Vue.js 作为当下最流行的前端框架之一&#xff0c;以其轻量、易用和灵活的特性深受开发者喜爱。然而&#xff0c;即使是经验丰富的开发者&#xff0c;在使用 Vue 的过程中也难免会遇到一些难点和易错点。本文将深入分析 Vue 开发中常见的“坑”&#xff0c;并提供解决方案和代码…

基于大模型的上睑下垂手术全流程预测与方案优化研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义 1.3 研究方法与创新点 二、上睑下垂相关理论基础 2.1 上睑下垂的定义与分类 2.2 发病机制与影响 2.3 传统治疗方法概述 三、大模型技术原理与应用 3.1 大模型概述 3.2 在医疗领域的应用现状 3.3 用于上睑下垂预测的…

Odoo Http鉴权+调用后端接口

最近在调研Odoo18&#xff0c;包括它的前后端原理、源码等。发现官方的开发文档并不十分实用&#xff0c;比如标题这种简单的实用需求&#xff0c;竟然浪费了一点时间&#xff0c;特此记录。 官方文档&#xff1a;External API — Odoo 18.0 documentation 前提&#xff1a;首…

【Go每日一练】实现简单的控制台计算器

&#x1f47b;创作者&#xff1a;丶重明 &#x1f47b;创作时间&#xff1a;2025年3月7日 &#x1f47b;擅长领域&#xff1a;运维 目录 1.&#x1f636;‍&#x1f32b;️题目&#xff1a;简单的控制台计算器2.&#x1f636;‍&#x1f32b;️代码输出3.&#x1f636;‍&#…

Linux常见问题与分析

操作系统进行线程切换时进行的动作 1. 保存当前线程的上下文 寄存器状态&#xff1a;保存 CPU 寄存器&#xff08;如通用寄存器、程序计数器 PC、栈指针 SP 等&#xff09;到当前线程的 线程控制块&#xff08;TCB&#xff09; 中。内核栈信息&#xff1a;如果线程在内核态运…

HTML块级元素和内联元素(简单易懂)

在HTML中&#xff0c;元素可以分为块级元素&#xff08;Block-level elements&#xff09;和内联元素&#xff08;Inline elements&#xff09;。这两类元素在页面布局和样式应用上有不同的特点和用途。 一、块级元素&#xff08;Block-level elements&#xff09; 1. 定义 …