MyBatis 常见配置详解:属性优先级、执行器与多环境支持

简介: MyBatis 是优秀的持久层框架,简化数据库操作。本文详解配置属性加载优先级(代码 > 外部文件 > 内联)、常用全局设置(如缓存、延迟加载)及多环境多数据源配置方法,助力提升系统稳定与性能。

MyBatis 是一款优秀的持久层框架,通过 XML 或注解将 Java 对象与 SQL 语句映射,极大简化了数据库操作。在实际开发中,合理配置 MyBatis 是提升系统稳定性与性能的关键。本文将重点介绍 配置属性的加载优先级常用全局设置 以及 多环境(多数据源)配置方法

一、配置属性的加载优先级

当同一个配置属性在多个地方被定义时,MyBatis 会按照以下顺序加载,并后加载的覆盖先加载的

  1. <properties> 元素体内直接定义的属性
  2. 通过 <properties resource="...">url="..." 加载的外部属性文件
  3. 通过 SqlSessionFactoryBuilder.build(..., properties) 方法参数传入的 Properties 对象

最终优先级顺序(从高到低):  

方法参数传递的属性 > resource/url 加载的属性文件 > properties 元素内联属性

📌 示例:

jdbc.urldb.properties 和代码传入的 Properties 中都存在,则以代码传入的值为准。


二、常用全局配置属性

在 MyBatis 的主配置文件(如 mybatis-config.xml)中,可通过 <settings> 节点配置全局行为。以下是几个关键配置项:

设置名 描述 有效值 默认值
cacheEnabled 全局开启/关闭所有映射器中已配置的二级缓存 true / false true
lazyLoadingEnabled 开启延迟加载(关联对象按需加载) true / false false
useGeneratedKeys 允许 JDBC 自动生成主键(如自增 ID) true / false false
defaultExecutorType 默认执行器类型:
SIMPLE:普通执行器
REUSE:重用 PreparedStatement
BATCH:批量执行更新
SIMPLE / REUSE / BATCH SIMPLE
localCacheScope 本地缓存作用域:
SESSION:缓存整个会话中的查询
STATEMENT:仅缓存当前语句
SESSION / STATEMENT SESSION
proxyFactory 延迟加载代理工具 CGLIB / JAVASSIST JAVASSIST(3.3+)

💡 建议

  • 开发阶段可关闭缓存(cacheEnabled=false)便于调试;
  • 批量插入/更新场景建议使用 BATCH 执行器;
  • 若使用 Lombok 或 CGLIB 动态代理冲突,可显式指定 proxyFactory

三、多环境配置(多数据源支持)

在开发、测试、生产等不同环境中,通常需要连接不同的数据库。MyBatis 通过 <environments> 标签支持多环境配置。

1. 配置示例
<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>
  <!-- 生产环境 -->
  <environment id="production">
    <transactionManager type="MANAGED"/>
    <dataSource type="POOLED">
      <property name="driver" value="${prod.driver}"/>
      <property name="url" value="${prod.url}"/>
      <property name="username" value="${prod.username}"/>
      <property name="password" value="${prod.password}"/>
    </dataSource>
  </environment>
</environments>
2. 关键说明
  • default="development":指定默认激活的环境;
  • 每个 <environment> 必须有唯一 id
  • 每个环境对应一个 SqlSessionFactory,若需同时访问多个数据库,应创建多个 SqlSessionFactory 实例。
3. Java 代码中指定环境
// 指定使用 "production" 环境
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
    .build(reader, "production");
// 也可同时传入 Properties
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
    .build(reader, "production", properties);

⚠️ 若未指定环境参数,则自动使用 <environments default="..."> 中定义的默认环境。


四、事务管理器类型

MyBatis 支持两种事务管理方式:

类型 说明
JDBC 直接使用 JDBC 的 commit() / rollback(),适用于独立应用
MANAGED 由容器(如 Spring、JEE 应用服务器)管理事务生命周期;默认会关闭连接,若容器不希望关闭,需设置 <property name="closeConnection" value="false"/>

📌 重要提示

MyBatis 与 Spring 集成 时,无需配置事务管理器,因为 Spring 会通过 DataSourceTransactionManagerJtaTransactionManager 自动接管事务,覆盖 MyBatis 的配置。


相关文章
SpringMVC+Mybatis两个数据源实现(一)
SpringMVC+Mybatis两个数据源实现(一)
287 0
|
1天前
|
JSON 前端开发 安全
用自定义注解 + 拦截器实现登录鉴权
通过自定义注解 `@Login` 结合 Spring 拦截器,实现声明式登录校验。无需重复编码,自动拦截未登录请求,提升代码可维护性与安全性,适用于前后端分离架构的权限控制实践。
|
1天前
|
存储 安全 数据安全/隐私保护
认识OAuth2.0
OAuth2.0是一种开放授权协议,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。其核心是通过令牌(token)机制实现权限控制,广泛用于第三方登录、服务间资源调用等场景。支持多种授权模式,其中授权码模式最安全,适用于Web和移动应用,如微信、QQ登录即基于此模式实现。
认识OAuth2.0
|
1天前
|
测试技术
OAuth2.0测试
本节演示授权码模式测试流程:通过访问指定URL跳转至SpringSecurity登录页,使用系统账户登录后,授权read/write权限,获取授权码并申请访问令牌token,完成OAuth2认证全过程。
OAuth2.0测试
|
1天前
|
JSON 前端开发 Java
Spring MVC 常见注解详解:让 HTTP 请求精准命中你的方法
本文详解Spring MVC核心注解,从@RequestMapping到@GetMapping等快捷方式,结合@PathVariable、@RequestBody等常用配套注解,助你掌握声明式路由开发,提升效率,实现RESTful风格接口设计。
|
1天前
|
存储 NoSQL 关系型数据库
MongoDB 数据库与集合操作详解
本文介绍MongoDB中数据库与集合的基本操作。数据按“数据库→集合→文档”层级组织。通过`use`创建或切换数据库,`show dbs`查看列表,`db.dropDatabase()`删除数据库。集合无需显式创建,插入文档时自动生,也可用`createCollection`手动创建。使用`show collections`查看集合,`drop()`删除集合。注意命名规范及保留名如admin、local等。
客户端模式
该模式已超出OAuth2范畴,A服务以自身身份向B服务申请Token,无需用户参与。适用于A服务独立使用B服务资源的场景,完全为服务间内部交互,与用户权限无关。
|
1天前
|
NoSQL Shell Linux
Windows 系统下的 MongoDB 单机部署
本文详细介绍 MongoDB 在 Windows 和 Linux 系统中的单机部署方法,涵盖下载安装、目录配置、服务启停、Shell 与 Compass 连接等步骤,助你快速搭建开发与生产环境。
|
1天前
|
安全 Java 数据安全/隐私保护
2-后端代码
本文介绍Spring Security基础配置:首先定义接口,添加新路由;接着创建安全配置类,通过继承WebSecurityConfigurerAdapter实现权限控制,配置表单登录、认证规则及CSRF关闭等,详解各方法作用,帮助理解安全拦截机制。
|
1天前
|
缓存 NoSQL Java
自定义注解实战:用 AOP 让代码“会说话”
本文详解如何在Spring中通过自定义注解+AOP实现方法日志记录,剖析注解原理与AOP拦截机制,并拓展至权限、缓存、校验等实用场景,提升代码可维护性与优雅度。