为什么要有mybatis?——mybatis

每日一言

        知道为什么有这个东西,才能更深刻地理解它,更熟练地使用它。

首先,我们举一个例子来谈谈

       假设你正在开发一个电商网站,该网站需要处理大量的用户数据、商品数据以及订单数据。在这个过程中,你将频繁地与数据库进行交互,以执行各种查询、插入、更新和删除操作。

       到这里,你会想到Mysql数据库以及SQL语句,配合某种编程语言或框架进行使用,没错。

       如果没有使用MyBatis或其他类似的持久层框架(记住这个词,之后会提到,帮助你理解),你可能需要直接编写大量的JDBC代码来与数据库通信。

你需要做这些:

  1. 加载数据库驱动:每次与数据库交互时,都需要加载相应的数据库驱动。

  2. 创建数据库连接:使用JDBC的DriverManager类来获取数据库连接。

  3. 创建SQL语句:根据业务需求编写SQL查询语句。

  4. 执行SQL语句:通过StatementPreparedStatement对象执行SQL语句。

  5. 处理结果集:如果SQL语句返回结果集,需要遍历结果集并处理数据。

  6. 关闭资源:在执行完数据库操作后,需要关闭StatementResultSetConnection等资源,以避免资源泄露。

       好,不知道你看没看完,总之,你知道了:这个过程很复杂,简单复述就是每一次它都需要重新加载、链接、访问数据库之后再执行操作。同时,还具有一定风险,因为你需要手动关闭资源,你会不会忘?好,那你完了,可能造成资源泄漏。还有SQL注入攻击

而我们的主角mybatis,可以简化这个过程:

  1. 配置MyBatis:在项目中配置MyBatis,包括指定数据库连接信息、映射文件位置等。

  2. 编写映射文件:在映射文件中定义SQL语句和Java对象之间的映射关系。

  3. 使用MyBatis API:通过MyBatis提供的API(如SqlSession)来执行数据库操作。MyBatis会根据映射文件中的配置,自动生成相应的SQL语句,并执行它。

  4. 处理结果:MyBatis会自动将结果集映射为Java对象,你可以直接处理这些对象。

  5. 关闭资源:MyBatis会管理数据库连接和其他资源的生命周期,你不需要手动关闭它们。

       什么?你说一点也不简单!实际项目操作只需要你使用第三步,即调用它的API。

最后,进行一下总结。

       持久层框架提供了一套机制,使得开发者能够以更加抽象和便捷的方式操作数据库,而无需直接编写大量的数据库访问代码(JDBC方式),而MyBatis就是其中的佼佼者。

名词解释

何为JDBC?——(Java Database Connectivity)

       简单来说,就是你通过JDBC提供的接口去链接访问数据库进行操作。JDBC是Java程序与数据库之间交互的桥梁,它提供了一套标准的API,使得Java程序能够以一种通用的方式与各种数据库进行通信。

What it would do?

建立数据库连接——>发送SQL语句——>处理结果

何为API?——(Application Programming Interface)

       就是我们常说的接口,简单来说,就是你可以直接调用人家封装好的程序(函数、组件、软件等等),API充当了软件组件之间的“粘合剂”,允许不同的软件应用程序相互交互,共享数据或功能。


Over!!!


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

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

相关文章

为啥给的贷款额度差距那么大?机构到底是怎么决定给你多少额度?

今日,我们深入探讨一个颇为引人入胜的话题——为何在不同银行或信贷机构申请贷款时,所能获得的额度竟能如此大相径庭?同时,揭秘这些金融机构背后是如何精密计算并决定每位申请者的“额度”的。以下内容干货满满,建议收…

【时时三省】(C语言基础)指针进阶 例题2

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 第一个arr 数组名相当于首元素地址 因为他没有放到strlen内部 也没有取地址 strlen是找\0 找不到\0就不会停下来 所以它打印的就是随机值 第二个arr0 首元素地址加零还…

Linux-(系统启动、用户管理)

目录 前言 关机&重启命令 基本介绍 注意细节 用户登录和注销 注意: 用户管理 基本介绍 添加用户 指定/修改密码 删除用户 查询用户信息 切换用户 查看当前用户登录用户 用户组 新增组 删除组 查看所有组 修改用户所属组 创建用户时指定用户…

ffmpeg音视频开发从入门到精通——常用结构体介绍(一)

在这里插入代码片[toc] FFmpeg头文件介绍 包含了FFmpeg库的头文件&#xff0c;这些头文件提供了编解码器、多媒体格式处理等功能。 #ifdef __cplusplus extern "C" { #endif // 包含FFmpeg的头文件 #include <libavcodec/avcodec.h> #include <libavform…

磁盘加密工具 | VeraCrypt v1.26.15 绿色版

VeraCrypt 是一个开源项目&#xff0c;旨在提供强大的加密解决方案&#xff0c;以创建和管理加密的磁盘分区和加密容器。它继承了著名的加密软件 TrueCrypt 的特性&#xff0c;并在此基础上进行了扩展和改进。 主要特性 1. 高级加密算法 VeraCrypt 支持多种加密算法&#xf…

面试软件测试需要掌握的技能有哪些?

一、测试用例的编写 1、在测试中最重要的文档&#xff0c;他是测试工作的核心&#xff0c;是一组在测试时输入输出的标准&#xff0c;是软件需求的具体对照。编写测试用例&#xff0c;是测试人员的基本功&#xff0c;真正能写好的人并不多。 测试用例包含的内容&#xff1a; …

Mindspore 初学教程 - 3. Tensor 张量

张量&#xff08;Tensor&#xff09;是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数&#xff0c;这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在  n n n 维空间内&#xff0c;有  n r n^{r} nr 个分量的一种量&#xff0c;其…

数据结构之最短路径

一、问题定义 最短路径问题可以分为两类&#xff1a; 1、单源最短路径&#xff1a;从图中一个指定的源点出发&#xff0c;求该源点到图中其他所有顶点的最短路径。 2、多源最短路径&#xff1a;求图中任意两个顶点之间的最短路径。 二、常用算法 1. Dijkstra算法 Dijkstr…

学习日志8.30--防火墙NAT

目录 一、实验环境配置 二、配置防火墙静态NAT一对一 三、配置防火墙静态NAT多对多 四、配置防火墙NAT端口转换NAPT 五、防火墙smart-nat、easyip 六、防火墙三元组NAT 在学习过基于路由器的NAT网络地址转换&#xff0c;现在学习基于防火墙NAT的网络地址转换&#xff0c;…

纵向合并单元格——table

将list数据处理成tableDate格式&#xff0c;id重复的数据&#xff0c;只有第一项有num字段&#xff08;num是重复的个数&#xff09;渲染表格&#xff0c;纵向合并第1、2、6列&#xff0c;id相同的合并 <template><div><el-table:data"tableData":sp…

实体店同城商家引流的获客方法

实体店同城商家引流的获客方法 学会这3招&#xff0c;门店也能轻松获客&#xff01; #狂潮老师#电商#代运营#陪跑#门店获客#同城引流#爆款#引流#福利#达人#标签#短视频#直播#私域 推荐阅读&#xff1a; 百收网SEO引流脚本软件不断更新&#xff08;推广全集教程&#xff09;h…

4.sklearn-K近邻算法、模型选择与调优

文章目录 环境配置&#xff08;必看&#xff09;头文件引用1.sklearn转换器和估计器1.1 转换器 - 特征工程的父类1.2 估计器(sklearn机器学习算法的实现) 2.K-近邻算法2.1 简介&#xff1a;2.2 K-近邻算法API2.3 K-近邻算法代码2.4 运行结果2.5 K-近邻算法优缺点 3.模型选择与调…

数组与贪心算法——605、121、122、561、455、575(5简1中)

605. 种花问题&#xff08;简单&#xff09; 假设有一个很长的花坛&#xff0c;一部分地块种植了花&#xff0c;另一部分却没有。可是&#xff0c;花不能种植在相邻的地块上&#xff0c;它们会争夺水源&#xff0c;两者都会死去。 给你一个整数数组 flowerbed 表示花坛&#xf…

python科学计算:NumPy 简介与安装

1 NumPy 是什么&#xff1f; NumPy&#xff08;Numerical Python 的简称&#xff09;是 Python 语言中最为广泛使用的科学计算库。它支持多维数组和矩阵运算&#xff0c;并提供丰富的数学函数库&#xff0c;使得数据处理和数值计算变得更加高效。 NumPy 的核心是提供了一个强…

golang zap日志模块封装sentry

我们自己写个log日志包&#xff0c;把zap和sentry封装到一起。 下面直接贴上主要部分代码&#xff08;两个模块初始化部分的代码请自行查阅官方文档&#xff09;&#xff1a; logger.go package logimport ("github.com/getsentry/sentry-go""go.uber.org/zap…

MFC读取PC6408板卡输入信号实例

本程序基于前期我的博客文章《MFC用信号灯模拟工控机数字量输入信号实时采集实例&#xff08;源码下载》 1、在TheradDlg.h中相关代码 ... private:unsigned short nAddr; ... TheradDlg.cpp中相关代码 #include "pc60002k.h"BOOL CTheradDlg::OnInitDialog() { ..…

Mapmost让你实现地图标注自由

最近在勤勤恳恳&#xff08;moyuhaushui&#xff09;搬砖之余&#xff0c;偶然间看到一个在线古籍图书馆&#xff0c;虽然对文言文阅读的心理障碍不亚于英文阅读理解&#xff0c;但网站中有很多历史图集还是引起了兴趣。比如这幅《水经注图》&#xff0c;顺藤摸瓜的瞧&#xff…

Java中对象拷贝的深度解析:从零拷贝到深拷贝的演进

前言 在Java编程世界中&#xff0c;对象的拷贝是一个基础而重要的操作。它涉及到内存管理、数据一致性以及程序的健壮性等多个方面。随着软件架构的复杂化和数据的多样化&#xff0c;对象拷贝的策略也从最初的简单赋值&#xff08;零拷贝&#xff09;发展到深拷贝&#xff0c;…

DataWorks数据质量监控方案

背景 日常的调度监控&#xff0c;可以查看实例任务的运行情况&#xff0c;对运行失败的实例进行告警&#xff0c;但是却无法对运行成功的实例进行数据质量的判断。而有些情况下&#xff0c;即使实例任务运行成功了&#xff0c;数据也仍然存在问题&#xff0c;这时候就需要对数…

多线程——线程安全

线程安全问题 同时满足以下两个条件时&#xff1a; 多个线程在操作共享的数据。操作共享数据的线程代码有多条。 当一个线程在执行操作共享数据的多条代码过程中&#xff0c;其他线程参与了运算&#xff0c;就会导致线程安全问题的产生。 解决这样的问题就是线程同步的方式来…