mybatis常用配置

简介: 本文介绍MyBatis核心配置,包括属性加载优先级(方法参数 > resource/url > properties元素)、关键配置项如缓存、延迟加载、执行器类型,以及多环境配置与事务管理(JDBC/MAANGED),适用于MyBatis开发者快速掌握配置要点。

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 元素定义了如何配置环境:

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <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>

几个关键点:

  • 默认使用的环境 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 模块会使用自带的管理器来覆盖前面的配置。这两种事务管理器类型都不需要设置任何属性。

相关文章
|
17小时前
|
存储 JSON Dubbo
Soul数据库设计
本插件采用数据库设计,存储插件、选择器、规则及其关联关系。核心四表:plugin(插件)、selector(选择器)、rule(规则)、条件表(匹配条件)。支持Dubbo、HTTP、SpringCloud协议,体现Soul三大核心:插件、规则、选择器。
|
18小时前
|
Dubbo Java 应用服务中间件
搭建dubbo-zk应用
基于SpringBoot 2.2.2 + Dubbo 2.0.0构建分布式系统,使用Zookeeper作为注册中心,JDK 1.8开发。项目分为父工程、API接口模块、服务提供者与消费者,实现服务暴露与远程调用,通过Postman验证通信正常。
|
17小时前
|
Dubbo Java 应用服务中间件
入门运行Soul
Soul是一款基于WebFlux的高性能响应式API网关,支持Dubbo、Spring Cloud、Spring Boot,具备异步、跨语言、插件化扩展、动态配置、流量控制等特性,支持集群部署与A/B测试。
|
18小时前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍如何使用Arthas排查线上Java应用CPU占用过高问题。通过`thread`定位高耗能线程,`watch`监控方法调用与异常,结合`jad`反编译与`redefine`实现热更新,无需重启服务即可修复代码,提升线上问题响应效率。适用于SpringBoot + JDK8环境。
|
18小时前
|
监控 Java 网络性能优化
jvm
本节介绍JVM相关命令:实时监控系统状态的dashboard,查看线程堆栈、JVM信息、系统属性(sysprop)、环境变量(sysenv)、虚拟机参数(vmoption)、性能计数器(perfcounter),以及日志管理(logger)、静态属性(getstatic)、OGNL表达式执行、MBean信息和堆内存导出(heapdump)等实用功能。
|
17小时前
|
Arthas 监控 Java
dashboard基础指控
Arthas简介:通过`dashboard`查看线程信息,`jad`反编译类,`thread`分析线程堆栈与阻塞,`watch`监控方法参数、返回值及异常。支持按状态筛选线程,查看CPU占用、运行时间等。`quit`退出连接,`stop`彻底关闭Arthas。字符数:238。
|
19小时前
|
Arthas Java 测试技术
Arthas安装
Arthas是一款Java诊断工具,需先启动Java应用并安装JDK。通过arths-boot.jar启动后选择对应进程即可接入,支持多进程管理,适用于SpringBoot等应用的线上问题排查与性能分析。(236字符)
|
21小时前
|
监控 Java 调度
定时任务概述
定时任务指通过时间表达式调度执行的任务,适用于定时对账、超时取消等场景。实现方式包括单体架构的Timer、ScheduledExecutorService、Quartz、SpringTask,以及分布式架构下的TBSchedule、Elastic-Job、XXL-JOB等方案,解决集群重复执行、动态调度、故障转移与监控问题。
|
21小时前
|
Web App开发 JavaScript 开发者
跨域背景
本文详解跨域问题及解决方案。介绍URL组成判断跨域标准,通过实例演示正常请求与跨域失败场景,重点讲解CORS机制,并提供三种解决方式:@CrossOrigin注解、WebMvcConfigurer全局配置、自定义Filter拦截器,确保前后端分离项目顺利跨域访问。
|
21小时前
|
JSON Java 数据格式
不定参数入参
支持多种参数传递方式:非JSON格式可通过@RequestBody、@RequestParam或直接入参;JSON格式支持JSONObject解析或封装对象接收,结合@Valid实现参数校验,提升接口安全性与可维护性。(238字)