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 的安装过程。如果你觉得这些内容对你有帮助,请给予点赞和关注。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++11新特性【上】(统一的列表初始化、auto、decltype、右值引用、万能引用、完美转发)

一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合…

攻防世界---misc---BotW-

1、下载附件是一张图片 2、查看图片属性&#xff0c;用winhex分析&#xff0c;没有发现奇怪的地方&#xff0c;用binwalk&#xff0c;接着使用foremost 3、得到两张图片&#xff0c;一张是原图&#xff0c;一张是特殊的字符 4、经过查阅资料得知&#xff0c;这是希卡文字&#…

《庆余年》角色穿越高考:谁将笑傲现代考场?

一、引言 《庆余年》是一部以古代中国为背景的权谋小说&#xff0c;其角色们各具特色&#xff0c;聪明才智、武艺高强、忠诚耿直等特质使得他们在古代世界中游刃有余。然而&#xff0c;如果我们将这些角色置于现代高考的背景之下&#xff0c;他们将如何面对这一挑战&#xff1…

Llama模型家族之Stanford NLP ReFT源代码探索 (三)reft_model.py代码解析

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

【题解】—— LeetCode一周小结23

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结22 3.分糖果 II 题目链接&#xff1a;1103. 分糖果 II 排排坐…

Switch 之 H3C S5500

System # system view <H3C> system‐view [H3C] quit <H3C># display version [H3C]display version H3C Comware Software, Version 7.1.045, Release 3116# configuration save <H3C> save <H3C> display current‐configuration # factory reset …

Elasticsearch 认证模拟题 - 17

这两道题目非常具有代表性&#xff0c;分别是跨集群复制和跨集群检索&#xff0c;需要相应的 许可 这里在虚拟机上搭建集群完成这两道题目&#xff0c;这里补充一下 elasticsearch 和 kibana 的配置文件 # elasticsearch.yml cluster.name: cluster2 node.name: cluster2-node…

4.大模型微调技术LoRA

大模型低秩适配(LoRA)技术 现有PEFT 方法的局限与挑战 Adapter方法,通过增加模型深度而额外增加了模型推理延时。Prompt Tuning、Prefix Tuning、P-Tuning等方法中的提示较难训练,同时缩短了模型可用的序列长度。往往难以同时实现高效率和高质量,效果通常不及完全微调(f…

【成品设计】基于单片机的智慧交通控制系统设计

《基于单片机的智慧交通控制系统设计》 所需器件&#xff1a; STM32最小系统板。按键模块。红黄绿LED灯柱。距离传感器。OLED屏幕。语音识别模块。 整体功能&#xff1a; 本文介绍了一种基于单片机的智慧交通控制系统设计。该系统集成了多种传感器、控制器和执行器&#xf…

[Llama3] ReAct Prompt 测试实验

ReAct 是一种 LLM 提示和结果处理方法&#xff0c;结合了推理、行动计划和知识源整合&#xff0c;使 LLM 超越其语言模型&#xff0c;并在预测中使用来自现实世界的信息。 ReAct 是推理和行动的结合。 介绍 ReAct 的论文表明它比思维链提示更好。与后者不同的是&#xff0c;Re…

【数据结构】【版本1.0】【线性时代】——顺序表

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、顺序表的概念1.1 最基础的数据结构&#xff1a;数组1.2 数组与顺序表的区别 二、静态顺序表三、动态…

基于STM32F030设计的多点温度采集系统(BC26+OneNet)

一、项目背景 随着物联网技术的迅猛发展&#xff0c;越来越多的智能设备应运而生&#xff0c;而温度采集系统是其中重要的一类。在现代工业和家庭生活中&#xff0c;温度对于生产、居住和储存等过程的控制有着非常重要的作用。因此&#xff0c;准确地采集环境温度数据并进行处…

Ubuntu基础 - 常用命令

目录 一.打开终端 1.快捷键 2.右键桌面 3.应用程序管理 二. 常用命令 1. ls命令 2. cd 命令 3. pwd 命令 4. mkdir 命令 5. rm 命令 和 rmdir 命令 6. mv 命令 7. cp 命令 8. touch 9. more 命令 less 命令 10. echo > 前言:大家好,这是一篇ubuntu常用的基…

进程概念(二)

目录 进程优先级基本概念查看系统进程PRI and NIPRI vs NI修改进程优先级的命令renice修改优先级进程其他概念 环境变量基本概念查看环境变量方法常见环境变量PATHHOMESHELL 查看环境变量环境变量相关的命令 环境变量特征命令行参数main函数中的俩个参数 argc argvmain函数的第…

机器学习--生成式模型和判别式模型的具体分析

文章目录 生成式模型和判别式模型的具体分析生成式模型定义工作原理优点缺点常见模型 判别式模型 总结生成式模型判别式模型 生成式模型和判别式模型的具体分析 生成式模型和判别式模型在机器学习中有着不同的目标、应用场景和性能特点。以下将详细分析它们的定义、工作原理、…

Golang-分离式加载器(传参)AES加密

目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…

【Vue】核心概念 - module

目标 掌握核心概念 module 模块的创建 问题 由于使用单一状态树&#xff0c;应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时&#xff0c;store 对象就有可能变得相当臃肿。 这句话的意思是&#xff0c;如果把所有的状态都放在state中&#xff0c;当项目变得…

解锁ChatGPT:从GPT-2实践入手解密ChatGPT

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

虚拟机开启网络代理设置

前言&#xff1a; 不管是物理主机还是实验环境中的VMware虚拟机&#xff0c;有时候总要访问一些镜像网站或者资源网站拉取一些学习资料&#xff0c;但由于国内外网络环境的差异和网络安全的问题。总是会被阻拦。物理机相对比较容易一些&#xff0c;今天我们来说一说虚拟机应该…

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

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