MyBatis常见配置

简介: MyBatis配置优先级:方法参数 > resource/url > properties内。常用配置包括缓存、延迟加载、主键生成等。支持多环境配置,通过environments指定,默认使用development。事务管理支持JDBC和MANAGED,与Spring集成时由Spring接管。

1.前言
mybatis官网Java-api地址:https://mybatis.org/mybatis-3/zh/java-api.html
2.常见配置
如果一个属性不止在一个地方进行配置,那么mybatis将按照下面顺序进行加载
首先读取properties元素体内的属性
然后根据properties元素中的resource属性读取类路径下属性文件,或根据url属性指定的路径读取属性文件,并覆盖之前读取过的同名属性
最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性
因此,优先级顺序:方法参数传递的属性>resource/url属性中配置>properties元素中指定属性
2.1 几个常见配置属性
设置名 描述 有效值 默认值
cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true | false false
useGeneratedKeys 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 true | false False
defaultExecutorType 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。 SIMPLE REUSE
BATCH SIMPLE
localCacheScope MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。 SESSION STATEMENT SESSION
proxyFactory 指定 Mybatis 创建可延迟加载对象所用到的代理工具。 CGLIB | JAVASSIST JAVASSIST (3.3 以上)
2.2 多环境配置

多个数据源,就创建多个SqlSessionFactory,每个对应一个数据库

为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
如果忽略了环境参数,那么将会加载默认环境,如下所示:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties);
environments 元素定义了如何配置环境:














几个关键点:
默认使用的环境 ID(比如:default="development")。
每个 environment 元素定义的环境 ID(比如:id="development")。
事务管理器的配置(比如:type="JDBC")。
数据源的配置(比如:type="POOLED")。
默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。
3 事务管理
1 JDBC
这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域
2 MANAGED
它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
注意:
如果用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。这两种事务管理器类型都不需要设置任何属性。

相关文章
|
2月前
|
人工智能 NoSQL 前端开发
面试真题
多套AI与Java技术面试题汇总,涵盖RAG、智能体、大模型部署、分布式系统、JVM调优、数据库设计等核心内容,深入考察候选人项目经验、架构设计及技术深度,适用于中高级工程师岗位选拔。
|
2月前
|
机器学习/深度学习 存储 自然语言处理
大模型基础概念术语解释
大语言模型(LLM)基于Transformer架构,通过海量文本训练,实现强大语言理解与生成。其核心为自注意力机制,结合Token化、位置编码与嵌入层,支持万亿级参数规模。参数增长带来涌现能力,如复杂推理与泛化性能。混合专家模型(MoE)提升效率,推动模型持续扩展。
|
2月前
|
人工智能 JSON 安全
大模型应用开发中MCP与Function Call的关系与区别
MCP与Function Call是大模型应用的两大关键技术。前者为跨模型工具调用的标准化协议,实现系统解耦与生态扩展;后者是模型调用外部功能的内置机制。二者互补协同,推动AI应用向高效、开放、安全演进。
|
2月前
|
消息中间件 人工智能 决策智能
AgentScope x RocketMQ:构建多智能体应用组合
AgentScope是阿里开源的多智能体开发框架,支持模块化、透明化、可定制的智能体构建。集成RocketMQ实现高效A2A通信,助力打造如“智能旅行助手”等复杂协作应用,推动开发者友好型AI生态发展。
|
2月前
|
存储 人工智能 Java
面试回答示例篇
本文系统介绍了AI开发核心技术:SpringAI、LangChain4J与LangChain框架对比,智能体设计原理,RAG增强生成、Tool Calling工具调用、MCP协议、向量知识库等关键技术,并结合实际项目讲解AI集成、模型选型、私有化部署、流式输出、上下文管理及大模型幻觉解决方案,涵盖从架构设计到落地优化的完整实践路径。(239字)
|
2月前
|
敏捷开发 Dubbo Java
需求开发人日评估
随着敏捷开发在国内的风靡,越来越多的团队开始推行敏捷开发,这其中有一个关键事项就是:工时的人日评估。简单来说就是:项目经理会让开发人员自己评估自己负责的模块大概需要的开发周期。 人日,即按照1人几天完成,如1/人日:表示这个需求需要1个人1天完成,如果有2个人一起做,可能就是0.5天(需求开发一般1+1 < 2,因为有代码合并的兼容性要处理)。
|
2月前
|
NoSQL Shell Redis
Redis集群伸缩,转移插槽失败
Redis集群出现节点配置不一致,提示slot 0处于importing状态。需登录对应实例,执行`cluster setslot 0 stable`命令,恢复slot稳定状态,修复问题后再进行集群重平衡操作。注意根据实际slot ID调整命令参数。
|
2月前
|
监控 Java 调度
XXLJob定时任务概述
定时任务指通过时间表达式调度执行的任务,适用于定时对账、超时取消等场景。单体架构可用Timer、ScheduledExecutorService、Quartz、SpringTask等;分布式下需解决重复执行、动态调度、故障转移等问题,主流方案有XXL-JOB、Elastic-Job、Saturn、ScheduleX等。
|
2月前
|
JSON 缓存 前端开发
什么是跨域
CORS(跨域资源共享)是W3C标准,允许浏览器向跨源服务器发起XMLHttpRequest请求,突破AJAX同源限制。需浏览器和服务器共同支持,现代浏览器均兼容。通信过程由浏览器自动完成,开发者无需特殊处理。CORS将请求分为简单和非简单两类,前者直接发送Origin头,后者需预检。服务器通过Access-Control-开头的响应头控制权限。相比仅支持GET的JSONP,CORS支持所有HTTP方法,更灵活安全。
|
2月前
|
SQL 安全 网络协议
常见的网络攻击
恶意软件指具有险恶目的的程序,如病毒、勒索软件、间谍软件等,常通过钓鱼邮件或漏洞入侵系统,窃取数据、破坏功能。网络钓鱼伪装成可信来源骗取敏感信息。中间人攻击窃听通信,DDoS攻击以海量流量瘫痪服务,SQL注入操控数据库,零日漏洞利用未修复缺陷,DNS隧道则隐蔽传输数据,均为常见网络安全威胁。