Mybatis核心配置文件的详解

MyBatis 中的 environments:

<environments default="mybatisDB">
  • environments 标签:这个标签用于定义多个数据库环境,通常用于在不同环境(如开发、测试、生产等)下切换数据库连接。
  • default 属性default="mybatisDB" 表示设置了一个默认的数据库连接环境为 mybatisDB,当 MyBatis 创建 SqlSessionFactory 时,如果没有明确指定环境,MyBatis 会默认使用这个环境。也就是说,如果你不手动指定环境,MyBatis 会默认选择你在 default 属性中指定的环境。

environment 标签

<environment id="powernodeDB">
  • id="powernodeDB":这个属性用于给环境配置起一个唯一标识符,这里标识符为 powernodeDB。你可以在代码中通过指定 powernodeDB 来选择该配置进行数据库连接。

  • 一个 environment 标签表示一个完整的数据库连接环境配置,每个环境需要配置以下两部分:

    • 事务管理器 (transactionManager)
    • 数据源配置 (dataSource)

事务管理器 (transactionManager) 

<transactionManager type="JDBC"/>
  • transactionManager 标签:这个标签指定了事务管理的方式。在这里type="JDBC" 表示使用 JDBC 自带的事务管理机制。JDBC 事务管理会自动提交和回滚事务,通常适用于简单的事务需求。

  • MyBatis 支持两种类型的事务管理器:

    • JDBC:直接使用 JDBC 的提交和回滚功能管理事务。
    • MANAGED:表示让容器管理事务,通常在应用服务器(如 Spring)中使用。如果你配置了 MyBatis 的事务管理器为 MANAGED,但并没有使用像 Spring 或 Java EE 容器来管理事务,这种情况下就相当于 没有显式的事务控制。每条 SQL 语句会立即执行并自动提交。

数据源配置 (dataSource) 

<dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/powernode"/><property name="username" value="root"/><property name="password" value="root"/>
</dataSource>
  • dataSource 标签用于配置数据库连接的详细信息。在这里,type="POOLED" 表示使用数据库连接池。dataSource被称为数据源。dataSource作用是什么?为程序提供Connection对象。(但凡是给程序提供Connection对象的,都叫做数据源。) 数据源实际上是一套规范。JDK中有这套规范:javax.sql.Datasource,这个数据源的规范,这套接口实际上是JDK规定的。我们自己也可以编写数据源组件,只要实现javax.sql.DataSource接口就行了。实现接口当中所有的方法。这样就有了自己的数据源MyBatis 提供了三种类型的数据源:

    • UNPOOLED:每次数据库请求都会创建和关闭一个新的数据库连接,性能较低,适用于小型应用。
    • POOLED:使用数据库连接池,连接被复用,能够显著提高性能,适用于生产环境。MyBatis 内置的连接池:MyBatis 自带了一个简单的连接池实现。配置好 driverurlusernamepassword 后,MyBatis 会自动管理连接池,负责连接的复用和管理。
    • JNDI:通过 JNDI 获取数据源,通常在应用服务器上使用。JNDI是一套规范。谁实现了这套规范呢?大部分的web容器都实现了JNDI规范:
      • 例如:Tomcat、Jetty、WebLogic、WebSphere,这些服务器(容器)都实现了JNDI规范,

数据源的各个属性

  • driver:指定 JDBC 驱动类,这里是 com.mysql.cj.jdbc.Driver,表示 MySQL 数据库使用的驱动程序。
  • url:数据库的连接 URL。jdbc:mysql://localhost:3306/powernode 表示连接的是本地的 MySQL 数据库,端口号为 3306,数据库名称为 powernode
  • usernamepassword:指定连接数据库所需的用户名和密码,这里分别是 rootroot
特性POOLEDJNDI
连接池实现者由 MyBatis 自己实现,内置简单的连接池机制由应用服务器(如 Tomcat、JBoss 等)实现
连接管理方式MyBatis 自行管理数据库连接池应用服务器管理,MyBatis 通过 JNDI 查找
适用场景小型到中型应用,独立运行的 Java 程序大型企业级应用,需要跨多个环境的数据库配置
性能优化适用于生产环境,可以复用连接提升性能由应用服务器提供的连接池,支持高性能和管理
配置难度简单,直接在 MyBatis 配置文件中配置数据库连接需要在应用服务器中配置,并在 MyBatis 中引用
灵活性连接池设置简单,适合独立应用更加灵活,支持配置外置化和跨环境切换

properties

<properties> 标签是什么?

<properties> 标签用于加载外部的属性文件(如 jdbc.properties),这个文件通常包含与数据库连接相关的信息。通过这种方式,你可以将数据库连接信息和实际的程序代码分离,便于后续的维护和修改。

具体结构

假设有一个 jdbc.properties 文件,里面可能包含如下信息:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=root
jdbc.password=123456

这个文件定义了数据库的驱动、URL、用户名和密码,这些都是数据库连接所必需的。在 MyBatis 的 mybatis-config.xml 配置文件中加载这个属性文件:

<properties resource="jdbc.properties" />

通过这个 <properties> 标签,MyBatis 会从类路径中找到 jdbc.properties 文件,并加载其中的配置信息。这样你就可以在 MyBatis 的配置文件中使用这些属性。

使用这些属性:

在 MyBatis 配置文件中的其他地方,例如数据库连接的配置部分,你可以通过 ${} 语法引用这些属性:

<environment id="development"><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource>
</environment>

在上面的例子中${jdbc.driver}${jdbc.url}${jdbc.username}${jdbc.password} 分别引用了 jdbc.properties 文件中的属性。这样做的好处是,如果你想修改数据库的连接信息,只需要修改 jdbc.properties 文件,而不需要修改 MyBatis 的配置文件。

总结:

  1. <properties> 标签:用于加载外部的属性文件。
  2. 属性文件(如 jdbc.properties:存储数据库的配置信息(如 URL、用户名、密码等)。
  3. ${} 语法:在 MyBatis 配置文件中引用属性文件中的值

为什么这样设计?

  • 模块化:将配置和代码分开,方便修改和维护。
  • 安全性:如果你把数据库密码等信息存放在外部文件中,并且这个文件不被直接暴露,可以提高系统的安全性。
  • 可维护性:当需要更改数据库配置时,直接修改属性文件就可以了,程序代码不需要改动。

这样处理的优势就是避免硬编码数据库信息,如果你需要改变环境或者数据库,只需更改属性文件中的配置信息,而不必更改应用程序的代码。

总结

  • 默认环境:配置中设置了 default="mybatisDB",这表示在没有指定环境的情况下,MyBatis 会使用 mybatisDB 作为默认数据库连接环境。
  • 事务管理:通过 transactionManager 标签,使用了 JDBC 的事务管理,适合简单的事务处理。
  • 数据源配置:使用连接池 (POOLED),通过指定 driverurlusernamepassword,MyBatis 能够连接到指定的 MySQL 数据库。

扩展说明

如果你的应用程序中存在多个数据库环境(如开发、测试和生产环境),你可以为每个环境配置不同的 environment,并在需要时手动选择。比如,你可以定义不同的 id 来区分开发和生产环境:

<environment id="development"><!-- 配置开发环境的数据源和事务管理器 -->
</environment><environment id="production"><!-- 配置生产环境的数据源和事务管理器 -->
</environment>

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

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

相关文章

电能质量的危害主要是哪些?我们该如何应对电能质量故障所带来的损失?

电能质量治理在现代配电系统中的必要性日益凸显。随着可再生能源和智能电网技术的广泛应用&#xff0c;电力系统面临着频率波动、谐波污染和电压不稳定等问题。这些问题不仅影响了电力的可靠性和安全性&#xff0c;还可能导致设备损坏和能效降低。因此&#xff0c;实施电能质量…

算法训练(leetcode)二刷第一天 | 704. 二分查找、27. 移除元素、977. 有序数组的平方

刷题记录 704. 二分查找27. 移除元素977. 有序数组的平方思路1思路二 704. 二分查找 leetcode题目地址 经典二分查找思路&#xff0c;有序列表左右边界向中间夹逼。 时间复杂度&#xff1a; O ( l o g n ) O(logn) O(logn) 空间复杂度&#xff1a; O ( 1 ) O(1) O(1) // …

Pagehelper获取total错误

前言 在使用若依框架的pagehelper时&#xff0c;给分页表设置数据的时候前端只收到了分页的那一页的数据&#xff0c;总记录数不符合要求 我想要的效果如下&#xff0c;可以实现分页&#xff0c;和显示总记录数 但是实际情况为 但是我的数据库有11条记录&#xff0c;他这里明…

QCY开放式耳机值得买吗?南卡、QCY、韶音开放式耳机最全测评!

​开放式耳机最近还挺火的&#xff0c;因为相对于传统的入耳式耳机来说&#xff0c;它佩戴起来更舒适&#xff0c;也更卫生&#xff0c;更加适配运动场景&#xff0c;现在不少的健身或者运动博主都选择了开放式耳机&#xff0c;那么作为一个同样喜欢跑步的数码博主&#xff0c;…

开源一个C缓存库

1 简介 在当下的视频点播应用场景下&#xff0c;端侧对视频缓存的需求可谓刚需&#xff0c;一方面可以为公司节省流量成本&#xff0c;一方面也可以提升用户的播放体验&#xff0c;有一石二鸟之效。 近期&#xff0c;本人用C写了一个缓存库&#xff0c;支持iOS/Android/harmony…

java项目之信息化在线教学平台的设计与实现(源码+文档)

项目简介 信息化在线教学平台的设计与实现实现了以下功能&#xff1a; 信息化在线教学平台的设计与实现的主要使用者管理员功能有个人中心&#xff0c;学生信息管理&#xff0c;教师信息管理&#xff0c;教学信息管理&#xff0c;学生成绩管理&#xff0c;留言板管理&#xf…

番外篇 | 史上最全的关于CV的一些经典注意力机制代码汇总

前言:Hello大家好,我是小哥谈。注意力是人类认知系统的核心部分,它允许我们在各种感官输入中筛选和专注于特定信息。这一能力帮助我们处理海量的信息,关注重要的事物,而不会被次要的事物淹没。受到人类认知系统的启发,计算机科学家开发了注意力机制,这种机制模仿人类的这…

vue开发环境、生产环境配置与nginx配置后端代理转发跨域

一、配置步骤 在Vue项目中,通常会在项目的环境配置文件中设置不同环境下的API接口地址。对于生产环境,你可以使用Nginx作为反向代理来处理后端地址的转发。 1.在Vue项目中的env文件夹下,找到env.production文件,并设置生产环境下的API接口地址: module.exports = {NODE…

《语音识别芯片选型全攻略》

《语音识别芯片选型全攻略》 一、语音识别芯片性能评估&#xff08;一&#xff09;主控芯片性能评估&#xff08;二&#xff09;接口需求分析&#xff08;三&#xff09;可靠性评估&#xff08;四&#xff09;生产工艺考量&#xff08;五&#xff09;湿敏等级判断 二、语音识别…

倍福TwinCAT程序中遇到的bug

文章目录 问题描述&#xff1a;TwinCAT嵌入式控制器CX5140在上电启动后&#xff0c;X001网口接网线通讯灯不亮&#xff0c;软件扫描不到硬件网口 解决方法&#xff1a;硬件断电重启后&#xff0c;X001网口恢复正常 问题描述&#xff1a;TwinCAT软件点击激活配置后&#xff0c;…

汽车免拆诊断案例 | 2022款大众捷达VS5车行驶中挡位偶尔会锁在D3挡

故障现象  一辆2022款大众捷达VS5汽车&#xff0c;搭载EA211发动机和手自一体变速器&#xff0c;累计行驶里程约为4.5万km。该车行驶中挡位偶尔会锁在D3挡&#xff0c;车速最高约50 km/h&#xff0c;且组合仪表上的发动机故障灯和EPC灯异常点亮。 故障诊断  用故障检测仪检…

【AI工具大集合】

在当今快速发展的人工智能领域&#xff0c;AI工具的种类繁多&#xff0c;它们在不同的行业和领域中发挥着重要作用。以下是一些常用的AI工具&#xff01; 一、AI实用工具 1. AI聊天机器人 Youchat&#xff1a;类似于搜索引擎的AI聊天机器人&#xff0c;能够实时从互联网获取信…

SQL语句查询

SQL语句查询 查询产生一个虚拟表 看到的是表形式显示的结果&#xff0c;但结果并不真正存储 每次执行查询只是从数据表中提取数据&#xff0c;并按照表的形式显示出来 查询语法 SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] SELECT …

【python书籍-附电子版】Python入门零基础必看书籍,python编程入门教程指南,从入门到精通,这几本书太牛了!!

今天为大家推荐的“Python 编程三剑客”是新手小白学习编程的不二之选&#xff01;这三本书分别从不同的角度&#xff0c;对 Python 编程进行了详细的解析。 &#xff08;领取方式见文末&#xff09; 一《Python编程&#xff1a;从入门到实践》 第一本为你打下坚实的基础&am…

MongoDB聚合管道(Aggregation Pipeline)

聚合管道&#xff08;Aggregation Pipeline&#xff09;是MongoDB中用于对数据进行处理和分析的一种强大机制。它由一系列的阶段&#xff08;Stage&#xff09;组成&#xff0c;每个阶段对输入的数据进行一种特定的操作&#xff0c;然后将结果传递给下一个阶段&#xff0c;就像…

【VAE】 VQ-VAE: 离散潜在空间的艺术

大家好&#xff01;今天我们来聊聊一个有趣的深度学习模型&#xff1a;Vector Quantized Variational AutoEncoder&#xff08;VQ-VAE&#xff09;。这个模型看似复杂&#xff0c;实则蕴含着深刻的智慧。让我们一起来探索这个模型的奥秘吧&#xff01; 什么是 VQ-VAE&#xff…

详解安卓和IOS的唤起APP的机制,包括第三方平台的唤起方法比如微信

网页唤起APP是一种常见的跨平台交互方式&#xff0c;它允许用户从网页直接跳转到移动应用程序。 这种技术广泛应用于各种场景&#xff0c;比如让用户在浏览器中点击链接后直接打开某个应用&#xff0c;或者从网页引导用户下载安装应用。实现这一功能主要依赖于URL Scheme、Univ…

基于Java+SpringBoot+Vue的网上购物商城系统研发

基于JavaSpringBootVue的网上购物商城系统研发 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345…

门店收银系统源码-php+flutter+uniapp

1. 系统开发语言 核心开发语言: PHP、HTML5、Dart 后台接口: PHP7.3 后台管理网站: HTML5vue2.0element-uicssjs 线下收银台&#xff08;安卓/PC收银、安卓自助收银&#xff09;: Dart3 框架&#xff1a;Flutter 3.19.6 移动店务助手: uniapp 线上商城: uniapp 2.线下收…

【Git】常用Git命令

1. Git 仓库的基本操作 git init&#xff1a;在当前目录下初始化一个新的 Git 仓库。git clone <repository>&#xff1a;从远程仓库克隆一个 Git 仓库到本地。git status&#xff1a;查看工作目录和暂存区的状态&#xff0c;显示哪些文件被修改或未跟踪。git add <f…