1.Mybatis基本介绍

news2024/11/15 12:48:18

为什么使用MyBatis?

1.JDBC在创建Connection的时候,存在硬编码问题(也就是直接把连接信息写死,不方便后期维护)
2.preparedStatement对象在执行sql语句的时候存在硬编码问题
3.每次在进行一次数据库连接后都会关闭数据库连接,频繁的开启/关闭数据连接影响性能

mybatis相对JDBC优势
1.mybatis是把连接数据库的信息都是写在配置文件中,因此不存在硬编码问题,方便后期维护
2.mybatis执行的sql语句都是通过配置文件进行配置,不需要写在Java代码中
3.mybatis的连接池管理、缓存管理等让连接数据库和查询数据效率更高


数据持久化概念

数据持久化:将内存的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称

文件的存储、数据的读取等都是数据持久化操作
数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等


MyBatis框架即ORM(实现)

MyBatis是一个开源的数据持久层框架。内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJO(Plain Old Java Objects,普通Java对象)映射成数据库中的记录

MyBatis作为持久层框架,主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL

MyBatis是Apache的一个开源项目:http://mybatis.org


ORM(对象/关系数据映射)

ORM(Object/Relational Mapping)即对象/关系数据映射,可以理解为一种数据持久化技术。

在对象与关系型数据库之间建立起对应的关系,并且提供一种机制,通过JavaBean对象去操作数据库表中的数据。

ORM在对象模型和关系数据库的表之间建立了一座桥梁,不需要在使用SQL语句操作数据库中的表,可以直接使用API直接操作JavaBean对象就可以实现数据库的存储、查询、更改和删除等操作。

在这里插入图片描述
MyBatis通过简单的XML或者注解进行配置和原始映射,将实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现


MyBatis是ORM的解决方案

基于ORM,MyBatis在对象模型和关系数据库的表之间建立了一座桥梁,通过MyBatis建立SQL关系映射,以便捷地实现数据库存储、查询、更改和删除等操作


MyBatis基本要素(三大)

三个基本要素:
①核心接口和类(对象)
②核心配置文件(mybatis-cofig.xml)
③SQL映射文件(mapper.xml)

(1)每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心
(2)首先获取SqlSesssionFactoryBuilder对象,可以根据XML配置文件或Connection类的实例构建该对象
(3)然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactoryBuilder对象来获得
(4)有了SqlSessionFactory对象之后,就可以进而获取SqlSession实例,SqlSession对象中完全包含以数据库为背景的所有执行SQL操作的方法。可以通过该实例来直接执行以映射的SQL语句

部署jar文件(基本)

mybaris-版本.jar
mysql-connector-java-版本-bin.jar(MySQL数据库驱动jar文件)
log4j-版本.jar(负责日志输出的jar文件)

MyBatis依赖包中文件说明(lib下)

jar包描述
asm-版本.jar操作Java字节码的类库
cglib-版本.jar用来动态集成Java类或实现接口
commons-logging-版本.jar用于通用日志处理
javassist-版本-GA.jar分析、编辑和创建Java字节码的类库
log4j-版本.jar日志系统
slf4j-api-版本.jar日志系统的封装,对外提供统一的API接口
slf4j-log4j版本.jarslf4j对log4j的相应驱动,完成slf4j绑定log4j

MyBatis框架的优缺点

优点

(1)与JDBC相比,减少50%以上的代码量
(2)MyBatis是最简单的持久化框架,小巧并且简单易学
(3)MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL语句写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并且可重用
(4)提供XML标签,支持编写动态SQL语句
(5)提供映射标签,支持对象与数据库的ORM字段关系映射

缺点

(1)SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求
(2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库


适用场合

MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。对性能的要求很高,或者需求变化较多的项目

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

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

相关文章

【SWAT水文模型】ArcSWAT输入准备:土地利用/土壤/气象数据

ArcSWAT输入准备:土地利用/土壤/气象数据 1 土地利用数据的处理1.1 数据下载 2 土壤库建立2.1 数据下载 3 气象数据库参考 1 土地利用数据的处理 1.1 数据下载 下载地址如下: 中科院1km土地利用数据 清华大学高精度土地利用数据 2 土壤库建立 SW…

pytest学习二(通过配置文件运行、分组执行,及其它一些参数)

接上一篇说到了环境的配置,以及一个用例的编写,接下来继续记录一些它的运行方式和一些平常使用的标签 一、通过全局配置文件(pytest.ini)运行 pytest.ini配置文件的编写规则 ①编码格式一般为ANSI ②一般放在项目的根目录下&a…

个人杂笔记

docker里面的-p暴露端口是确确实实写了才会映射到主机 docker run -d --hostname my-rabbit --name my-rabbit -e RABBITMQ_DEFAULT_USERroot -e RABBITMQ_DEFAULT_PASS250772730 -p 8080:8080 -p 15672:15672 -p 5672:5672 rabbitmq:3-managementpip安装提示warning 可能原因…

【 Spring Mybatis 复杂的查询操作 】

文章目录 引言一、参数占位符 #{} 和 ${}二、SQL 注入三、like 模糊查询四、返回类型:resultType 和 resultMap五、多表查询 引言 前面我们已经学会了使用 Mybatis 进行增,删,改操作,也实现了简单的查询操作 !下面我们…

执着于考研考公却一再挫败,拿什么拯救你的职场后半生?

今天之所以想写一篇这样的文章,确确实实是有感而发,因为从近来接触的学员身上,能够最直观地感受到:考公考研失败后的同学,他们内心的那种焦虑感远超往期! 用他们的话讲:“目前的状态就是感觉自…

540. 有序数组中的单一元素

给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。 示例 1: 输入: nums [1,1,2,3,3,4,4,8,8] 输出: 2 示…

“开发人员必备技能:Python接口自动化测试全攻略“:了解接口测试的基础知识,并通过Python编写测试用例,提升自己的测试技能

目录 摘要 一、基础知识 二、工具选择 三、实现步骤 1.安装依赖库 2.编写测试用例 3.运行测试用例 4.查看测试结果 四、代码实现 总结 摘要 随着互联网行业的不断发展,越来越多的企业开始注重自动化测试的重要性。而在自动化测试中,接口自动化…

同为科技(TOWE)防雷科普篇(二)——雷击灾害急救方法大全

前 言 当雷击发生时,空气中的各种微粒互相碰撞和摩擦便会使该空气介质两面的正负电荷的量持续积累,这时加于该空气介质的电压也会同时增加,当局部电压达到当时条件下空气的击穿电压时,该空气介质的局部便会发生电击穿而持续成为等…

我国激光打标机行业分析:防疫放开医疗行业激光打标机需求迫切 行业将迈向自动化、智能化的未来

1、激光打标机行业定义、分类及应用范围 激光打标机是用激光束在各种不同的物质表面打上永久标记的激光设备。激光打标技术相比传统的标识技术,不仅仅在对于材料的损耗,标识效果更具有优势,并且在生产加工的效率和产出方面更是有过之而无不及…

【复现与代码分析】Apache APISIX Dashboard API权限绕过导致RCE(CVE-2021-45232)

Apache APISIX Dashboard API权限绕过导致RCE(CVE-2021-45232) 0x00漏洞信息 Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX …

节点流和处理流

节点流可以从一个特定的数据源读写数据,如FileReader,FileWriter处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,也更加灵活&#xf…

JavaEE IP协议详细讲解

详细讲解IP协议 O > O 文章目录 JavaEE & IP协议1. 地址管理1.1 IP协议报文格式1.2 动态分配IP地址1.3 NAT机制1.4 IP协议1.4 IP协议工作过程1.5 IPV6协议1.6 IP地址的组成1.7 特殊的IP地址 2. 路由选择 JavaEE & IP协议 1. 地址管理 我们希望,每个网络…

免费AI人工智能在线写作伪原创-百度ai自动写文章

免费伪原创洗稿工具 免费伪原创洗稿工具现在终于推出了!你是否在写作的时候,经常因为缺乏灵感而苦恼?或者,你在撰写文章的时候,发现自己的语言表述不够丰富,缺乏变化,语句重复率太高&#xff1f…

从零学习SDK(9)SDK的局限

SDK是一种便捷而实用的工具,但软件开发者不能视SDK为万能的解决之道,SDK也有局限性,并且这些局限性可能会十分“致命”。软件开发者在选择SDK产品之前,需要先了解SDK的不足之处。本文将介绍SDK存在的三种问题,以引起软…

新手必看!ChatGPT常见问题总整理,你遇到了几个?

随着ChatGPT火爆全球,使用人数以指数型成长,许多使用上的问题呈现在网路上。 今天这篇文章会用实作的方式带大家了解ChatGPT有哪些常见问题,以此减少踩坑的机会。 并用简单的示例让大家感受GPT-3.5与GPT-4的能力差异,希望对大家有所帮助。 大家会有这些问题,其实就是希望…

【手把手做ROS2机器人系统开发一】开发环境搭建

【手把手做ROS2机器人系统开发一】开发环境搭建 目录 【手把手做ROS2机器人系统开发一】开发环境搭建 一、专栏介绍: 二、开发环境搭建: 1.Ubuntu系统安装 2.ROS2系统环境安装 3.测试系统运行 一、专栏介绍: 大家好,今天给大家…

哈希表企业应用-淘宝分布式文件系统核心存储引擎

哈希表企业应用-淘宝分布式文件系统核心存储引擎-基本概述 淘宝网 谁都知道 是一个电子商务网站,可能是第一批电商模式 b2c 当然从一个技术人员讲只有一点 淘宝店铺商品存储到哪里 感觉有点像废话 :肯定在仓库里 不,我说的是 :商品详情页以及商品介绍 存储 在哪里 我知道大家都…

【图论】弗洛伊德Floyd算法模板及实战(LeetCode743)

文章目录 框架实战 Floyd-Warshall算法本质是一种动态规划,可以用于解决任意两点间的最短路径(多源最短路径问题),支持负权,而Dijkstra算法则不支持负权。 框架 第一步: 定义s[i][j]存储i到j的(最短)路径长…

字典树/前缀树Trie(附Java代码)

字典树/前缀树 1.字典树Trie1.1 字典树举例 2.代码实现2.0 代码结构2.1方式一:使用数组存储孩子节点2.2方式二:使用HashMap存储孩子节点 在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联…

一文带你上高速入门linux(含常用命令语法、说明、举例)

一文带你入门linux常用命令(含举例和详细说明) Linux系统操作介绍1. Linux发行版2. Linux文件系统3. Linux基本命令4. Linux用户和权限管理5. 软件包管理6. 系统管理7. 网络管理8. Shell脚本9. 文本处理10. 系统监控和日志11. 总结 Linux系统操作介绍 L…