为什么MyBatis是Java数据库持久层的明智选择

news2024/11/17 4:38:40

在Java应用程序的开发中,选择合适的数据库持久层框架至关重要。一个明智的选择可以帮助开发人员更好地管理数据库交互、提高性能和简化开发工作。

(一)为什么要选MyBatis

JDBCHibernate / JPAMyBatis
简单直接ORM轻量+动态SQL+关联查询
开发效率低屏蔽底层数据库差异国内生态
重复冗余关联查询、动态SQL不友好不能屏蔽数据库差异

在以前是直接用JDBC进行数据库查询,优点是简单直接,缺点是开发效率低。用JDBC写程序,需要大量手工写代码,

代码重复率较高,后来逐渐演化出ORM框架。

ORM框架最早期有Hibernate以及JPA规范,Hibernate能够屏蔽底层数据库差异,自动根据SQL语言生成对应底层不

同数据库的方言,缺点是对关联查询支持与动态SQL能力不太友好,很难写出高效SQL。

国内目前流行的是轻量级MyBatis,对动态SQL以及关联查询的支持性较高,缺点是因为它绑定一个DB,手写SQL还要

动态拼接,很难从一个DB自由的切换到另外一个DB,但由于平时很少切换DB,因此问题不是很大。

(二)MyBatis基本概念介绍

在这里插入图片描述

MyBatis主要分为三层:接口层,核心层与基础层。

1.接口层

是通过提供的API作为数据库进行增/删/改/查,都是MyBatis的API。

2.核心层

是SQL预处理、SQL执行、结果映射。

1)SQL预处理:是对代码里的变量进行绑定,以及动态SQL生成;

2)SQL执行:是把生成好的SQL,通过JDBC驱动,传到对应的DB里执行,而且要负责网络通信的部分;

3)结果映射:是把数据库返回的结果从关系型数据转换成Java对象数据。

3.基础层

包括日志、事务管理、缓存、连接池、动态代理、配置解析。

1)日志:是做框架里面的日志输出以及SQL语句输出;

2)事务管理:是对 JDBC事物、数据库事物做管理;

3)缓存:能够把结果集缓存在JVM的内存内部。优点是比较快,缺点是会占用堆内存。有条件的情况下,建议用户多

使用分布式缓存;

4)连接池:能够加速查询,提高性能;

5)动态代理:在用MyBatis编程时,核心是通过接口执行数据库查询。而Mapper接口本身是没有实现的,通过注解

或者XML配置SQL语句,动态代理会在运行时生成代理,当调用Mapper接口时,转换成实际的SQL语句;

或者XML配置SQL语句,动态代理会在运行时生成代理,当调用Mapper接口时,转换成实际的SQL语句;

6)配置解析:因为MyBatis里面有存在大量配置,需要配置新模块,读取XML配置,并把它映射为配置属性。

参考:https://developer.aliyun.com/ebook/450?spm=a2c6h.20345107.ebook-index.28.6eb21f54J7SUYc

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

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

相关文章

VAE模型(详细推导+实例代码)

文章目录 EM算法思路E步M步直观感觉 GMM模型VAEVAE思想从GMM到VAE公式推导重参数VAE神经网络另一个视角的VAE思想为什么引入encoder为什么要重参数噪声与重建 Discrete VAE 本文会从EM算法,GMM模型一步一步的的推导,在过渡到VAE模型,如果有熟…

博华网龙设备命令执行漏洞复现 [附POC]

文章目录 博华网龙设备命令执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 博华网龙设备命令执行漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试&…

【Vue】之Vuex的入门使用,取值,修改值,同异步请求处理---保姆级别教学

一,Vuex入门 1.1 什么是Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理库。它用于管理应用程序中的共享状态,它采用集中式存储管理应用的所有组件的状态,使得状态的管理变得简单和可预测 官方解释:Vuex 是一个专为 Vue.js 应…

Python数据分析实战-实现Kruskal-Wallis H检验(附源码和实现效果)

实现功能 当需要比较多个(大于两个)独立样本之间的差异时,可以使用非参数的Kruskal-Wallis H检验。Kruskal-Wallis H检验是一种非参数的方差分析方法,用于检验多个独立样本是否来自于相同的总体分布。 在Python中,你…

英国生物技术公司【AstronauTx】完成4800万英镑A轮融资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于英国伦敦的生物技术公司【AstronauTx】今日宣布已完成4800万英镑A轮融资 。 本轮融资由诺华风险基金领投,布兰登资本(Brandon Capital)、MPM Capital、…

产品经理视角 | API接口知识小结

应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

下一代Docker来了,会让部署更加丝滑吗?

下一代Docker来了,会让部署更加丝滑吗? 目录 一、Docker是什么? 二、Docker 的几个名词概念 2.1、镜像(Image) 2.2、容器 (Container) 2.3、仓库 (Repository) 三、容器和虚拟机比较 四、Docker 运行环境 五、…

因子分析(SPSS和Python)

一、源数据 二、SPSS因子分析 2.1.导入数据 2.2.标准化处理 由于指标的量纲不同(单位不一致),因此,需要对数据进行标准化处理 2.3.因子分析 点击“确定”后,再回到“总方差解释”表格,以“旋转载荷平方和…

Java 基于SpringBoot的某家乡美食系统

1 简介 《Java 基于SpringBoot的某家乡美食系统》该项目含有源码、文档等资料、配套开发软件、软件安装教程等。系统功能完整,适合作为毕业设计、课程设计、数据库大作业学习使用。 功能介绍 这个项目是基于 SpringBoot和 Vue 开发的地方美食系统,包括…

STM32F4X I2C LM75

STM32F4X I2C LM75 I2C协议讲解I2C接线I2C协议波形I2C起始信号I2C停止信号I2C应答信号I2C寻址I2C地址格式 I2C数据传输 LM75ALM75A介绍LM75A引脚说明LM75A地址LM75A寄存器LM75A I2C协议写配置寄存器读配置寄存器写Tos和Thyst寄存器读Tos Thyst Temp寄存器LM75A温度计算 LM75A例…

帆软报表之填报报表

1、配置数据源 URL填充格式:jdbc:mysql://127.0.0.1:3306/yq_iwater_ads 2、新建普通报表,配置数据库查询 3、编辑单元格 3.1、插入公式 ‘每月营业厅情况统计\n’ replace($month_id,‘-’,‘年’)‘月’ 3.2、插入数据列 3.3、关联数据列 3.4、隐藏不…

【java学习】面向对象特征之一:封装和隐藏(23)

文章目录 信息的封装和隐藏 信息的封装和隐藏 Java 中通过将数据声明为私有的 (private) 变量, 再提供 公共的( public )方法 :getXxx() 和 setXxx() 实现对该属性的操作,以实现下述目的: 隐藏一个类中不需…

LeetCode【100】单词拆分

题目&#xff1a; 代码&#xff1a; public boolean wordBreak(String s, List<String> wordDict) {Set<String> dictSet new HashSet<>(wordDict);boolean[] dp new boolean[s.length() 1]; // dp问题均是&#xff0c;先构造dp数组&#xff0c;大小为…

vue实现搜索文字高亮功能

在前端开发中&#xff0c;要实现文字搜索高亮效果&#xff0c;你可以使用JavaScript来搜索文本并通过CSS或其他方式对匹配的文本进行高亮处理。以下是一种常见的方法&#xff1a; 实现步骤&#xff1a; 1、 获取用户输入的搜索词。 2、创建一个正则表达式&#xff0c;以全局&am…

分享一下微信付费文章功能怎么做

微信付费文章功能是一种基于微信公众号的文章付费阅读模式&#xff0c;它可以帮助公众号运营者实现文章内容的变现&#xff0c;提高文章的阅读量和收益。本文将介绍微信付费文章功能的制作流程、功能特点、使用流程和推广策略&#xff0c;帮助读者了解如何制作一个高效的微信付…

嵌入式C语言自我修养《内存堆栈管理》学习笔记

目录 一、Linux环境下的内存管理 二、栈的管理 三、堆内存管理 四、mmap映射区 五、内存泄漏与防范 六、常见的内存错误及检测 C程序中定义的函数、全局变量、静态变量经过编译链接后&#xff0c;分别以section的形式存储在可执行文件的代码段、数据段和BSS段中。当程序运…

vue 本地上传Excel文件并读取内容

陌路遇见&#xff0c;陌路告别&#xff0c;陌路问好&#xff0c;九月再见&#xff0c;十月重现! 首先我来讲解一下我的思路&#xff1a; 首先&#xff0c;在模板部分&#xff0c;我们有以下元素&#xff1a; <input type“file” change“handleFileUpload” accept“.xlsx…

哈希应用之布隆过滤器

文章目录 1.介绍1.1百度搜索1.2知乎好文1.3自身理解 2.模拟实现2.1文档阅读2.2代码剖析 3.误判率的研究4.布隆过滤器的应用4.1如何找到两个分别有100亿个字符串的文件的交集[只有1G内存].分别给出精确算法和近似算法4.2如何扩展BloomFilter使得它支持删除元素的操作 5.整体代码…

第十章 字符串和日期

1.字符串 1.1.String 1.1.1.String特性 代表字符串。Java 程序中的所有字符串字面值&#xff08;如 "abc" &#xff09;都作为此类的实例实现&#xff1b;String是一个final类&#xff0c;代表不可变的字符序列,不可被继承&#xff1b;字符串是常量&#xff0c;用&…

高级网络调试技巧:使用Charles Proxy捕获和修改HTTP/HTTPS请求

今天我将与大家分享一种强大的网络调试技巧&#xff0c;那就是使用Charles Proxy来捕获和修改HTTP/HTTPS请求。如果您是一位开发人员或者网络调试爱好者&#xff0c;那么这个工具肯定对您有着很大的帮助。接下来&#xff0c;让我们一起来学习如何使用Charles Proxy进行高级网络…