springboot第13集:MyBatis讲解

2023-10-08 18:19:20 浏览数 (1)

MyBatis 是一个非常好用的持久层框架,它可以帮助我们更方便地进行数据库操作。使用 MyBatis 可以省略大量 JDBC 代码和手动设置参数、获取结果集的过程,从而让我们能够更专注于业务逻辑的实现。我们可以使用简单的 XML 或注解来配置和映射原生信息,并且将 Java 实体类映射成数据库中的记录,这样我们就可以方便地进行增删改查等操作了。所谓的 Plain Old Java Objects,指的是普通的 Java 对象,也就是我们平时写的 Java 类。

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

持久化

持久化是将程序数据在内存与外部存储设备之间转换的过程,这个过程有助于解决内存数据丢失、空间限制等问题。JDBC 和文件 IO 都是常见的持久化机制,而 MyBatis 就是一种优秀的持久层框架,它能够帮助我们更方便地进行数据库操作,避免手动编写大量复杂的 JDBC 代码和参数设置。

  • 持久化是将程序数据在持久状态和瞬时状态间转换的机制。

持久化是一种将程序数据从内存中保存到外部设备(如磁盘、数据库等)中的机制,以便在程序重新启动或计算机断电时仍能保留数据。持久化的主要应用是将内存中的对象存储在数据库中或者存储在磁盘文件、XML 数据文件等格式中。JDBC 和文件 IO 是实现持久化的常见方式,而 MyBatis 则是一个优秀的持久层框架,它可以帮助我们更方便地访问数据库中的数据。在生活中,将鲜肉冷藏或把水果做成罐头都是实现持久化的方法。

  • 为什么需要持久化服务呢?那是由于内存本身的缺陷引起的

需要持久化服务是因为内存本身存在缺陷。内存断电后数据会丢失,但有些对象(如银行账号等)必须永久保存,人们无法保证内存始终通电。此外,与硬盘、光盘等外存相比,内存昂贵且容量有限,即使对象不需要永久保存,也需缓存在外存中以释放内存空间。持久化服务能够将应用程序的数据保存到外部设备中,确保数据在计算机重启或断电后仍然存在,并能缓解内存容量不足的问题。

什么是持久层?

在大多数情况下,特别是企业级应用中,数据持久化通常意味着将内存中的数据保存到磁盘上以固化数据,并且这一过程往往通过关系数据库等方式完成。完成持久化工作的代码块通常被称为 DAO(数据访问对象),负责实现与数据库的交互和数据的 CRUD(增删改查)操作。然而,需要强调的是“层”的概念。对于应用系统而言,数据持久化功能通常是不可或缺的组成部分,因此我们的系统已经天然地具备了“持久层”概念。之所以要强调“持久层”,而不是“持久模块”或“持久单元”,是因为我们的系统架构中应该有一个相对独立的逻辑层面,专注于实现数据持久化逻辑。相对于系统的其他部分而言,这个层面应该具有明确严格的逻辑边界。

MyBatis是一个半自动化的ORM框架,即对象关系映射。它帮助程序员将数据存入数据库并从数据库取出数据。传统的JDBC操作存在很多重复代码块,如数据取出时的封装以及数据库建立连接等,通过使用MyBatis框架,可以减少这些重复代码,提高开发效率。

虽然所有的事情都不需要MyBatis才能实现,但是使用它会让实现更加简单。

MyBatis具有以下优点:

  1. 简单易学:MyBatis本身就非常小巧且简单,没有任何第三方依赖。最简单的安装只需要两个JAR文件和配置几个SQL映射文件即可。它易于学习和使用,通过文档和源代码,可以比较完全地掌握其设计思路和实现方法。
  2. 灵活:MyBatis不会对应用程序或数据库的现有设计强加任何影响。SQL写在XML文件中,方便统一管理和优化。通过SQL语句,可以满足操作数据库的所有需求。
  3. 解除SQL与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰、易于维护和单元测试。SQL和代码的分离提高了系统的可维护性。
  4. 提供XML标签,支持编写动态SQL。

编写Mapper接口类

代码语言:javascript复制
import com.da.pojo.User;
import java.util.List;
public interface UserMapper {
    List<User> selectUser();
}

编写Mapper.xml配置文件

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.da.dao.UserMapper">
  <select id="selectUser" resultType="com.da.pojo.User">
    select * from user
  </select>
</mapper>
select
  • select标签是mybatis中最常用的标签之一
  • select语句有很多属性可以详细配置每一条SQL语句
    • SQL语句返回值类型。
    • 传入SQL语句的参数类型 。
    • 命名空间中唯一的标识符
    • 接口中的方法名与映射文件中的SQL语句ID 一一对应
    • id
    • parameterType
    • resultType

在UserMapper中添加对应方法

代码语言:javascript复制
public interface UserMapper {
    //查询全部用户
    List<User> selectUser();
    //根据id查询用户
    User selectUserById(int id);
}

在UserMapper.xml中添加Select语句

代码语言:javascript复制
<select id="selectUserById" resultType="com.da.pojo.User">
  select * from user where id = #{id}
</select>

未完待续下一期见

仓库地址:https://github.com/webVueBlog/JavaGuideInterview

0 人点赞