【Spring】— MyBatis配置文件元素

news2025/1/7 20:48:48

目录

    • MyBatis配置文件元素
      • properties元素
      • settings元素
      • typeAliases元素
      • typeHandler元素
      • objectFactory元素
      • plugins元素
      • environments元素
      • mappers元素

MyBatis配置文件元素

使用MyBatis框架进行开发,需要创建MyBatis的核心配置文件,该配置文件包含重要的元素,熟悉配置文件中各个元素的功能十分重要。

在MyBatis框架的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在<contiguration>元素内配置。

MyBatis配置文件中的主要元素如下所示。

<configuration>
	<!-- 属性 -->
	<properties/>
	<!-- 设置 -->
	<settings/>
	<!-- 类型命名 -->
	<typeAliases/>
	<!-- 类型处理器 -->
	<typeHandlers/>
	<!-- 对象工厂 -->
	<objectFactory/>
	<!-- 插件 -->
	<plugins/>
	<!-- 配置环境 -->
	<environments>
		<!-- 环境变量 -->
		<environment>
			<!-- 事务管理器 -->
			<transactionManager/>
			<!-- 数据源 -->
			<dataSourse/>
		</environment>
	</environments>
	<!-- 数据库厂商标识 -->
	<databaseIdProvider/>
	<!-- 映射器 -->
	<mappers/>
</configuration>

在MyBatis的配置文件中包含多个元素,这些元素在配置文件中分别发挥着不同的作用。开发人员需要熟悉的是元素各个子元素的配置。

注意<configuration>的子元素必须按照由上到下的顺序进行配置,否则MyBatis在解析XML配置文件的时候会报错。

properties元素

<properties>是一个配置属性的元素,通过外部配置来动态替换内部定义的属性

【示例】配置数据库的连接等属性,具体方式如下。

步骤01 在项目的src目录下创建一个名称为db.properties的配置文件,代码如下所示。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_mybatis
jdbc.username=root
jdbc.password=root

步骤02 在MyBatis配置文件mybatis-config.xml中配置<properties/>属性,具体如下。

<properties resource="db.properties" />

完成上述配置,dataSource中连接数据库的4个属性(driver、url、username和password)值将会由db.properties文件中对应的值来动态替换。这样就为配置提供了灵活性。另外,还可以通过配置<properties>元素的子元素<property>以及通过方法参数传递的方式来获取属性值。由于使用properties配置文件来配置属性值可以方便地在多个配置文件中使用这些属性值,并且方便维护和修改,因此在实际开发中最常用。

settings元素

<settings>元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。<settings>元素中的常见配置及其描述如下表所示。

在这里插入图片描述
<settings>元素中的常见配置在配置文件中的使用方式如下。

<settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="multipleResultsEnabled" value="true"/>
        <setting name="useColumnLabel" value="true"/>
        <setting name="useGeneratedKeys" value="true"/>
        <setting name="autoMappingBehavior" value="PARTIAL"/>
</settings>

typeAliases元素

<typeAliases>元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少全限定类名的冗余。使用<typeAliases>元素配置别名的方法如下:

<!--定义别名-->
<typeAliases>
    <typeAlias type="user" type="com.ssm.po.User"/>
</typeAliases>

<typeAliases>元素的子元素中的type属性用于指定需要被定义别名的类的全限定名;alias属性的属性值“user”就是自定义的别名,可以代替“com.ssm.po.User”使用在MyBatis文件的任何位置。如果省略alias属性,MyBatis会默认将类名首字母小写后的名称作为别名。

当POJO类过多时,还可以通过自动扫描包的形式自定义别名,具体示例如下。

<!--使用自动扫描包来定义别名-->
<typeAliases>
    <package name="com.ssm.po"/>
</typeAliases>

<typeAliases>元素的子元素<package>中的name属性用于指定要被定义别名的包,MyBatis会将所有com.ssm.po包中的POJO类以首字母小写的非限定类名作为它的别名。

注意:上述方式的别名只适用于没有使用注解的情况。如果在程序中使用了注解,那么别名为其注解的值,具体如下。

@Alias(value = "user")
    public class User{
        //user的属性和方法
}

除了可以使用<typeAliases>元素自定义别名外,MyBatis框架还默认为许多常见的Java类型(如数值、字符串、日期和集合等)提供相应的类型别名,如下表所示。

在这里插入图片描述
提示
表中所列举的别名可以在MyBatis中直接使用,但由于别名不区分大小写,因此在使用时要注意重复定义的覆盖问题。

typeHandler元素

MyBatis在预处理语句(Prepared Statement)中设置一个参数或者从结果集(Resultset)中取出一个值时,都会用其框架内部注册了的typeHandler(类型处理器)进行相关处理。typeHandler的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。

为了方便转换,MyBatis框架提供了一些默认的类型处理器,如下表所示。

在这里插入图片描述
当MyBatis框架所提供的这些类型处理器不能够满足需求时,还可以通过自定义的方式对类型处理器进行扩展。自定义类型处理器可以通过实现TypeHandler接口或者继承BaseTypeHandle类来定义。元素就是用于在配置文件中注册自定义的类型处理器的。它的使用方式有两种,具体如下。

(1)注册一个类的类型处理器

<typeHandlers>
    <!--以单个类形式配置-->
    <typeHandler handler="com.ssm.type.UsertypeHandlerl" />
</typeHandlers>

上述代码中,子元素的handler属性用于指定在程序中自定义的类型处理器类。

(2)注册一个包中所有的类型处理器

<typeHandlers>
    <!--注册一个包中所有的typeHandlers,系统在启动时会自动扫描包下的使用文件-->
    <package name="com.ssm.type" />
</typeHandlers>

在上述代码中,子元素的name属性用于指定类型处理器所在的包名,使用这种方式后,系统会在启动时自动扫描com.ssm.type包下所有的文件,并把它们作为类型处理器。

objectFactory元素

MyBatis框架每次创建结果对象的新实例时,都会使用一个对象工厂(ObjectFactory)的实例来完成。MyBatis中默认的ObjectFactory的作用就是实例化目标类,既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。
在通常情况下,我们使用默认的ObjectFactory即可。MyBatis中默认的ObjectFactory是由org.apache.ibatis.reflection.factory.DefaultObjectFactory来提供服务的,大部分场景下都不用配置和修改。如果想覆盖ObjectFactory的默认行为,那么可以通过自定义ObjectFactory实现。

plugins元素

MyBatis允许在已映射语句执行过程中的某一点进行拦截调用(通过插件来实现)。<plugins>元素的作用就是配置用户所开发的插件。关于插件的使用,本书不做详细讲解,有兴趣的读者请查找官方文档等资料自行学习。

environments元素

<environments>元素用于在配置文件中对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,可以通过<environments>元素配置多种数据源,即配置多种数据库。

【示例】使用<environments>元素进行环境配置的示例如下。

 <environments default="development">
        <environment id="development">
            <!--使用JDBC的事务管理-->
            <transactionManager type="JDBC" />
            <!--配置数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/db_mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
</environments>

在上述示例代码中,<environments>元素是环境配置的根元素,它包含一个default属性,该属性用于指定默认的环境ID。<environment><environments>元素的子元素,它可以被定义多个,其id属性用于表示所定义环境的ID值。在<environment>元素内,包含事务管理和数据源的配置信息,其中<transactionManager>元素用于配置事务管理,它的type属性用于指定事务管理的方式,即使用哪种事务管理器;<dataSource>元素用于配置数据源,它的type属性用于指定使用哪种数据源。

在MyBatis中,可以配置两种类型的事务管理器,分别是JDBC和MANAGED。

  • JDBC:此配置直接使用JDBC的提交和回滚设置,依赖从数据源得到的连接来管理事务的作用域。
  • MANAGED:此配置从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。在默认情况下,它会关闭连接,但一些容器并不希望这样,为此可以将closeConnection属性设置为false来阻止它默认的关闭行为。

注意:如果项目中使用Spring+MyBatis,就没有必要在MyBatis中配置事务管理器,因为实际开发中会使用Spring自带的管理器来实现事务管理。

对于数据源的配置,MyBatis框架提供了UNPOOLED、POOLED和JNDI三种数据源类型。

  • UNPOOLED:配置此数据源类型后,在每次被请求时会打开和关闭连接。它对没有性能要求的简单应用程序是一个很好的选择。
  • POOLED:此数据源利用“池”的概念将JDBC连接对象组织起来,避免在创建新的连接实例时需要初始化和认证的时间。这种方式使得并发Web应用可以快速地响应请求,是当前流行的处理方式。
  • JNDI:此数据源可以在EJB或应用服务器等容器中使用。容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。

mappers元素

在配置文件中,<mappers>元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下所示。
(1)使用类路径引入

   <mappers>
      <mapper resource="com/ssm/mapper/UserMapper.xml" />
    </mappers>

(2)使用本地文件路径引入

   <mappers>
      <mapper url=file:"///D:/com/ssm/mapper/UserMapper.xml" />
    </mappers>

(3)使用接口类引入

   <mappers>
      <mapper class="com.ssm.mapper.UserMapper" />
    </mappers>

(4)使用包名引入

   <mappers>
      <package name="com.ssm.mapper" />
    </mappers>

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

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

相关文章

sqlite数据如何转成mysql数据类型

一、使用工具Navicat Premium 16 1.把db文件拖到Navicat Premium中&#xff0c;选择数据库&#xff0c;点击工具&#xff0c;数据传输 选择下一步 下一步 开始 这样就成功了&#xff0c;生成的sql文件就在你保存的位置了。 二、使用SQLiteStudio转换成mysql文件 1.打开SQLite…

关键字volatile 和信号

volatile是c语言中的一个关键字&#xff0c;在语言层面我们很难理解它&#xff0c;今天从信号角度我们来理解一下。 我们来看下面一段代码&#xff1a; 从代码表面看上去运行逻辑应该是&#xff0c;flag为0时候一直while循环&#xff0c;当有信号2产生进入到信号2的处理函数中…

Java - 集合工具类Collections

文章目录 目录 文章目录 前言 二.collections提供的方法 三. 方法详解 1.addAll:将所有指定元素添加到指定 collection 中。 可变参数 添加方式 二.shuffle()&#xff1a;随机打乱List集合中的元素 三. sort()&#xff1a;对List集合进行排序&#xff1b; 实现compata…

软件测试:提升jemeter报告输出品质,精通动态参数处理技巧并进行组件极致优化

目录 引言 一.测试报告生成 二.动态参数处理 1.正则 2.json提取器 3.JMeter动态参数处理逻辑是什么&#xff1f;【面试必考】 三.jemter常用的组件 四.JMeter是怎么做API自动化测试的&#xff1f; 五.针对一个服务&#xff0c;你怎么测试&#xff1f; 引言 当今互联网…

spring jpa/hibernate 查询缓存导致内存溢出

版本 hibernate-5.6.10 问题 应用运行一段时间后发生堆空间不足内存溢出 根据内存快照可见大量org.hibernate.engine.query.spi.QueryPlanCache对象 原因 QueryPlanCache会缓存sql&#xff0c;以便于相同的sql重复编译 如果大量使用in查询&#xff0c;由于参数数量不同&a…

《程序员面试金典(第6版)》面试题 02.02. 返回倒数第 k 个节点(双指针法,链表)

题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 题目传输门&#xff1a;添加链接描述 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 k 2 输出&#xff1a; 4说明&#xff1a; 给定的 k 保证是有效的。 解题思路与…

Axure教程-横向动态堆叠图(中继器)

本文将教大家如何用AXURE中的中继器动态横向堆叠图 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://3ajwd3.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87810612 二、功能介绍 简单填写中继器内容即可生成动态竖向堆…

移动应用测试不可少的技能,使用Appium和Python实现Activity切换

目录 前言&#xff1a; 一、Appium简介 二、切换Activity操作 三、使用 Appium 实现切换 Activity 操作的注意事项 四、结论 前言&#xff1a; App测试自动化是当前移动应用开发测试领域中的热点之一。在应用开发的过程中&#xff0c;切换Activity是一个常见的操作&#x…

网易易盾流量多发反外挂落地实践

背景及目的 环境迁移 反外挂服务建德机房线上迁移&#xff0c;采取的方案是&#xff1a;建德机房独立部署一套完整的集群&#xff0c;统一经由完整的性能测试、故障演练、功能回归后&#xff0c;通过线上分阶段切换流量的方式来切服务。QA 需要比对验证 2 个不同环境下核心接口…

PostgreSQL技术内幕(八)源码分析 ——投影算子和表达式计算

在上期Postgres技术内幕系列直播中&#xff0c;我们为大家介绍了Postgres投影算子和表达式计算实现原理和底层细节。本文根据直播内容整理&#xff0c;作者现任HashData内核研发工程师。 投影 (projection) 关系代数中的一种&#xff0c; 用于从关系R中选出属性包含在A中的列…

简单易懂,一篇文章告诉你什么是云渲染!

随着5G、AI、云计算、云服务等资讯来袭&#xff0c;我们发现云渲染被更多人知晓和关注&#xff0c;通过搜集和调研云渲染业内的相关信息和模式&#xff0c;尽量用简明的方式为大家解答到底 什么是云渲染。 用户将本地任务提交到远程服务器&#xff0c;通过远程的计算机集群资源…

C++ 类和对象(静态的static、友元、内部类、匿名对象、explicit)知识点+完整思维导图+实操图+深入细节通俗易懂建议收藏

绪论 时间的步伐有三种&#xff1a;未来姗姗来迟&#xff0c;现在像箭一样飞逝&#xff0c;过往永远静立不动。本章是类和对象的一个收尾篇&#xff0c;相信通过这三篇类和对象的学习&#xff0c;应该你已经更加清楚了解了C的类和对象。 话不多说安全带系好&#xff0c;发车啦&…

耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道····

一提及外包测试&#xff0c;大部分人的第一印象就是&#xff1a;工作强度大&#xff0c;技术含量低&#xff0c;没有归属感&#xff01; 本人毕业于某普通二本院校非计算机专业&#xff0c;跨专业入行测试&#xff0c;至今有近 5年工作经验。 第一份测试工作是在华为做了两年外…

【LCM】LCM通讯入门

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍LCM的通讯。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 &#x1f95e;喜欢的朋友可以关注一下&#xff0c;下次更新…

Linux-初学者系列6_kvm虚拟机

速通配置kvm虚拟机 通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。 在一台计算机上同时运行多个逻辑计算机&#xff0c;每个逻辑计算机可以运行不同的操作系统&#xff0c;并且应用程序都可以在相互独立的空间内运行互不影响&#xff0c;提高计算机的工作效率。 一、 配置…

真题详解(include)-软件设计(八十二)

真题详解&#xff08;快速排序&#xff09;-软件设计&#xff08;八十一)https://blog.csdn.net/ke1ying/article/details/130806047 generalliza&#xff08;泛化&#xff09;&#xff1a;泛化是一种继承关系&#xff0c;子类将继承基类所有行为&#xff0c;关系和通信&#…

章节2:Burp Suite配置启动

章节2&#xff1a;Burp Suite配置启动 01 Burp Suite程序下载 程序下载 Burp Suite jar包JDK&#xff0c;JDK包含JRE&#xff08;Java运行时环境&#xff09;激活jar包汉化jar包 Burp jar包 推荐2021&#xff0c;jar包版本 https://portswigger.net/burp/releases JRE环…

带你手撕链式二叉树—【C语言】

前言&#xff1a; 普通二叉树的增删查改没有意义&#xff1f;那我们为什么要先学习普通二叉树呢&#xff1f; 给出以下两点理由&#xff1a; 1.为后面学习更加复杂的二叉树打基础。&#xff08;搜索二叉树、ALV树、红黑树、B树系列—多叉平衡搜索树&#xff09; 2.有很多二叉树…

【C++进阶之路】模板

前言 假如需要你写一个交换函数&#xff0c;交换两个相同类型的值&#xff0c;这时如果交换的是int 类型的值&#xff0c;你可能会写一个Swap函数&#xff0c;其中参数是两个int类型的&#xff0c;假如再让你写一个double类型的呢&#xff1f;你可能又要写一个Swap的函数重载&…

运营-14.优惠券规则

优惠券使用场景 1. 需要先领取&#xff1b; 2. 在购买商品的时候可以抵用部分费用&#xff1b; 3. 在有效期内可以随时使用&#xff1b; &#xff08;根据场景和类型会有区别&#xff09; 优惠券的优势 1. 可以控制数量&#xff0c;确保活动成本可控&#xff1b; 2. 使用灵活&a…