Java学习 - MyBatis - 初识MyBatis

news2024/9/17 7:38:47

前言

什么是持久化

持久化是将程序数据在持久状态和瞬时状态间转换的机制,将数据保存到可永久保存的存储设备中。最常见的就是将内存中的对象存储在数据库中,或者存在磁盘文件、XML 数据文件中等等。其中,文件 IO 属于持久化机制,而 JDBC 也是一种持久化机制。

为什么需要持久化

持久化是必要的,因为内存存在一些固有的缺陷。内存可能会因为外部因素而丢失数据,而有些数据是我们必须保留的,且我们无法完全避免外界因素的干扰。此外,内存的成本相对较高,与硬盘、光盘等外部存储介质相比,其价格和维护成本都要高得多。因此,我们需要寻找其他存储数据的方法,持久化便是解决方案之一,它允许我们将数据存储到外部存储介质中,以减少成本。

什么是持久层

持久层,也称为 dao 层(DAO 即数据访问对象),是专门负责数据持久化的代码部分。它主要负责将数据从内存持久化到磁盘,通常通过关系数据库实现。此层在架构中扮演着具有明确逻辑界限的角色。

什么是 MyBatis

为什么不用 JDBC?

针对数据库操作,Java 其实已经提供了相应的解决方案 – JDBC。那既然已经有了现成的工具,那为什么还会有 MyBatis 的出现呢?

虽然 JDBC 提供了对数据库操作的解决方案,但是存在着如下问题:

  1. 数据库连接的频繁创建和释放造成了一定程度上的资源浪费,从而影响到系统性能,但如果使用数据库连接池就能在一定程度上缓解该问题;

  2. SQL 语句在代码中出现,会造成代码不易维护;

  3. 使用 preparedStatement 向占位符传递参数时存在硬编码,也会进一步加大系统维护的难度;

  4. 对结果集进行解析时存在硬编码,SQL 变化将导致解析代码改变,系统难以维护,但如果能将数据库记录进行封装成 POJO 对象,解析起来就会方便很多。

MyBatis 介绍

MyBatis 是一个持久层框架,是一个半自动化的ORM 框架,不仅支持自定义 SQL、存储过程以及高级映射。还简化了 JDBC 代码以及设置参数和获取结果集的工作过程,使得我们只需要通过简单的 XML 或注解配置,就能将原始类型、接口和 Java POJO 映射为数据库中的记录。

通过对 JDBC 操作数据库的过程进行封装,我们只需要关注 SQL 而不用再去处理注册驱动、创建 connection、创建 statement、手动设置参数、结果集检索等复杂的过程代码。

不同于其他的对象关系映射框架,MyBatis 并未将 Java 对象和数据库表关联,而是将 Java 方法与 SQL 语句关联。

总的来讲,MyBatis 有如下优点:

  • 简单易学:自身小且简单,无任何第三方依赖;

  • 灵活:MyBatis 不会对应用程序或数据库的现有设计强加任何影响,写在 XML 中,便于统一管理和优化;

  • 解除 SQL 与代码程序的耦合:通过提供 DAO 层,将业务逻辑与数据访问逻辑分离,使系统设计更加清晰、易维护、易于单元测试,提高了程序的可维护性;

  • 提供 XML 标签,支持编写动态 SQL

其他持久层技术

除开 JDBC 之外,大家可能还了解到了 Hibernate 和 JPA 等持久层技术。相较于 JDBC 这种原始的方式,它们操作起来显得十分方便,开发效率也很高。但是对于程序中较长和较难的复杂 SQL 需求,就需要绕过框架。此外,由于其 SQL 是内部自动生成的,所以如果要对其做特殊优化则不太容易。Hibernate 和 JPA 都是基于全映射的全自动框架,如果 POJO 中存在大量字段,要进行部分映射时就显得比较困难。最后,由于框架内部反射操作过多,导致数据库性能下降,在当前大数据的背景下,显然不能满足我们的要求。

MyBatis 安装

  1. 首先下载最新版本 MyBatis;

在这里插入图片描述

  1. 解压下载好的安装包,将 mybatis-xxx.jar 放到你项目的类路径下(classpath);

在这里插入图片描述

  1. 如果是 Maven 项目,在 pom.xml 中添加如下依赖即可;
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

最后

今天的内容围绕持久化展开,首先介绍了持久化的概念,然后对 MyBatis 进行了简要说明,解释了使用 MyBatis 的原因,最后讲述了 MyBatis 的安装过程。如果你觉得这些内容对你有帮助,请给予点赞和关注。

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

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

相关文章

Web后端开发(请求-数组集合、日期、JSON参数)(三)

数组参数&#xff1a;请求参数名与形参数组名称相同且请求参数为多个&#xff0c;定义数组类型形参即可接收参数 RequestMapping("/arrayParam") public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK"; } …

Spring Event如何优雅实现系统业务解耦

Spring Event如何优雅实现系统业务解耦 一、介绍 Spring事件&#xff08;Spring Event&#xff09;是Spring框架的一项功能&#xff0c;它允许不同组件之间通过发布-订阅机制进行解耦的通信。在Spring中&#xff0c;事件是表示应用程序中特定事件的对象&#xff0c;例如用户注…

AI数据分析:根据Excel表格数据绘制柱形图

工作任务&#xff1a;将Excel文件中2013年至2019年间线上图书的销售额&#xff0c;以条形图的形式呈现&#xff0c;每个条形的高度代表相应年份的销售额&#xff0c;同时在每个条形上方标注具体的销售额数值 在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#…

OpenGauss数据库-4.表的创建、修改与删除

第1关&#xff1a;创建表 gsql -d postgres -U gaussdb -W passwd123123 create database testdb; \c testdb; passwd123123 create table test_table (test_id integer not null,test_info char(36)); 第2关&#xff1a;修改表 gsql -d testsb -U gaussdb -W passwd123123 …

Python实现删除Word文档中带有“指定内容”的段落文本(7)

前言 本文是该专栏的第7篇,后面会持续分享Python办公自动化干货知识,记得关注。 在处理word文档内容的时候,有时候我们需要一个干净整洁的文本内容。比如说,如下图所示的情况: 在处理上述word文档内容的时候,我们希望将文本底部的“下载链接”以及“附件信息”两个段落,…

Virustotal查询恶意进程

1、使用netstat查看可疑进程 执行ls -al /proc/$PID/exe确认可疑进程对应的文件&#xff1b;若文件未被删除&#xff0c;则直接上传文件到Virustotal进行检测&#xff0c;或者计算出文件对应的md5&#xff0c;使用md5去Virustotal进行查询&#xff1b;若文件已被删除&#xff0…

aabb c++

题目描述 查找形如"aabb"的四位完全平方数&#xff0c;也即前两位数字相同&#xff0c;后两位数字也相同。 输入 无 输出 若干行&#xff0c;每行一个符合条件的四位数&#xff08;从小到大&#xff09;。 分析&#xff1a; 完全平方数&#xff1a; &#xff…

[图解]建模相关的基础知识-07

1 00:00:04,710 --> 00:00:08,900 这是划分&#xff0c;下一个是有序对的概念 2 00:00:11,720 --> 00:00:13,800 我们知道集合是不分顺序的 3 00:00:15,090 --> 00:00:18,200 我们花括号来代表集合的话 4 00:00:18,210 --> 00:00:21,000 AB花括号等于BA花括号 …

ORA-01652 表空间不够解决方案

前章&#xff1a;出现表空间不足不要手动强制删除对应数据文件存储目录下的DBF文件&#xff0c;需要用SQL语句进行数据文件的DROP&#xff0c;否则会导致ORA-01033报错&#xff0c;因为我没有开启数据库的归档所以不能通过RECOVER的形式找回数据文件最后只能重装本地ORACLE。 …

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题 我们的简约风格&#xff0c;以纯洁的白色和深邃的紫色为主色调&#xff0c;为您提供了一种清新、时尚的浏览体验。在这个简洁而美丽的界面中&#xff0c;您可以轻松畅享各种精彩短视频。我们专注于简单的…

仓储系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;试剂管理&#xff0c;安全管理&#xff0c;存储管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;试剂管理&#xff0c;安全管…

vue29:普通组件的注册使用

<template><div class"App"><!-- 头部组件 --><HmHeader></HmHeader><!-- 主体组件 --><HmMain></HmMain><!-- 底部组件 --><HmFooter></HmFooter><!-- 如果 HmFooter tab 出不来 → 需要配置…

让AI做2024新高考1卷数学最后一题:AI智商横向对比!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

2013年 阿拉斯加巴罗活动层厚度和土壤含水量

Pre-ABoVE: Active Layer Thickness and Soil Water Content, Barrow, Alaska, 2013 ABoVE前&#xff1a;阿拉斯加巴罗活动层厚度和土壤含水量&#xff0c;2013年 简介 文件修订日期&#xff1a;2018-01-10 数据集版本&#xff1a;1 摘要 该数据集提供了 2013 年 8 月在…

泛微开发修炼之旅--13关于在Ecology中实现webservice接口对接异构系统时,出现无法调用接口的方案及源码

文章链接&#xff1a;泛微开发修炼之旅--13关于在Ecology中实现webservice接口对接异构系统时&#xff0c;出现无法调用接口的方案及源码

【数据结构】排序(上)

个人主页~ 堆排序看这篇~ 还有这篇~ 排序 一、排序的概念及应用1、概念2、常见的排序算法 二、常见排序的实现1、直接插入排序&#xff08;1&#xff09;基本思想&#xff08;2&#xff09;代码实现&#xff08;3&#xff09;时间复杂度&#xff08;4&#xff09;空间复杂度 2…

Java日期类Date、SimpleDateFormat 日期格式类、Calendar详细介绍

目录 一、Date类1.1 Date类简单介绍1.2 Date类的构造方法代码演示 二、SimpleDateFormat 日期格式化类2.1 SimpleDateFormat 日期格式化类简单介绍2.2 构造方法代码演示 日期格式化模板常用方法代码演示注意 三、Calendar类3.1 简单介绍3.2 创建对象代码演示 3.3 静态常量3.4 常…

Idea-Linux远程开发部署

第一步&#xff1a;File->Remote Development 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a;在Host位置填写Linux虚拟机的IP地址&#xff0c;在Username、Password填写对应的账号密码后点击Test Connection测试连接。 第五步&#xff1a; 第六步&#xff1a;在…

iCloud完全指南:释放Apple云服务的终极潜力

iCloud是苹果公司提供的云服务&#xff0c;它允许用户存储和同步照片、文档、音乐、应用数据以及更多类型的文件。通过有效利用iCloud&#xff0c;用户可以在不同设备间无缝地访问和编辑内容。本文旨在全面介绍如何高效使用iCloud&#xff0c;确保您能够最大化这一服务的价值。…

【玩转C语言】第四讲--->操作符与循环语句

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 引言&#xff1a; 大家好&#xff0c;我是坊钰&#xff0c;为了让大家深入了解C语言&#xff0c;我开创了【玩转C语言系列】&#xff0c;将为大家介绍C语言相关知识…