当前位置: 首页 > 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…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...