当前位置: 首页 > article >正文

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>

相关文章:

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

MyBatis 的核心配置文件&#xff08;通常命名为 mybatis-config.xml&#xff09;是 MyBatis 应用程序的入口点&#xff0c;它定义了 MyBatis 的全局配置信息 。 核心配置文件的作用&#xff1a; 配置 MyBatis 的运行时行为: 通过 <settings> 标签设置全局参数&#xff…...

哪些业务场景更适合用MongoDB?何时比MySQL/PostgreSQL好用?

哪些业务场景更适合用MongoDB&#xff1f;何时比MySQL/PostgreSQL好用&#xff1f; 就像淘宝的个性化推荐需要灵活调整商品标签&#xff0c;MongoDB这种"变形金刚"式的数据库&#xff0c;在处理以下三类中国特色业务场景时更具优势&#xff1a; 一、动态数据就像&q…...

Java学习——day20

文章目录 1. 异常处理与优化1.1 在文件操作中使用 try-catch1.2 try-with-resources 语法1.3 使用 finally 块关闭资源1.4 代码健壮性与优化 2. 实践任务2.1 改进思路2.2 示例改进要点2.3 检查点 3. 总结3.1 改进后的完整代码&#xff1a; 4. 今日生词 今日学习目标&#xff1a…...

基于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 …...

JavaScript通过文件地址获取文件名称

在 JavaScript 中&#xff0c;可以通过文件链接地址提取文件名称。文件名称通常是链接中最后一个 / 之后的部分&#xff0c;可能还包含查询参数或哈希片段。以下是几种常见的提取文件名称的方法&#xff1a; 方法 1&#xff1a;使用 URL 对象和 pathname URL 对象可以解析链接…...

MySQL 优化方案

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

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

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

【架构艺术】Go语言微服务monorepo的代码架构设计

近期因为项目架构升级原因&#xff0c;笔者着手调研一些go项目monorepo的代码架构设计&#xff0c;目标是长期把既有微服务项目重要的部分都转移到monorepo上面&#xff0c;让代码更容易维护&#xff0c;协作开发更加方便。虽然经验不多&#xff0c;但既然有了初步的调研&#…...

MinIO的预签名直传机制

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

谈谈List,Set,Map的区别

List、Set 和 Map 是 Java 集合框架&#xff08;Java Collections Framework&#xff09;中的三种主要接口&#xff0c;它们各自有不同的特点和用途。以下是它们的区别和使用场景的详细解释&#xff1a; 1. List&#xff08;列表&#xff09; 1.1 特点 有序集合&#xff1a;Li…...

投资晚报 3.12

一、 晚间要闻 1、CME美联储观察&#xff1a;美联储3月降息25个基点的概率为3% 3 月 12 日&#xff0c;据 CME「美联储观察」数据&#xff0c;美联储 3 月降息 25 个基点的概率为 3%&#xff0c;维持不变的概率为 97%。 2、美国劳工统计局将于今晚20:30公布2月CPI数据 3 月…...

蓝桥 2109统计子矩阵

问题描述 给定一个NM 的矩阵 A, 请你统计有多少个子矩阵 (最小 11, 最大 NM) 满足子矩阵中所有数的和不超过给定的整数 K ? 输入格式 第一行包含三个整数 N,M 和 K. 之后 NN 行每行包含 M 个整数, 代表矩阵 A. 输出格式 一个整数代表答案。 样例输入 3 4 10 1 2 3 4 5…...

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

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

vue的 props 与 $emit 以及 provide 与 inject 的 组件之间的传值对比

好的&#xff0c;下面是 props 与 $emit 以及 provide 与 inject 的对比&#xff1a; 1. props 与 $emit props&#xff1a;父组件通过 props 向子组件传递数据&#xff0c;子组件接收后不可修改。子组件只能读取 props 传递给它的数据。如果需要修改或更新父组件的状态&#…...

用python批量生成文件夹

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

Json 转义符号处理(Mongo changeStream op log)

使用mongo-kafka组件订阅mongo的changeStream得到 一个带有很多转义符号的json字符串 "{\"_id\": {\"_data\": \"8267D0F733000001502B022C0100296E5A1004366730C56F7E41A790BDA4CF23259A4F46645F6964006467B91713A024A00E32CDF6800004\"},…...

懒加载(Lazy Loading):原理、实现与优化策略

懒加载&#xff08;Lazy Loading&#xff09; 是一种优化网页性能的技术&#xff0c;主要用于延迟加载非关键资源&#xff08;如图片、视频、脚本等&#xff09;&#xff0c;直到它们真正需要被使用时才加载。懒加载可以显著减少页面初始加载时间&#xff0c;降低带宽消耗&…...

dns劫持是什么?常见的劫持类型有哪些?如何预防?

DNS劫持的定义 DNS劫持&#xff08;Domain Name System Hijacking&#xff09;是一种网络攻击手段&#xff0c;攻击者通过篡改域名解析的过程&#xff0c;将用户对某个域名的访问请求重定向到错误或恶意的IP地址。这种攻击可能导致用户访问到钓鱼网站、恶意广告页面&#xff0…...

蓝桥杯省赛真题C++B组2024-握手问题

一、题目 【问题描述】 小蓝组织了一场算法交流会议&#xff0c;总共有 50 人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 个人&#xff0c;这 7 人彼此之间没有进行握手(但这…...

【MySQL】基本操作 —— DDL

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

XML语法

一、XML简介 &#xff08;一&#xff09;定义 XML&#xff08;eXtensible Markup Language&#xff0c;可扩展标记语言&#xff09;是一种简单的文本格式&#xff0c;用于标记电子文件使其具有结构性的标记语言。它与HTML&#xff08;HyperText Markup Language&#xff0c;超…...

游戏引擎学习第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…...

【CXX】6.2 str — rust::Str

Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果输入不是 UTF-8&#xff0c;抛出 std::invalid_argument 异常。Str(const std::string &);Str(const char *);Str(con…...

【JavaWeb】快速入门——HTMLCSS

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

unordered_set 的常用函数

在 C 的标准库中&#xff0c;std::unordered_set 是基于哈希表实现的哈希集合。下面介绍这种语言里哈希集合的常用函数。 C std::unordered_set 1. 元素操作 insert 功能&#xff1a;向哈希集合中插入元素。如果元素已经存在&#xff0c;则不会重复插入。示例代码&#xff1a…...

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

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