【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>

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/21741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Docker实现测试部署CI/CD----相关服务器的安装配置(1)]

目录 0、CI/CD系统最终架构图规划IP地址 1、git配置Git下载pycharm配置gitidea配置git 2、GitLab安装与配置主机要求拉取镜像定义 compose.yml启动gitlab浏览器访问并修改密码查看登录密码修改密码 3、SonarQube 安装与配置拉取镜像修改虚拟内存的大小启动SonarQube登录 SonarQ…

appuploader不是开发者账号

Appuploader是一款可以帮助开发者上传iOS应用到Apple App Store的工具。很多开发者都知道&#xff0c;在上传应用到App Store之前&#xff0c;需要创建开发者账号并获得苹果官方的认证才能进行上传。但是&#xff0c;有些开发者可能并不想去注册开发者账号&#xff0c;或者遇到…

vue3学习-ref引用

模板引用 使用特殊的 refattribute 允许再特定的Dom或组件被挂在后&#xff0c;获取他的直接引用。 import { ref } form vue const input ref(null) <input ref"input"/>注意&#xff1a;只可以在组件挂载后才能访问模板引用 #如果你需要侦听一个模板引用 r…

mac pd安装ubuntu并配置远程连接

背景 一个安静的下午&#xff0c;我又想去折腾点什么了。准备学习一下k8s的&#xff0c;但是没有服务器。把我给折腾的&#xff0c;在抱怨了&#xff1a;为什么M系列芯片的资源怎么这么少。 好在伙伴说&#xff0c;你可以尝试一下ubantu。于是&#xff0c;我只好在我的mac上安…

软件外包开发的GO语言特点

Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它具有许多特点&#xff0c;使其成为许多项目范围的优秀选择。Go语言适用于需要高性能、并发和简洁易读的项目&#xff0c;特别是面向网络和分布式应用的项目。今天和大家分享项目的特点及适用的项目…

【深度学习】SMILEtrack: SiMIlarity LEarning for Multiple Object Tracking,论文

论文&#xff1a;https://arxiv.org/abs/2211.08824 代码&#xff1a;https://github.com/WWangYuHsiang/SMILEtrack 文章目录 AbstractIntroductionRelated WorkTracking-by-DetectionDetection methodData association method Tracking-by-Attention Methodology架构概述外观…

TensorFlow项目练手(三)——基于GRU股票走势预测任务

项目介绍 项目基于GRU算法通过20天的股票序列来预测第21天的数据&#xff0c;有些项目也可以用LSTM算法&#xff0c;两者主要差别如下&#xff1a; LSTM算法&#xff1a;目前使用最多的时间序列算法&#xff0c;是一种特殊的RNN&#xff08;循环神经网络&#xff09;&#xf…

Python小白学习:超级详细的字典介绍(字典的定义、存储、修改、遍历元素和嵌套)

目录 一、字典简介1.1 创建字典1.2 访问字典中的值1.3 添加键值对1.4 修改字典中的值实例 1.5 删除键值对1.6 由多个类似对象组成的字典1.7 使用get()访问值1.8 练习题 二、遍历字典2.1 遍历所有键值对实例 2.2 遍历字典中的所有键2.3 按照特定顺序遍历字典中的所有键2.4 遍历字…

04 Ubuntu中的中文输入法的安装

在Ubuntu22.04这种版本相对较高的系统中安装中文输入法&#xff0c;一般推荐使用fctix5&#xff0c;相比于其他的输入法&#xff0c;这款输入法的推荐词要好得多&#xff0c;而且不会像ibus一样莫名其妙地失灵。 首先感谢文章《滑动验证页面》&#xff0c;我是根据这篇文章的教…

通用指令(汇编)

一、数据处理指令1&#xff09;数学运算数据运算指令的格式数据搬移指令立即数伪指令加法指令带进位的加法指令减法指令带借位的减法指令逆向减法指令乘法指令数据运算指令的扩展 2&#xff09;逻辑运算按位与指令按位或指令按位异或指令左移指令右移指令位清零指令 3&#xff…

前端实现打印1 - 使用 iframe 实现 并 分页打印

目录 打印代码对话框预览打印预览 打印代码 <!-- 打印 --> <template><el-dialogtitle"打印":visible.sync"dialogVisible"width"50%"top"7vh"append-to-bodyclose"handleClose"><div ref"print…

Android 读取系统属性详解

一&#xff0c;背景介绍 Android 系统属性主要有两种&#xff1a;SettingsProvider 和 SystemProperties 。 二&#xff0c;SettingsProvider详解 2.1 关于Android"设置"里的一些属性可以直接通过settings命令直接查看或者设置adb shell 下 settings指令可以分别查…

STM32 DHT11

DHT11 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。 使用单总线通信 该传感器包括一个电容式感湿元件和一个NTC测温元件&#xff0c;并于一个高性能8位单片机相连&#xff08;模数转换&#xff09;。 DHT11引脚说明 开漏模式下没有输出高电平的能…

缓存友好在实际编程中的重要性

引入 当CPU执行程序时&#xff0c;需要频繁地访问主存储器&#xff08;RAM&#xff09;中的数据和指令。然而&#xff0c;主存储器的访问速度相对较慢&#xff0c;与CPU的运算速度相比存在显著差异&#xff0c;每次都从主存中读取数据都会导致相对较长的等待时间&#xff0c;从…

Embedding入门介绍以及为什么Embedding在大语言模型中很重要

Embeddings技术简介及其历史概要 在机器学习和自然语言处理中&#xff0c;embedding是指将高维度的数据&#xff08;例如文字、图片、音频&#xff09;映射到低维度空间的过程。embedding向量通常是一个由实数构成的向量&#xff0c;它将输入的数据表示成一个连续的数值空间中…

Java版本spring cloud + spring boot企业电子招投标系统源代码 tbms

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…

Kubernetes概述

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…

STM 如何通过网络 time.windows.com获取时间

STM 如何通过网络 time.windows.com获取时间 在STM32中,你可以使用STM32Cube HAL库提供的网络套接字API来通过网络获取时间。以下是一个示例代码,演示如何通过time.windows.com获取时间: #include "stm32xxxx.h" #include "lwip/sockets.h" #include …

企业新片场排名如何优化

企业新片场排名如何优化 要如何去做关键SEO&#xff1f;第一个我们要做的就是做好 SEO 关键词的选词&#xff0c;一般就是会有第一个常用的选词方法&#xff0c;第一是以常用的提问词去做&#xff0c;不实像是情人节买什么礼物&#xff0c;母亲节买什么礼物&#xff0c; 618 有…

推荐前端开发者提升效率的工具

是否掌握新的技术很大程度决定着你是否被淘汰。 虽然应用程序试图将网站替代&#xff0c;但前端 Web 开发业务仍在快速变化和增长&#xff0c;前端开发人员的功能并没有消失。以下介绍一款前端开发者提升效率的工具。 目录 一、低代码工具前景 二、如何理解低代码工具 三、前端…