首页 > 其他分享 >Mybatis理解

Mybatis理解

时间:2023-06-22 18:00:31浏览次数:45  
标签:hibernate 映射 框架 ORM mybatis 理解 sql Mybatis

转载自(76条消息) 1、mybatis是什么?为什么要用mybatis?_chaizepeng的博客-CSDN博客,持续补充。

对于初学者,如果进行mybatis的学习呢?我总结了几点,会慢慢的更新出来。首先大家需要了解mybatis是什么、用mybatis来做什么、为什么要用mybatis、有什么优缺点;当知道了为什么的时候就开始了解如何用的问题,如何使用mybatis、有几种使用方式、各种方式的优缺点,在这个阶段也会学习mybatis涉及到的一些标签的用法;当知道了基础用法之后,就开始接触一些高级的用法,例如动态sql的使用、mybatis的缓存使用等;至此,在实战项目中使用mybatis进行开发已经没有问题了。

接下来就开始深入的研究一下mybatis这个持久层的框架,在纯技术的方面进行研究,提高自己的能力。首先,大家需要了解一下mybatis的整体技术架构和工作原理;接下来,就开始了解一下mybatis各大核心组件的具体功能及其工作原理。至此,算是对mybatis的原理简单的了解一下了,由于博主的能力有限,因此对于mybatis的框架技术研究也就到这里算结束了。

最后会了解一些其他的东西,例如:mybatis的逆向工程使用、如何开发一个mybatis插件,在这里会介绍一下mybatis的分页实现等。

至此,mybatis也算是入门了,出去就可以和别人说,你稍微了解mybatis框架,对其也多少有一点自己的理解和看法了。

 

1、mybatis是什么?
mybatis是一款用于持久层的、轻量级的半自动化ORM框架,封装了所有jdbc操作以及设置查询参数和获取结果集的操作,支持自定义sql、存储过程和高级映射。

这句话大体是可以总结mybatis的,对于初学者来说,当看到这句话时是否会有一些问题在你脑海中产生呢?是否有如下疑问:

持久层是什么?轻量级什么概念?ORM什么意思?jdbc是什么?高级映射又是哪些映射?

接下来,一个个的解决这些问题。

持久层是什么意思呢,可以把层字去掉,持久,也就是”保持长久“的意思,他针对的是系统中数据存在的时限,而非其他。有一个基本问题大家应该知道,在内存中的数据是不持久的,如果计算机崩溃或者其他原因导致关机,数据就会丢失,但是磁盘上的数据是持久的,因此,用在持久层也就是这个框架是用来将内存中的数据写入到磁盘中的,再具体一点,就是写到数据库中。所以,总结一下,框架用于持久层,就是说这个框架是和数据库进行交互的,用于数据库中数据操作的框架。

轻量级框架的概念可以简单的理解为所用框架开发的程序启动时占用的资源少、对业务代码的侵入性不强、比较容易配置、使用和部署简单、独立部署即可使用无需依赖另外的框架,这种就是轻量级框架,相反的就是重量级。在互联网飞速发展和产品迭代更新速度如此之快的今天,轻量级的框架更容易被接受,这也是spring胜出,EJB退出的原因。

ORM,Object Relational Mapping, 直接翻译就是对象关系映射,我也没有更好的解释,看一下百科上是这样介绍的”用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生”。这里简单的可以这样理解,java中的数据类和数据库之间的类型系统不同,因此在使用java处理数据库时,需要进行对应的类型转化,而mybatis可以做这个事,可以将java中的类型一一映射到数据库的字段类型上,因此可以将其看作是一个ORM框架。那为什么又是半自动ORM框架呢?使用mybatis,需要手动配置pojo、sql和映射关系,用户可以自定义sql,这些sql是针对于处理数据库的,但是这些sql需要接受一些查询java类型的参数,或者是返回结果集封装到java类中,这些是需要配置的,因此mybatis是一个半自动ORM框架。说到底还是因为需要写sql,才能将数据库中的数据映射到java类中,而不是直接根据java类获取到对应数据库中数据。这里多说一下,hibernate是一个全自动的ORM框架,因为只需要提供pojo和映射关系即可,后期可以直接根据pojo获取到数据。

最后就是高级映射是什么,这里可以类比数据表之间的映射关系,也就是一对一、一对多、多对多。

2、使用mybatis可以用来做什么?为什么要用mybatis?
通过上边对mybatis的介绍,mybatis可以做什么,想必心里有点底了,mybatis主要用于j2ee企业级应用开发的持久层,用于处理java程序与数据库之间的交互。

在j2ee企业级应用开发中,其实并不只有mybatis,还有hibernate、ebean、jpa等其他持久层解决方案可以选择,那么为什么要选择使用mybatis呢?其实这个问题答案并不固定,因为,你也可以不用mybatis呀,这里就要多说一句了,互联网技术里边,除了真正存在bug的,其余的每一个技术都有存在的价值,毕竟存在即合理,之前不是有人说:“不选贵的,只选对的”,其实在技术选择上也是这个道理,适合的才是最好的,在真正应用开发时,并不是用最新的技术就是最好的,要根据自己将要开发的应用的特点、成本等多个方面进行考量到底使用什么技术。

言归正传,那么哪种项目更加适合选择使用mybatis呢?这里拿hibernate来比较一下,因为纯介绍mybatis的有特点可能感觉不出什么,hibernate和mybatis是使用最多的两个持久层框架,比较一下选择时可能会更清晰,接下来将在对ORM的支持、灵活性、开发效率、适用场景四个方面进行阐述。

hibernate是全ORM框架,mybatis是半ORM框架,需要自己写sql,其实这就是这个问题的根源,正因为特性不一样,因此就自然而然的导致了其他地方不一样。因为hibernate是全ORM框架,因此在映射规则确定的情况下只需要操作对应的java数据模型即可,因此用起来开发效率是高的(因为不需要自动维护一堆sql呀,只需要直接调用内置的方法即可),也正因为这样,映射规则的确定是复杂的,前期对象之间关系固定后,后期是不容易改变的,而转言mybatis,因为是半ORM框架,sql是自己写的,对应的映射规则也是相应维护的,因此后期如果数据模型和之间的关系改变了,mybatis改变起来更加简单;也正因为上述的,mybatis也更加灵活,正因为sql可以自己开发,因此在优化sql上更容易实现,而hibernate就不见得了;不过在开发效率上,在适合自己的领域,

hibernate框架肯定是开发效率更胜一筹。通过上边说到的,其实最本质的核心也就一个,mybatis可以自己写sql,因此灵活性更高,因此在开发一些业务经常调整的项目时可以使用,例如:电商,而hibernate则更加适合于一些业务模式固化的项目,例如:OA。

 

标签:hibernate,映射,框架,ORM,mybatis,理解,sql,Mybatis
From: https://www.cnblogs.com/xkge/p/17498076.html

相关文章

  • MyBatis-Plus公共字段填充
    在实体类的属性上加入@TableField注解,指定自动填充的策略@TableField(fill=FieldFill.INSERT)//插入时填充字段privateLocalDateTimecreateTime;@TableField(fill=FieldFill.INSERT_UPDATE)//插入和更新时填充字段privateLocalDateTimeupdateTim......
  • launch原理解析
    前言本章就从Continuation入手来探究一下launch启动协程的原理。正文这里我们又回到了Continuation.kt这个文件,因为这是协程框架的基础元素,上一篇文章我们介绍了创建挂起函数的俩个高阶函数就是这个类中的基础层API。除此之外,在这个类,还有启动协程的基础API。协程启动的基础API在前......
  • 什么是理解
    转自https://xijiz.github.io/post/what-is-understanding.html 我们说理解一样事物通常是指我们把一件事物融会贯通,能够理论联合实际,可是这个融会贯通又是指的什么?认知科学认为理解是一个有关于实体和人之间发生关系的过程,它的发生能够让人知道到实体的概念和实体相关的行为......
  • Mybatis 开发使用总结2023
    Mybatis一。入门1.mybatis:是一款优秀的持久化框架,用于简化JDBC的开发。2.JDBC3.数据库连接池4.lombok二。mybatis的基础增删改查操作1.驱动:com.mysql.cj.jdbc.Driver2.url:jdbc:mysql://localhost:3306/mybatis3.user:root4.password:123三。mybatis动态sql1.创建sp......
  • day111 - mybatis中的参数问题
    mybatis中的参数问题样例:根据用户名查询用户信息mybatis中获取参数值的方式有两种#{}和${}1.若mapper接口方法的参数为单个的字面量类型UsergetUserByUsername(Stringusername); <!--UsergetUserByUsername(Stringusername);--><selectid="getUserByUsername"re......
  • 供应链图表理解
    ......
  • MyBatis-Plus 实现动态字段排序
    场景虽然前端能根据返回的数组进行对字段的排序,但也仅局限于实现当前页的排序,无法满足全部数据的排序,所以需要走接口的查询进行排序,获取最全的排序数据。业务需求思路前端需传递排序的字段,该字段是正序还是倒叙。可能存在多个,所以字段为字符串数组,可以通过逗号分开。后端拿......
  • Mybatis Plus 批量插入方法效率低问题优化方案 BatchExcutor
    1、问题描述项目用的是MybatisPlus框架操作数据库,在使用batchSave批量插入方法的时候发现效率极低,插入2w数据花了6分钟,太恐怖了。看了源码发现,项目的批量插入方法调用的是MybatisPlus的BatchExcutor,用这个本意是将多次更新sql语句集合为一条更新语句,复用同一个sql连接更新数据。......
  • MGR原理解析
    MGR原理解析目录MGR原理解析一、MySQLMGR演化1.1MySQL异步复制1.2MySQL半同步复制1.3MySQL组复制(MGR)1.4MySQL组复制的特性和限制特性优点:限制:二、MGR原理2.1MGR集群中事务整个生命周期2.2transactionmessage和certificationinfotransactionmessagecertificationinfo2......
  • 深入理解Linux的I/O系统
    传统的SystemCallI/O在Linux系统中,传统的访问方式是通过write()和read()两个系统调用实现的,通过read()函数读取文件到到缓存区中,然后通过write()方法把缓存中的数据输出到网络端口。传统I/O操作的数据读写流程,整个过程涉及2次CPU拷贝、2次DMA拷贝,总共4次拷......