前言
什么是持久化
持久化是将程序数据在持久状态和瞬时状态间转换的机制,将数据保存到可永久保存的存储设备中。最常见的就是将内存中的对象存储在数据库中,或者存在磁盘文件、XML
数据文件中等等。其中,文件 IO
属于持久化机制,而 JDBC
也是一种持久化机制。
为什么需要持久化
持久化是必要的,因为内存存在一些固有的缺陷。内存可能会因为外部因素而丢失数据,而有些数据是我们必须保留的,且我们无法完全避免外界因素的干扰。此外,内存的成本相对较高,与硬盘、光盘等外部存储介质相比,其价格和维护成本都要高得多。因此,我们需要寻找其他存储数据的方法,持久化便是解决方案之一,它允许我们将数据存储到外部存储介质中,以减少成本。
什么是持久层
持久层,也称为 dao
层(DAO
即数据访问对象),是专门负责数据持久化的代码部分。它主要负责将数据从内存持久化到磁盘,通常通过关系数据库实现。此层在架构中扮演着具有明确逻辑界限的角色。
什么是 MyBatis
为什么不用 JDBC?
针对数据库操作,Java
其实已经提供了相应的解决方案 – JDBC
。那既然已经有了现成的工具,那为什么还会有 MyBatis
的出现呢?
虽然 JDBC
提供了对数据库操作的解决方案,但是存在着如下问题:
-
数据库连接的频繁创建和释放造成了一定程度上的资源浪费,从而影响到系统性能,但如果使用数据库连接池就能在一定程度上缓解该问题;
-
SQL
语句在代码中出现,会造成代码不易维护; -
使用
preparedStatement
向占位符传递参数时存在硬编码,也会进一步加大系统维护的难度; -
对结果集进行解析时存在硬编码,
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 安装
- 首先下载最新版本 MyBatis;
- 解压下载好的安装包,将
mybatis-xxx.jar
放到你项目的类路径下(classpath);
- 如果是 Maven 项目,在
pom.xml
中添加如下依赖即可;
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
最后
今天的内容围绕持久化展开,首先介绍了持久化的概念,然后对 MyBatis 进行了简要说明,解释了使用 MyBatis 的原因,最后讲述了 MyBatis 的安装过程。如果你觉得这些内容对你有帮助,请给予点赞和关注。