MyBatis的基本概念和核心组件
MyBatis的基本概念
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
MyBatis的特点
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的ORM字段关系映射。
- 提供对象关系映射标签,支持对象关系组建维护。
- 提供xml标签,支持编写动态sql
MyBatis架构
我们把MyBatis架构分为三层
- API接口层的主要作用
- 定义接口方法:API接口层主要用于定义与数据库交互的方法。通常,每个接口方法对应一条SQL语句或一组相关的SQL语句,用于执行查询、插入、更新或删除等数据库操作
- 参数传递:API接口层可以定义方法的输入参数,用于传递查询条件、更新数据等操作所需的参数。MyBatis提供了各种方式来传递参数,包括基本类型、对象、Map等。
- 结果映射:API接口层可以定义方法的返回类型,用于接收数据库操作的结果。MyBatis支持将查询结果映射为Java对象或集合,并提供了丰富的结果映射规则和配置方式。
- SQL语句映射:API接口层可以通过注解或XML配置的方式,将SQL语句与接口方法进行映射。这样,在调用接口方法时,MyBatis会自动执行对应的SQL语句,并将结果返回给调用方。
- 事务支持:API接口层可以通过注解或XML配置的方式,添加事务的支持。这样,在接口方法执行期间,可以保证数据库操作的原子性,保证数据的一致性和完整性。
- 数据处理层的主要作用
- 定义映射关系:数据处理层使用映射文件或注解来定义数据库表与Java实体对象的映射关系。这些映射关系包括表名、字段名、主键、关联关系等。通过定义映射关系,MyBatis可以将查询结果自动映射为Java对象。
- 编写SQL语句:数据处理层使用SQL语句来执行数据库的增删改查操作。SQL语句可以使用MyBatis提供的映射文件或注解来定义,也可以使用动态SQL来实现灵活的条件查询。SQL语句可以包括普通的SQL语句、参数占位符、动态条件等。
- 执行数据库操作:数据处理层使用Mapper接口来执行数据库操作。Mapper接口定义了与数据库操作相关的方法,例如插入数据、更新数据、删除数据、查询数据等。通过调用Mapper接口的方法,可以执行对应的SQL语句并返回结果
- 事务管理:数据处理层可以通过注解或配置文件来管理事务。在需要保证多个数据库操作的原子性时,可以使用事务管理来确保数据的一致性和完整性。MyBatis提供了多种方式来配置和管理事务,例如使用注解、使用AOP、使用XML配置等。
- 基础支撑层的主要作用
- 数据源管理:基础支撑层负责管理应用程序连接数据库的数据源。它可以配置和管理连接池,提供数据库连接的分配和释放,以及数据库事务的管理等。
- SQL语句执行:基础支撑层提供了执行SQL语句的能力。它负责将SQL语句和参数传递给数据库,并获取执行结果。它还负责处理SQL语句的预编译、占位符替换、结果集的映射等操作。
- 对象-关系映射:基础支撑层负责将数据库中的记录映射为Java对象。它可以根据配置或注解,自动将查询结果集映射为Java对象,并提供对象与数据库记录之间的转换功能。
- 缓存管理:基础支撑层提供了缓存机制,用于提高数据库访问性能。它可以缓存查询结果,避免重复访问数据库,提高响应速度。MyBatis提供了不同级别的缓存配置,包括一级缓存和二级缓存。
- 异常处理:基础支撑层处理数据库操作过程中可能出现的各种异常,如数据库连接异常、SQL语句执行异常、事务回滚等。它负责将异常转换为可读的错误信息,并提供异常处理机制。
MyBatis核心组件
- SqlSessionFactory:SqlSessionFactory是MyBatis的核心接口之一,它负责创建SqlSession对象。SqlSession是与数据库交互的主要入口,通过SqlSessionFactory可以获取SqlSession实例,然后进行数据库操作。
- SqlSession:SqlSession是MyBatis与数据库交互的关键组件,它提供了执行SQL语句、获取映射器(Mapper)、管理事务等功能。通过SqlSession,可以执行数据库的增删改查操作,并获取操作结果。
- SqlSession:SqlSession是MyBatis与数据库交互的关键组件,它提供了执行SQL语句、获取映射器(Mapper)、管理事务等功能。通过SqlSession,可以执行数据库的增删改查操作,并获取操作结果。
- 映射器(Mapper):映射器是MyBatis实现动态代理的核心组件。MyBatis通过JDK动态代理或CGLIB动态代理,根据定义的Mapper接口,动态生成代理类,实现接口方法的具体逻辑。通过映射器,可以将Java对象与数据库记录进行映射,实现对象关系映射。
- Configuration配置对象:Configuration对象是MyBatis的配置文件解析和存储的核心组件。它负责解析MyBatis的配置文件,包括数据库连接信息、映射文件路径、插件、类型处理器等配置信息。MyBatis根据Configuration对象的配置,完成MyBatis的初始化和功能扩展。
- Executor执行器:Executor执行器是MyBatis执行SQL语句的核心组件。它负责根据SQL语句、参数和映射规则,将SQL语句发送到数据库,并获取结果。Executor可以分为SimpleExecutor、ReuseExecutor和BatchExecutor等类型,用于不同的场景和需求。
相关文章:
MyBatis的基本概念和核心组件
MyBatis的基本概念 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Pla…...
sql update执行返回0,能否判断数据不存在
答案:不能。 update执行返回0的情况 1、没有找到需要更新的数据,就是这条记录不存在 例如:where后面的条件是id0,那这条记录肯定是不存在的,返回结果是0 2、更新时的数据和要更新的数据完全一致时 例如:更…...
数据分析 | 调用Optuna库实现基于TPE的贝叶斯优化 | 以随机森林回归为例
1. Optuna库的优势 对比bayes_opt和hyperoptOptuna不仅可以衔接到PyTorch等深度学习框架上,还可以与sklearn-optimize结合使用,这也是我最喜欢的地方,Optuna因此特性可以被使用于各种各样的优化场景。 2. 导入必要的库及加载数据 用的是sklea…...
stm32单片机开关输入控制蜂鸣器参考代码(附PROTEUS电路图)
说明:这个buzzer的额定电压需要改为3V,否则不会叫,源代码几乎是完全一样的 //gpio.c文件 /* USER CODE BEGIN Header */ /********************************************************************************* file gpio.c* brief Thi…...
打印X型的图案
int main() {int n0;int i0;int j0;scanf("%d",&n);for(i0;i<n;i){for(j0;j<n;j){if(ij){printf("*");}else if((ij)n-1){printf("*");}elseprintf(" ");}printf("\n");}return 0; }...
不含数字的webshell绕过
异或操作原理 1.首先我们得了解一下异或操作的原理 在php中,异或操作是两个二进制数相同时,异或(相同)为0,不同为1 举个例子 A的ASCII值是65,对应的二进制值是0100 0001 的ASCII值是96,对应的二进制值是 0110 000…...
Mac上传项目源代码到GitHub的修改更新
Mac上传项目源代码到GitHub的修改更新 最近在学习把代码上传到github,不得不说,真的还挺方便 这是一个关于怎样更新项目代码的教程。 首先,在本地终端命令行打开至项目文件下第一步:查看当前的git仓库状态,可以使用git…...
Android6:片段和导航
创建项目Secret Message strings.xml <resources><string name"app_name">Secret Message</string><string name"welcome_text">Welcome to the Secret Message app!Use this app to encrypt a secret message.Click on the Star…...
ClickHouse AST is too big 报错问题处理记录
ClickHouse AST is too big 报错问题处理记录 问题描述问题分析解决方案1、修改系统配置2、修改业务逻辑 问题描述 项目中统计报表的查询出现 AST is too big 问题,报错信息如下: 问题分析 报错信息显示 AST is too big。 AST 表示查询语法树中的最大…...
DPDK系列之二十七DIDO
一、DIDO介绍 随着计算机技术发展,特别是应用技术的快速发展。应用场景对计算机的处理速度几乎已经到了疯狂的地步。说句大白话,再快的CPU也嫌慢。没办法,CPU和IO等技术基本目前都处在了瓶颈之处,大幅度提高,短时间内…...
《游戏编程模式》学习笔记(七)状态模式 State Pattern
状态模式的定义 允许对象在当内部状态改变时改变其行为,就好像此对象改变了自己的类一样。 举个例子 在书的示例里要求你写一个人物控制器,实现跳跃功能 直觉上来说,我们代码会这么写: void Heroine::handleInput(Input input…...
博客系统之功能测试
博客系统共有:用户登录功能、发布博客功能、查看文章详情功能、查看文章列表功能、删除文章功能、退出功能 1.登录功能: 1.1测试对象:用户登录 1.2测试用例 方法:判定表 用例 编号 操作步骤预期结果实际结果截图1 1.用户名正确…...
CJS和 ES6 的语法区别
CommonJS 使用 module.exports 导出模块。ES6 使用 export 导出模块。 示例代码: CommonJS(CJS)模块的导出: // 导出模块 module.exports {foo: bar,baz: function() {return qux;} }; ES6 模块的导出: // 导出模…...
ArcGIS Pro如何制作不规则形状图例
在默认的情况下,ArcGIS Pro生成的图例是标准的点、直线和矩形的,对于湖泊等要素而言,这样的表示方式不够直观,我们可以将其优化一下,制作不规则的线和面来代替原有图例,这里为大家介绍一下制作方法…...
微软Win11 Dev预览版Build23526发布
近日,微软Win11 Dev预览版Build23526发布,修复了不少问题。牛比如斯Microsoft,也有这么多bug,所以你写再多bug也不作为奇啊。 主要更新问题 [开始菜单] 修复了在高对比度主题下,打开开始菜单中的“所有应…...
【NEW】视频云存储EasyCVR平台H.265转码配置增加分辨率设置
关于视频分析EasyCVR视频汇聚平台的转码功能,我们在此前的文章中也介绍过不少,感兴趣的用户可以翻阅往期的文章进行了解。 安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求,让平台在内网、专网、VPN、广域网、互联网等各…...
【数据结构】如何用队列实现栈?图文详解(LeetCode)
LeetCode链接:225. 用队列实现栈 - 力扣(LeetCode) 本文默认读者已经掌握栈与队列的基本知识 或者先看我的另一篇博客:【数据结构】栈与队列_字节连结的博客-CSDN博客 做题思路 由于我们使用的是C语言,不能直接使用队…...
Linux 虚拟机Ubuntu22.04版本通过远程连接连接不上,输入ifconfig只能看到127.0.0.1的解决办法
之前给虚拟机配置静态IP之后,可以直接通过主机Vscode远程连接。但是前一段时间把主机的TCP/IPV4静态IP设置了一下之后,再连接虚拟机就连不上了,于是参考解决虚拟机不能上网ifconfig只显示127.0.0.1的问题,又可以连接上了ÿ…...
C语言刷题训练DAY.9
1.线段图案 解题思路: 这里非常简单,我们只需要用一个循环控制打印即可。 解题代码: #include<stdio.h> int main() {int n 0;while ((scanf("%d", &n)) ! EOF){int i 0;for (i 0; i < n; i){printf("*&…...
CTFHub php://input
1.首先看代码: 这里其实就应该想到的是php://伪协议: php://filter、php://input、php://filter用于读取源码 php://input用于执行php代码 2.其次,判断使用php://input伪协议 而执行php://input伪协议条件是allow_url_include是On 可以先利用…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
