从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

    • Redis

    • Mybatis

      • Mybatis 介绍
        • 持久层技术解决方案
        • Mybatis 概述
      • Mybatis 入门案例
      • Mybatis 入门案例-注解
      • Mybatis 入门案例-实现类
      • Mybatis 内部执行原理概述
      • 实现一个微型的 Mybatis-配置文件版
      • 实现一个微型的 Mybatis-注解版
      • Mybatis 实现 CRUD
      • Mybatis 中传递对象参数
      • Mybatis 中的列名和属性名的映射
      • Mybatis 实现 DAO 层的开发
      • Mybatis 实现类的执行过程-查询方法
      • properties 标签的使用及细节
      • typeAliases 标签和 package 标签
      • Mybatis 连接池和事务
      • Mybatis 与 JNDI
      • Mybatis 中的动态 SQL
      • Mybatis 多表查询
      • Mybatis 中的多对多查询
      • Mybatis 的延迟加载
      • Mybatis 的缓存
      • Mybatis 的注解开发-CRUD
      • Mybatis 的注解开发-多表查询
    • Lucene

    • Elasticsearch

    • MQ

    • MyCat

    • Lombok

  • SpringMVC

  • SpringBoot

  • Java
  • 主流框架
  • Mybatis
2023-04-25
目录

Mybatis 介绍

# 0.Mybatis 介绍

Mybatis 是一个很流行的持久层框架

‍

# 持久层技术解决方案

我们之前学习过三层架构的概念。

三层架构

  • 表现层:是用于展示数据的

  • 业务层:是处理业务需求

  • 持久层:是和数据库交互的 ‍ 其中,实现持久层的一些方案有:

  • JDBC:最底层的方案,主要包括 Connection、PreparedStatement、ResultSet 等对象

  • Spring 的 JdbcTemplate:Spring 中对 JDBC 的简单封装

  • Apache 的 DBUtils:和 JdbcTemplate 很像,也是对 JDBC 的简单封装

JDBC 是规范,JdbcTemplate 和 DBUtils 都只是工具类,只做了简单的封装,使用起来还需要做很多的准备工作。

我们来回顾一段 JDBC 程序

public static void main(String[] args) {
  Connection connection = null;
  PreparedStatement preparedStatement = null;
  ResultSet resultSet = null;
  try {
    //加载数据库驱动
    Class.forName("com.mysql.jdbc.Driver");

    //通过驱动管理类获取数据库链接
    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "root");

    //定义 sql 语句 ?表示占位符
    String sql = "select * from user where username = ?";

    //获取预处理 statement
    preparedStatement = connection.prepareStatement(sql);

    //设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的参数值
    preparedStatement.setString(1, "王五");
  
    //向数据库发出 sql 执行查询,查询出结果集
    resultSet = preparedStatement.executeQuery();
  
    //遍历查询结果集
    while(resultSet.next()){
      System.out.println(resultSet.getString("id") 
                + resultSet.getString("username"));
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally{

    //释放资源
    if(resultSet != null){
      try {
        resultSet.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  
    if(preparedStatement != null){
      try {
        preparedStatement.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  
    if(connection != null){
      try {
        connection.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

‍ 使用 JDBC 有如下问题:

  1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,需要自己引入数据库连接池解决
  2. 我们在开发的时候,只关注 SQL 怎么写,其他的并不重要,例如加载驱动类,关闭 ResultSet、Connection 等。而使用 JDBC,为了完成一个简单的查询,需要准备很多很多,都是繁琐的重复的操作
  3. SQL 语句在代码中硬编码,代码不易维护,SQL 有改动就需要改变 Java 代码。
  4. 使用 PreparedStatement 向占有位符号传参数存在硬编码,因为 SQL 语句的 where 条件不一定,可能多也可能少,修改 SQL 还要修改代码,不易维护。
  5. 对结果集解析存在硬编码(查询列名),SQL 变化导致解析代码变化,如果能将数据库记录封装成对象解析比较方便。

# Mybatis 概述

Mybatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC,使开发者只需要关注 SQL 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 Statement、关闭对象等繁杂的过程。

Mybatis 通过 XML 或注解的方式,将要执行的各种 Statement 配置起来,并通过 Java 对象和 Statement 中 SQL 的动态参数进行映射,生成最终要执行的 SQL 语句,最后执行 SQL 并将结果映射为 Java 对象并返回,大大简化了持久层的开发!

Mybatis 采用 ORM 思想解决了实体和数据库映射的问题,对 JDBC 进行了封装,屏蔽了 JDBC 底层访问细节,使我们不用与 JDBC API 打交道,就可以完成对数据库的持久化操作。

什么是 ORM:ORM 全称 Object Relational Mappging 对象关系映射,简单的说:就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。

例如有一个数据库表 user,有 id 列和 user_name 列; 而我们可以定义一个 JavaBean,类名 User,类的成员有 ID 和 user_name,Mybatis 可以自动帮我们完成 数据库表记录,和对象的转换!我们可以将对象当作是数据库表的一条记录,通过操作对象的方法(查询,更新,删除)来完成对数据库表记录的增删改查。

我们后续来通过一个 Mybatis 的案例来加深对 Mybatis 的理解。 ‍ Mybatis 的前身是 iBatis,所以我们后续使用 Mybatis 的过程中,看到了 iBatis,也无需奇怪 ‍

上次更新: 2025/5/5 17:15:09
Redis 小实验
Mybatis 入门案例

← Redis 小实验 Mybatis 入门案例→

最近更新
01
吐槽一下《僵尸校园》
05-15
02
2025 年 4 月记
04-30
03
山西大同 “订婚强奸案” 将会给整个社会带来的影响有多严重? - 知乎 转载
04-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式