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

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技

无需布线的革命&#xff1a;电力载波技术赋能楼宇自控系统 在楼宇自动化领域&#xff0c;传统控制系统依赖复杂的专用通信线路&#xff0c;不仅施工成本高昂&#xff0c;后期维护和扩展也极为不便。电力载波技术&#xff08;PLC&#xff09;的突破性应用&#xff0c;彻底改变了…...

npm安装electron下载太慢,导致报错

npm安装electron下载太慢&#xff0c;导致报错 背景 想学习electron框架做个桌面应用&#xff0c;卡在了安装依赖&#xff08;无语了&#xff09;。。。一开始以为node版本或者npm版本太低问题&#xff0c;调整版本后还是报错。偶尔执行install命令后&#xff0c;可以开始下载…...