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

11.2【MyBatis】主配置文件

目录

        11.2【MyBatis】主配置文件

    1.properties(属性)

    2.settings(设置)

    3.typeAliases(别名)

    4.typeHandlers类型处理器

    5.objectFactory 对象工厂

    6.plugins(插件)

    7.environments (配置环境)

    8.mappers (映射器)

        


        

        11.2【MyBatis】主配置文件

        

        MyBatis的 XML 配置文件包含了影响 MyBatis 行为很深的设置和属性信息,也可称之为主配置文件。此 XML文档的层级结构如下:

        

        configuration一>配置

        properties一>属性

        settings一>设置

        typeAliases一>类型命名

        typeHandlers一>类型处理器

        objectFactory一>对象工厂

        plugins一>插件

        environments一>配置环境

        environment一>环境变量

        transactionManager一>事务管理器

        dataSource一>数据源

        databaseIdProvider一>数据库厂商标识

        mappers一>映射器

        必须注意的是,MyBatis 配置项的顺序不能颠倒。如果其顺序颠倒了,则会在 MyBatis 启动阶段发生异常,导致程序无法运行。例如,可能会产生如下的报错信息:

         org.xml.sax.SaxParseException: The content of elment type "configuration must match"

        "(properties?,setting?,typeAliases?,...,

environments?databaseIdProvider?,mappers?)"

        1.properties(属性)

        

        MyBatis 提供了 3 种方式来使用 properties,分别如下

        (1)property子元素。

        (2)properties 文件。

        (3)程序代码传递。

        properties 属性可以通过property 子元素来传递也可以配置在典型的Java属性配置文件中。例如:        

<properties resource="org/mybatis/example/jdbc.properties"><property name="username" value="boy" /><property name="password" value="1" />
</properties>

        其中的属性可以在整个配置文件中使用,使用可替换的属性(参数)来实现动态配置。

例如:        

<dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}" /><property name="password" value="${password}" />
</dataSource>

        其中,username 和 password 将会由 property 子元素中设置的值来替换。driver 和 url 属性将会由包含进来的jdbc.properties文件中的值来替换。

        属性也可以被传递到SqlSessionBuilder.build()方法中。例如:

        

SqlSessionFactory factory=sqlSessionFactoryBuilder.build(reader, props);
//...or...
SqlSessionFactory factory = qlSessionFactoryBuilder,build(reader,environmentprops);

        

        如果属性多于一个,则MyBatis将按照如下的顺序进行属性加载。

        1)在 properties 元素体内指定的属性被读取。

        2)从类路径下资源或者 properties 元素的 url 属性中加载的属性被读取它会覆盖已经存在的完全一样的属性。

        3)作为方法参数传递的属性最后被读取,它也会覆盖任一已经存在的完全一样的属性这些属性可能是从 properties 元素体内和资源或者 url 属性中加载的。

        因此,最高优先级的属性是那些作为方法参数的属性,其次是资源 /url 属性,最后是 properties 元素中指定的属性。

        2.settings(设置)

        settings 会改变 MyBatis 在运行时的行为方式是 MyBatis 中极为重要的调整设置。表11-1描述了 MyBatis 的设置信息,以及其含义和默认值。

设置参数

描述

有效值

默认值

cacheEnabled

该配置影响所有映射器中配置缓存的全局开关

true|false

true

lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态

true|false

false

aggressiveLazyLoading

是否允许单一语句返回多结果集(需要兼容驱动)

true|false

false(版本3.4.1以后)

multipleResultSetsEnabled

是否允许单一语句返回多结果集(需要兼容驱动)

true|false

true

useColumnLabel

使用列标签代替列名。不同的驱动在这方面会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果

true|false

true

useGeneratedKeys

允许JDBC支持自动生成主键,需要驱动兼容。如果设置为 true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(如Derby)

true|false

false

autoMappingBehavior

指定 MyBatis 应如何自动映射到字段或属性。NONE 表示取消自动映射;PARTIAL表示只会自动映射,没有定义套结果集和映射结果集;FULL 会自动映射任意复杂的结果集(无论是否套)

NONE、PARTIAL、FUll

PARTIAL

defaultExecutorType

配置默认的执行器。SIMPLE 是普通的执行器;REUSE 会重用预处理语句;BATCH 执行器将重用语并执行批量更新

SIMPLE、REUSE、BATCH

SIMPLE

defaultStatementTimeout

设置超时时间,它决定驱动等待数据库响应的秒数

任何正整数

Not Set (null)

mapUnderscoreToCamelCase

是否开启自动驼峰命名规则映射,即从经典数据库列名 ACOLUMN 到经典 Java 属性名 aColumn 的类似映射

true|false

false

localCacheScope

MyBatis 利用本地缓存机制防止循环引用和加速重复查询默认值为SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为STATEMENT,则本地会话仅用在语句执行上对相同 SqlSession 的不同调用将不会共享数据

SESSION|STATEMENT

SESSION

jdbcTypeForNull

当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,如NULL、VARCHAR或OTHER

NULL|VARCHAR|OTHER

OTHER

callSettersOnNulls

指定当结果集中值为null的时候是否调用映射对象的settermap对象时为put)方法这对于有MapkeySet0依赖或nul值初始化的时候是有用的。注意,原始类型(int、boolean 等)是不能设置成null的

true|false

false

logPrefix

指定 MyBatis 增加到日志名称的前缀

任何字符串

Not Set

loglmpl

指定MyBatis所用日志的具体实现,未指定时将自动查找

SLF4J|LOG4J等

Not Set

proxyFactory

指定Mybatis创建具有延迟加载能力的对象所用到的代理工具

CGLIBIJAVASSIST

CGLIB

        3.typeAliases(别名)

        类型别名是为 Java类型命名的一个短的名称。它只和XM配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:

 <typeAliases>
        <typeAliasalias="Blog” type="domain.blog.Blog"/></typeAliases>
</typeAliases>
<typeAliases>
        <package name="com.mialab.mybatisdemo.domainu/>
</typeAliases>

                这样,每一个包中的JavaBean在没有注解的情况下,会使用Bean的首字母小写的非限定类名来作为它的别名。

        如果在包中的实体类中发现了 @Alias 注解,则将使用注解的值作为它的别名。例如,com.mialab.mybatis.demo.domain包下存在Student实体类,并且有以下代码。

         那么,可用“student”来作为“com.mialab.mybatisdemo.domain.Student”的别名。

        

@Alias("student")

public class Student {

        ...

}

        4.typeHandlers类型处理器

        无论是MyBatis在预处理语句中设置一个参数,还是从结果集中取出一个值,类型处理器都被用来将获取的值以合适的方式转换成Java 类型。

        5.objectFactory 对象工厂

        MyBatis每次创建结果对象的新实例时,它都会使用一个对象工厂实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法来实例化,要么在参数映射存在的时候通过参数构造方法来实例化。如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。

        6.plugins(插件)

        MyBatis允许用户在已映射语句执行过程中的某一点进行拦截调用默认情况下MBatis允许使用插件来拦截的接口和方法包括以下几个。

        

Executor (update,query,flushStatements,commit,rollback,getTransaction,closerisClosed)

ParameterHandler (getParameterObject,setParameters)

ResultSetHandler(handleResultSets,handleCursorResultSets,

handleOutputResultSetHandlerParameters)

StatementHandler (prepare,parameterizer batch, update, query)

        这4个接口及其包含的方法的细节可以通过查看每个方法的签名来了解,或者直接查看MyBatis 发行包中的源代码。假设用户想做的不仅仅是监控方法的调用,那么应该很好地了解正在重写的方法的行为。因为在试图修改或重写已有方法行为的时候,很可能会破坏 MBatis的核心模块,这些都是底层的类和方法,所以使用插件的时候要特别当心。 

        7.environments (配置环境)

        MyBatis可以配置多种环境,这种机制使得MyBatis可以将SOL映射应用于多种数据库中。例如,开发、测试和生产环境需要有不同的配置。尽管可以配置多个环境,但是每个SqlSessionFactory实例只能选择一个环境,即每个数据库对应一个SlSessionFactory实例。所以如果想连接两个数据库,就需要创建两个SqlSessionFactory实例,每个数据库对应一个。

        8.mappers (映射器)

        既然MyBatis的行为已经由上述元素配置现在需要开发者自己编写SQL映射语。mappers会告诉MyBatis到哪里去找映射文件,进而找到这些SOL语句。实际开发中,可以使用相对于类路径的资源引用或完全限定资源定位符(包括file:///URLs)类名或者包名等。例如:

               

<!-- Using classpath relative resources -->
<mappers><mapper resource-"org/mybatis/builder/AuthorMapper.xml"/><mapper resource="org/mybatis/builder/BlogMapper.xml"/>
</mappers>
<!-- Using url fully qualified paths -->
<mappers><mapper url=file://va/mappers/AuthorMapper.xml"/><mapper url=fl://var/mappers/BlogMapper.xm."/>
</mappers>
<!-- Using mapper interface classes -->
<mappers><mapper class="org.mybatis.builder.AuthorMapper"/><mapper class="org.mybatis.builder.BlogMappr"/>
</mappers>
<!-- Register all interfaces in a package as mappers -->
<mappers><package name="org.mybatis.builder"/>
</mappers>

        

相关文章:

11.2【MyBatis】主配置文件

目录 11.2【MyBatis】主配置文件 1.properties&#xff08;属性&#xff09; 2.settings(设置) 3.typeAliases(别名) 4.typeHandlers类型处理器 5.objectFactory 对象工厂 6.plugins(插件) 7.environments (配置环境) 8.mappers (映射器) 11.2【MyBatis】主配置文件 MyBatis的 …...

linuxARM裸机学习笔记(2)----汇编LED灯实验

MX6ULL 的 IO IO的复用功能 这里的只使用了低五位&#xff0c;用来配置io口&#xff0c;其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的&#xff0c;GPIO1_IO00 一共可以复用为 9种功能 IO&#xff0c;分别对应 ALT0~ALT8。每种对应了不同的功能 io的属性配置 HY…...

用C语言实现插入排序算法

1.设计思路 用插入排序对长度为n的待排序数组A进行排序的伪代码&#xff08;在代码中&#xff0c;A中元素的数目n用A.length来表示&#xff09;。 伪代码如下&#xff1a; INSERTION-SORT(A) for j2 to A.length:keyA[j] //将A[j]插入已排序序列A[1..j-1]ij-1while i>0…...

2023 电赛E题--可能会出现的问题以及解决方法

2023年电赛E题报告模板&#xff08;K210版&#xff09;--可直接使用 本文链接&#xff1a;2023年电赛E题报告模板&#xff08;K210版&#xff09;--可直接使用_皓悦编程记的博客-CSDN博客 解决激光笔在黑色区域无法识别 本文链接&#xff1a; 2023 电赛 E 题 激光笔识别有误-…...

Demystifying Prompts in Language Models via Perplexity Estimation

Demystifying Prompts in Language Models via Perplexity Estimation 原文链接 Gonen H, Iyer S, Blevins T, et al. Demystifying prompts in language models via perplexity estimation[J]. arXiv preprint arXiv:2212.04037, 2022. 简单来说就是作者通过在不同LLM和不同…...

WEB集群——http、tomcat

1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。 1. 简述静态网页和动态网页的区别。 1&#xff09;、静态网页 &#xff08;1&#xff09;、什么是静态网页 请求响应信息&…...

Socks5代理:网络安全与爬虫之利器

一、Socks5代理&#xff1a;简介与工作原理 Socks5代理&#xff0c;全称为Socket Secure 5代理&#xff0c;是一种允许用户通过代理服务器进行网络连接的技术。它是Socks协议的最新版本&#xff0c;在网络安全和数据传输方面有着显著的优势。 Socks5代理与其他代理的不同之处在…...

如何兼容低版本浏览器

如何兼容低版本浏览器 分为三个部分来说 HTML 低版本浏览器无法识别新增的HTML5元素&#xff0c;如果要兼容这部分浏览器&#xff0c;需要做以下处理&#xff1a; 对于非可替换元素&#xff0c;比如article、section、header、footer等&#xff0c;这种元素虽然低版本浏览器不识…...

【雕爷学编程】MicroPython动手做(39)——机器视觉之图像基础2

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…...

gitlab搭建

回到目录 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 Web 服务。 Gitlab 是被广泛使用的基于 git 的开源代码管理平台, 基于 Ruby on Rails 构建, 主要针对软件开发过程中产生的代码和文档进行管理,…...

JMeter 的使用

文章目录 1. JMeter下载2. JMeter的使用2.1 JMeter中文设置2.2 JMeter的使用2.2.1 创建线程组2.2.2 HTTP请求2.2.3 监听器 1. JMeter下载 官网地址 https://jmeter.apache.org/download_jmeter.cgi https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.2.zip 下载解…...

Java语言 Iterator 如何装换成 List

迭代器如何逆向转换成List集合 在 Java 中&#xff0c;迭代器&#xff08;Iterator&#xff09;是一种用于遍历集合中元素的对象&#xff0c;它提供了一种简单而一致的方式来访问集合中的元素&#xff0c;而不需要暴露集合内部的结构。如果我们需要将一个迭代器逆向转换成 Lis…...

国产GOWIN实现低成本实现CSI MIPI转换DVP

CSI MIPI转换DVP&#xff0c;要么就是通用IC操作&#xff0c;如龙讯芯片和索尼芯片&#xff0c;但是复杂的寄存器控制器实在开发太累。对于FPGA操作&#xff0c;大部分都是用xilinx的方案&#xff0c;xilinx方案成本太高&#xff0c;IP复杂。 而用国产GOWIN已经实现了直接mipi …...

Typescript第六章 类型进阶(类型之间的关系,全面性检查,对象类型进阶,函数类型进阶,条件类型等)

文章目录 第六章 类型进阶6.1 类型之间的关系6.1.1 子类型和超类型6.1.2 型变结构和数组型变函数型变 6.1.3 可赋值性6.1.4 类型拓宽const类型多余属性检查 6.1.5 细化辨别并集类型 6.2 全面性检查6.3对象类型进阶6.3.1 对象类型的类型运算符“键入”运算符keyof运算符 6.3.2 R…...

kernel32.dll如何修复,快速解决kernel32.dll缺失的方法

Kernel32.dll是Windows操作系统中一个重要的系统文件&#xff0c;对于系统的正常运行至关重要。然而&#xff0c;由于各种原因&#xff0c;用户可能会遇到kernel32.dll文件的缺失问题。今天小编就来给大家详细的介绍一下kernel32.dll这个文件&#xff0c;并且详细的介绍一下ker…...

初始化前端项目配置 eslint、prettier、husky 等等

每次新项目都要重新配置一遍&#xff0c;有点麻烦&#xff0c;记录一下。 一、配置 ESLint 1.1 核心配置 执行 npm init eslint/config 命令进行初始化&#xff0c;根据提示一路下一步即可&#xff0c;完成后会自动生成 eslintrc 文件并安装相关依赖。 1.2 React 编译模式配…...

嵌入式存储器为AI的实现提供了实现架构

近年来&#xff0c;大脑启发式计算机领域的研究活动获得了巨大的发展。主要原因是试图超越传统的冯诺依曼架构的局限性&#xff0c;后者越来越受存储器-逻辑通信的带宽和等待时间的局限性的影响。在神经形态架构中&#xff0c;内存是分布式的&#xff0c;可以与逻辑共定位。鉴于…...

iOS开发-格式化时间显示刚刚几分钟前几小时前等

iOS开发-格式化时间显示刚刚几分钟前几小时前等 在开发中经常遇到从服务端获取的时间戳&#xff0c;需要转换显示刚刚、几分钟前、几小时前、几天前、年月日等格式。 主要用到了NSCalendar、NSDateComponents这两个类 NSString *result nil;NSCalendarUnit components (NSC…...

ffmpeg视频音频命令

视频音频合并 视频音频合并&#xff0c;以视频时间为主&#xff0c;音频短了循环 方法1&#xff1a;混音&#xff0c;视频权重0&#xff0c;volume调节音量&#xff0c;aloop无限循环&#xff0c;duration:first为第一个素材的长度 ffmpeg -i video.mp4 -i audio.mp3 -filter_…...

Jenkins工具系列 —— Jenkins 安装并启动

文章目录 安装涉及相关链接选择安装Jenkins版本安装JenkinsJenkins web页面启动卸载Jenkins 安装涉及相关链接 Jenkins官网&#xff1a; https://www.jenkins.io/zh/ Jenkins下载安装步骤&#xff1a; https://www.jenkins.io/zh/download/ 安装各种版本OpenJDK&#xff1a; h…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...