当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL数据库---LIMIT、EXPLAIN详解
  • jmeter并发测试
  • C++中实现一个泄漏检测工具
  • 软考初级网络管理员_01_计算机系统基础知识(硬件)单选题
  • 车载电子电气架构 --- 车载信息安全
  • 优思学院|谈汽车零部件企业生产精益及现场管理
  • 如何做好电子内窥镜的网络安全管理?
  • Leetcode 3179. Find the N-th Value After K Seconds
  • 新手上路:Linux虚拟机创建与Hadoop集群配置指南①(未完)
  • 一个开源的Office软件,很离谱的办公神器
  • dos命令---根据端口查找进程
  • mysql 定时执行 查询动态表名插入汇总表的sql
  • JAVA:在IDEA引入本地jar包的方法并解决打包scope为system时发布无法打包进lib的方案
  • IO缓冲流
  • react基础学习 JSX
  • 345-反转字符串中的元音字母
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • extjs4学习之配置
  • JavaScript设计模式之工厂模式
  • JAVA并发编程--1.基础概念
  • Java方法详解
  • jquery ajax学习笔记
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • React-flux杂记
  • SQL 难点解决:记录的引用
  • uni-app项目数字滚动
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 高程读书笔记 第六章 面向对象程序设计
  • 面试总结JavaScript篇
  • 一道闭包题引发的思考
  • 一天一个设计模式之JS实现——适配器模式
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​数据链路层——流量控制可靠传输机制 ​
  • ‌JavaScript 数据类型转换
  • # Panda3d 碰撞检测系统介绍
  • # 职场生活之道:善于团结
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (c语言)strcpy函数用法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (多级缓存)缓存同步
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (九)c52学习之旅-定时器
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十六)串口UART
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)大型网站的系统架构
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .NET 8 跨平台高性能边缘采集网关
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法