Java学习 - MyBatis - 初识MyBatis

前言

什么是持久化

持久化是将程序数据在持久状态和瞬时状态间转换的机制,将数据保存到可永久保存的存储设备中。最常见的就是将内存中的对象存储在数据库中,或者存在磁盘文件、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.mzph.cn/diannao/25657.shtml

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

相关文章

【实战JVM】-实战篇-06-GC调优

文章目录 1 GC调优概述1.1 调优指标1.1.1 吞吐量1.1.2 延迟1.1.3 内存使用量 2 GC调优方法2.1 发现问题2.1.1 jstat工具2.1.2 visualvm插件2.1.3 PrometheusGrafana2.1.4 GC Viewer2.1.5 GCeasy 2.2 常见GC模式2.2.1 正常情况2.2.2 缓存对象过多2.2.3 内存泄漏2.2.4 持续FullGC…

SpringBoot个人网盘系统-计算机毕业设计源码92922

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势或改善自身的缺点&#xff0c;互联网的发展文件管理带来了福音。个人网盘系统是以实际运用为开发背景&#xff0c;运用软件工程原理和…

⌈ 传知代码 ⌋ 【CLIP】文本也能和图像配对

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

Github 2024-06-10 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目2Go项目2PHP项目1Blade项目1TypeScript项目1Lua项目1Dart项目1Swift项目1Cuda项目1Python项目1MDX项目1Ventoy: 100%开源的可启动USB解决方…

超越出身与学府:揭秘成功者共有的七大特质

在当今多元化的世界里&#xff0c;个人成功的故事如同繁星点点&#xff0c;照亮了无数追梦者的前行之路。新东方创始人俞敏洪先生曾深刻地指出&#xff0c;真正的成功并不取决于家庭背景的显赫与否&#xff0c;也不在于就读大学的名气大小&#xff0c;而是深深植根于个人内在的…

VMware Workstation虚拟机固定IP配置(主机互通、外网可访问)

VMware Workstation虚拟机固定IP配置 环境问题配置过程配置虚拟机网络适配器配置虚拟机网络配置虚拟网卡网络适配器配置虚拟机固定IP 结果验证结束语参考 环境 主机&#xff1a;Windows 11 VMware Workstation: 17.5.2 虚拟机&#xff1a;Ubuntu 24.02 LTS 注&#xff1a; 主…

DeepSpeed Huggingface模型的自动Tensor并行

推理阶段。在后台&#xff0c;1. DeepSpeed会把运行高性能kernel(kernel injection)&#xff0c;加快推理速度&#xff0c;这些对用户是透明的&#xff1b; 2. DeepSpeed会根据mp_size来将模型放置在多个GPU卡上&#xff0c;自动模型并行&#xff1b; import os import torch …

【数据结构】前缀树(字典树)汇总

基础 {“a”,“abc”,“bac”,“bbc”,“ca” }的字典树如下图&#xff1a; 最主用的应用&#xff1a;一&#xff0c;字符串编码。二&#xff0c;位运算。 字符串编码 相比利用哈希映射编码&#xff0c;优点如下&#xff1a; 依次查询长度为n的字符串s的前缀时间复杂度是O(…

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

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

⌈ 传知代码 ⌋ 多模态COGMEN详解

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【Vue】智慧商城

步骤一般都是&#xff1a; 静态结构 > 封装接口 > 路由获取参数 > 获取数据 动态渲染 先封装接口再路由获取参数的原因是因为&#xff0c;只有先封装好了接口&#xff0c;才能知道我们需要哪些参数 接口文档&#xff1a;https://apifox.com/apidoc/shared-12ab6b18-a…

Java——IO流(一)-(2/9):File类的常用方法(判断文件类型、获取文件信息、创建删除文件、遍历文件夹)

目录 常用方法1&#xff1a;判断文件类型、获取文件信息 方法 实例演示 常用方法2&#xff1a;创建文件、删除文件 方法 实例演示 常用方法3&#xff1a;遍历文件夹 方法 实例演示 常用方法1&#xff1a;判断文件类型、获取文件信息 方法 File提供的判断文件类型、获…

【C#线程设计】3:threadpool

实现&#xff1a; &#xff08;1&#xff09;.控件&#xff1a;group Box&#xff0c;text Box&#xff0c;check Box&#xff0c;label&#xff0c;botton&#xff0c;richtextbox 控件拉取见&#xff1a;https://blog.csdn.net/m0_74749240/article/details/139409510?spm1…

插卡式仪器模块:数据记录模块(插卡式)

• 32 位分辨率 • 250 KSPS 采样率 • 可以同时并且连续地记录两个通道的电压输入 • 实时上传原始数据至 PC 端 通道22输入阻抗电压22 kΩ10 MΩ电流0.2 Ω输入范围电压 250 mV 4.5 V电流1.5 A耦合DCDC带宽450 Hz385 HzADC 分辨率32 Bits24 Bits采样率10 kSPS250 kSPS测量…

kafka集成SpringBoot api编写教程

1.新建项目 用的idea是20222.1.3版本&#xff0c;没有Spring Initializr 插件&#xff0c;不能直接创建springboot项目 可以在以下网址创建项目&#xff0c;下载后解压&#xff0c;然后用idea打开项目即可 1.1 在 https://start.spring.io/ 上创建项目 1.2上传到linux&#x…

知识图谱的应用---智能公安

文章目录 智慧公安典型应用 智慧公安 智能公安是利用互联网、物联网、人工智能、云计算、智能引擎、视频技术、知识图谱等技术为支撑&#xff0c;以公安信息化为核心&#xff0c;通过互联化、物联化、智能化的方式&#xff0c;促进公安系统各个功能模块高度集成、协调运作&…

stm32之USMART调试组件的使用

一、什么是USMART? USMART是正点原子团队为其STM32开发平台开发的一种类似linux的shell的调试工具。具体工作过程是通过串口发送命令给单片机&#xff0c;然后单片机收到命令之后调用单片机里面对应的相关函数&#xff0c;并执行&#xff0c;同时支持返回结果。 二、USMART调…

ReactRouter——路由配置、路由跳转、带参跳转、新route配置项

目录 写在前面 (一)初步使用router 1.安装react-router-dom 2.创建router结构 3.嵌套路由 4.配置not found页面 (1)确切路由报错页面 (2)未配置路由报错页面 5.重定向 (二)路由跳转 1.组件跳转 2.NavLink 3.js跳转 (三)传递参数 1.searchParams(query)参数 2…

这两款kimi和豆包插件,用来辅助文献阅读和总结,太香了!娜姐亲测好用

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 ChatGPT刚出来的时候&#xff0c;几款速读PDF的AI工具ChatDoc、ChatPDF也跟着火了起来&#xff0c;可见大家对于速读文献、总结文档需求很高。 我记得ChatPDF只有几次免费机会…