【Spring Boot】数据库持久层框架MyBatis — MyBatis简介

MyBatis简介

本节首先会介绍什么是ORM、什么是MyBatis、MyBatis的特点以及核心概念,最后介绍MyBatis是如何启动、如何加载配置文件的?

1.什么是ORM

ORM(Object Relational Mapping,对象关系映射)是为了解决面向对象与关系数据库存在的互不匹配现象的一种技术。简单地说,ORM通过使用描述对象和数据库之间映射的元数据将程序中的对象自动持久化到关系数据库中。

当我们开发应用程序时,需要编写大量的数据访问层代码,用来操作数据库中的数据,这些代码要么是大量重复的代码,要么操作特别烦琐。针对这些问题,ORM提供了完善的解决方案,简化了将对象持久化到关系数据库中的操作。

ORM框架的本质是简化编程中操作数据库的编码,Java领域发展到现在,ORM框架层出不穷,但是,基本上还是Hibernate和Mybatis两个比较流行并被广泛使用。

Hibernate:全自动的框架,强大、复杂、笨重、学习成本较高。

Mybatis:半自动的框架(需要开发者了解数据库),必须要自己写SQL。

Hibernate宣称可以不用写一句SQL,而MyBatis以动态SQL见长,两者各有特点,开发者可以根据需求灵活使用。

有一个有趣的现象:传统企业大多喜欢使用Hibernate,而互联网行业则通常使用MyBatis。

2.什么是MyBatis

MyBatis是一款优秀的数据持久层ORM框架,被广泛地应用于应用系统。最早是Apache的一个开源项目iBatis,2010年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为MyBatis,2013年11月又迁移到了GitHub。

MyBatis支持定制化的SQL、存储过程和高级映射,能够非常灵活地实现动态SQL,可以使用简单的XML或注解来配置和映射原生信息,能够轻松地将Java的POJO(Plain Ordinary Java Object,普通的Java对象)与数据库中的表和字段进行映射关联。

MyBatis作为一款使用广泛的开源软件,它的特点如下:

易学易用,没有任何第三方依赖。

SQL被统一提取出来,便于统一管理和优化。

SQL和代码解耦,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易进行单元测试。

灵活动态的SQL,支持各种条件来动态生成不同的SQL。

提供映射标签,支持对象与数据库的ORM关系映射。

提供对象关系映射标签,支持对象关系组件维护。

3.MyBatis的核心概念

MyBatis由Mapper配置文件、Mapper接口、执行器、会话等组件组成。下面就来介绍这些非常重要的组件和概念。

1)Mapper配置文件:可以使用基于XML的Mapper配置文件来实现,也可以使用基于Java注解的MyBatis注解来实现,甚至可以直接使用MyBatis提供的API来实现。

2)Mapper接口:是指自定义的数据操作接口,类似于通常所说的DAO接口。早期的Mapper接口需要自定义去实现,现在MyBatis会自动为Mapper接口创建动态代理对象。Mapper接口的方法通常与Mapper配置文件中的select、insert、update、delete等XML节点一一对应。

3)Executor(执行器):MyBatis中所有SQL语句的执行都是通过Executor进行的,Executor是MyBatis的一个核心接口。

4)SqlSession(会话):MyBatis的关键对象,类似于JDBC中的连接(Connection),SqlSession对象完全包含数据库相关的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句。

5)SqlSessionFactory(会话工厂):MyBatis的关键对象,它是单个数据库映射关系经过编译后的内存镜像。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得。

6)SqlSessionFactoryBuilder构建器:用于解析配置文件,包括属性配置、别名配置、拦截器配置、数据源和事务管理器等,可以从XML配置文件或一个预定义的配置实例进行构建。

4.MyBatis的启动流程

MyBatis的使用虽然简单,但是,它属于高度封装的框架,因此,我们必须熟悉MyBatis的启动和执行过程。具体的工作流程如图所示。

在这里插入图片描述

1)加载Mapper配置的SQL映射文件,或者注解的相关SQL内容。

2)创建会话工厂。MyBatis通过读取配置文件的数据源信息来构造会话工厂(SqlSessionFactory)。

3)创建会话。MyBatis可以通过会话工厂来创建会话对象(SqlSession),会话对象是一个接口,该接口中包含对数据库操作的增、删、改、查方法。

4)创建执行器。因为会话对象本身不能直接操作数据库,所以它使用了一个叫作数据库执行器(Executor)的接口来帮它执行操作。

5)封装SQL对象。在这一步,执行器将待处理的SQL信息封装到一个对象(MappedStatement)中,该对象包括SQL语句、输入参数映射信息(Java简单类型、HashMap或POJO)和输出结果映射信息。

6)操作数据库。拥有了执行器和SQL信息封装对象就可以使用它们访问数据库,最后返回操作结果,结束流程。

总结起来,MyBatis主要有两大核心组件:SqlSessionFactory和Mapper。SqlSessionFactory负责创建数据库会话,Mapper主要提供SQL映射。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LoginPage.vue中的form

const form ref() const login async () > {await form.value.validate()const res await userLoginService(formModel.value)console.log(res)UserStore.setToken(res.data.token)ElMessage.success(登录成功)router.push(/) }<el-form:model"formModel":r…

高亮img、pdf重点部分(html2canvas、pdfjs-dist、react-pdf)

可用业务场景 报销单据审批中&#xff0c;高亮发票部分 需求 后台返回一张图片或者pdf、返回一组坐标&#xff0c;坐标类型[number,number,number,number]&#xff0c;分别代表了x、y、width、height。需要根据坐标在图片上高亮出来坐标位置。如下图 高亮的坐标是&#xff1…

Android 权限机制与及运行时权限申请示例

一、Android 权限机制 安装时权限声明 权限机制说明 安装软件时弹出软件所需要申请的全部权限&#xff0c;如果用户认可软件申请的权限&#xff0c;就会继续安装软件&#xff1b;如果用户不认可所申请的权限&#xff0c;就可以拒绝安装。 实现方式 在 AndroidManifest.mxl …

linux————keepalived+LVS(DR模式)

一、作用 使用keepalived解决LVS的单点故障 高可用集群 二、 调度器配置 环境 两台LVS服务 一主一备 两台web服务 采用nginx &#xff08;实现LVS负载均衡&#xff09; 服务ip 主LVS 192.168.100.3 备LVS 192.168.100.6 web1 192.…

nestjs:docker build时执行npm install sharp提示downloading libvips socket hang up

问题&#xff1a; 如题 参考&#xff1a; sharp - High performance Node.js image processing 参考chinese-mirror处理 原因&#xff1a; 默认是从github上下载libvips库&#xff0c;但是使用socket协议&#xff0c;linux下不挂载梯子是无法加速的&#xff0c;因此得更换下镜像…

创作2周年纪念日-特别篇

创作2周年纪念日-特别篇 1. 与CSDN的机缘2. 收获3. 憧憬 1. 与CSDN的机缘 很荣幸&#xff0c;在大学时候&#xff0c;能够接触到CSDN这样一个平台&#xff0c;当时对嵌入式开发、编程、计算机视觉等内容比较感兴趣。后面一个很偶然的联培实习机会&#xff0c;让我接触到了Pych…

中国平台软件市场研究报告:OceanBase为金融行业国产分布式数据库销售额第一

近日&#xff0c;《2022-2023年度中国平台软件市场研究报告》&#xff08;以下简称“报告”&#xff09;发布&#xff0c;报告对包括数据库、操作系统等在内的平台软件市场发展进行了分析。报告指出&#xff0c;在对平台软件需求增长最快的金融行业&#xff0c;OceanBase已占据…

音频母带制作::AAMS V4.0 Crack

自动音频母带制作简介。 使用 AAMS V4 让您的音乐听起来很美妙&#xff01; 作为从事音乐工作的音乐家&#xff0c;您在向公众发布材料时需要尽可能最好的声音&#xff0c;而为所有音频扬声器系统提供良好的商业声音是一项困难且耗时的任务。AI掌握的力量&#xff01; 掌控您…

关系型数据库与非关系型数据库类比

关系型数据库和非关系型数据库都有多种不同类型&#xff0c;每种类型都针对不同的数据存储需求和使用场景。以下是一些常见的关系型数据库和非关系型数据库类型&#xff1a; 关系型数据库类型&#xff1a; MySQL&#xff1a; 一种开源的关系型数据库管理系统&#xff0c;用于处…

Android studio APK切换多个摄像头(Camera2)

1.先设置camera的权限 <uses-permission android:name"android.permission.CAMERA" /> 2.布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"and…

Spring redis使用报错Read timed out排查解决

文章目录 使用场景报错信息解决方式 使用场景 我们使用redis作为缓存服务&#xff0c;缓存一些业务数据&#xff0c;如路口点位信息、渠化信息、设备信息等有一些需要实时计算的数据&#xff0c;缓存在redis里&#xff0c;如实时信号周期相位、周期内过车数量等有需要不同服务…

三分钟深入了解threejs的常见面试知识点

前序 由于金九银十准备到了。而且自己也有threejs的项目&#xff0c;但是threejs的面试知识点了解的比较少&#xff0c;然后就去学习了一些面试常见知识点&#xff0c;以备不时之需&#xff0c;用于记录的同时也可以通过了解这些知识点同时也能提高对threejs更多的认知。虽然没…

Druid配置类、Dubbo配置类、Captcha配置类、Redis配置类、RestTemplate配置类

DruidConfig配置类package com.xdclass.app.config;import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.beans.factory.annotation.V…

Nodejs+Typescript+Eslint+Prettier+Husky项目构建

NodejsTypescriptEslintPrettierHusky项目构建 准备工作初始化项目Eslint安装和配置Prettier安装和配置在Eslint中使用Prettier插件Husky安装和配置修改tsconfig.json启用表示src目录 修改package.json设置vscode调试 仓库地址 准备工作 确保已经安装了git以及Node.js和npm&a…

docker高级(redis集群三主三从)

1. 新建6个docker容器redis实例 docker run -d --name redis-node-1 --net host --privilegedtrue -v /redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381docker run -d --name redis-node-2 --net host --privilegedtrue -v /…

在 Windows 下使用 conda 的一些注意点

之前一直使用 MacOS 或者 Ubuntu 作为开发环境&#xff0c;最近因为某些特殊原因需要转为使用 Window 作为开发环境。遇到的第一个问题就是不同开发工具的多环境管理。本文是关于 Windows 下使用 conda 的一些记录&#xff0c;关于如何在 Linux 做多环境管理&#xff0c;可以参…

Linux驱动开发:技术、实践与Linux的历史

一、引言 Linux&#xff0c;这个开源的操作系统&#xff0c;已经在全球范围内赢得了开发者和企业的广泛支持。它的强大之处在于其内核以及无数的驱动程序&#xff0c;这些驱动程序使得各种硬件设备可以在Linux操作系统上运行。本篇文章将深入探讨Linux驱动开发&#xff0c;包括…

JVM 访问对象的两种方式

Java 程序会通过栈上的 reference 数据来操作堆上的具体对象。由于 reference 类型在《Java 虚拟机规范》里面只规定了它是一个指向对象的引用&#xff0c;并没有定义这个引用应该通过什么方式去定位、访问到堆中对象的具体位置&#xff0c;所以对象访问方式也是由虚拟机实现而…

酒店资产如何管理提升资产利用效率

酒店资产管理系统是一种专门为酒店行业设计的管理软件&#xff0c;可以帮助酒店实现资产的全生命周期管理。一个好的酒店资产管理系统应该具备以下功能&#xff1a;  资产登记&#xff1a;可以对酒店的各种资产进行登记&#xff0c;包括房间、家具、设备等&#xff0c;记录资…

EasyExcel+POI制作带有有效性校验及下拉联动的Excel模板

文章目录 1.背景2.实现功能的Excel特性2.1.特性介绍2.2.下拉框联动2.3.单元格自动匹配Id2.4.错误提示 3.代码实现3.1.基础流程代码3.2.名称管理器配置3.3.有效性配置3.4.函数填充3.5.其他补充 4.总结 1.背景 最近在做一个CRM系统的人员销售目标导入的相关需求&#xff0c;需要…