首页 > 其他分享 >Mybatis和Hibernate的作用区别及底层原理分析

Mybatis和Hibernate的作用区别及底层原理分析

时间:2024-06-15 19:28:27浏览次数:17  
标签:Hibernate 映射 数据库 SQL Mybatis 底层

目录

Mybatis的作用及底层原理

Hibernate的作用及底层原理

Mybatis与Hibernate的主要区别


Mybatis和Hibernate都是Java应用程序中常用的ORM(Object-Relational Mapping,对象关系映射)框架,它们的主要作用是简化数据库访问层的开发,将数据库操作映射为面向对象的编程方式,从而提高开发效率和可维护性。

下面分别介绍它们的作用,并概述其底层原理和代码解析上的区别。

Mybatis的作用及底层原理

作用

  • 灵活的SQL控制:Mybatis允许开发者直接编写SQL语句,适用于需要高度定制SQL或进行细致性能优化的场景。
  • 简单的映射:提供XML映射文件来描述数据库表与Java对象的映射关系,以及SQL查询和结果集的映射。
  • 轻量级:相比Hibernate,Mybatis更加轻量,学习和使用成本较低。

底层原理及代码解析

  • 核心组件包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession。
    • SqlSessionFactoryBuilder:读取配置文件或映射文件,创建SqlSessionFactory实例。
    • SqlSessionFactory:工厂类,用于生产SqlSession实例。
    • SqlSession:代表一次数据库会话,可以执行SQL、提交事务、获取Mapper接口等。
  • Mapper接口:Mybatis推荐使用Mapper接口和对应的XML映射文件来组织SQL,通过动态代理技术,使得接口方法调用直接执行对应的SQL。

Hibernate的作用及底层原理

作用

  • 全自动ORM:提供了一个全面的对象/关系数据库映射解决方案,开发者可以以面向对象的方式来操作数据库。
  • 高级特性:支持自动管理对象状态、关联关系、懒加载、缓存等高级特性,适合复杂的数据模型。
  • 减少SQL编写:通过HQL(Hibernate Query Language)或JPQL(Java Persistence Query Language),自动生成SQL语句。

底层原理及代码解析

  • 核心组件包括SessionFactory、Session、Transaction。
    • SessionFactory:重量级对象,线程安全,用于创建Session实例。
    • Session:代表一次数据库会话,用于执行CRUD操作、事务管理等。
    • Transaction:事务管理,保证数据的一致性。
  • 实体映射:通过注解或XML配置文件,将Java类映射到数据库表,字段映射到列,同时定义关联关系。
  • HQL与SQL:Hibernate在运行时会将HQL转换为底层数据库的SQL语句,并处理结果集的映射。

Mybatis与Hibernate的主要区别

  1. SQL控制:Mybatis让开发者直接编写SQL,灵活性高;Hibernate则自动根据对象模型生成SQL,更注重开发效率。
  2. 学习曲线与复杂度:Mybatis相对简单,学习成本低;Hibernate功能丰富,但配置和学习成本较高。
  3. 性能与优化:Mybatis因直接编写SQL,可针对特定需求优化;Hibernate虽有自动优化,但在复杂查询或特定场景下可能不如Mybatis灵活。
  4. 对象关系映射深度:Hibernate提供更深入的对象关系管理,如懒加载、关联关系管理等;Mybatis在这方面较为基础,需要更多手动管理。

在选择使用Mybatis还是Hibernate时,应考虑项目特点、团队技能、性能需求及是否需要高度定制化的SQL等因素。

标签:Hibernate,映射,数据库,SQL,Mybatis,底层
From: https://blog.csdn.net/qq_35759769/article/details/139673714

相关文章

  • JMM和底层实现原理
    Java内存模型(JMM)从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(MainMemory)中,每个线程都有一个私有的本地内存(LocalMemory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写......
  • 《并发编程系列01》从底层源码剖析AQS的来龙去脉!(通俗易懂)
    前言本文是作者的第一篇文章,目的就是可以分享自己个人的一些技术上的心得体会以及找寻志同道合的人来共同讨论技术。个人学习难免会有一些理解上的错误,所以写博客也是为了记录和反思自己的学习过程,进一步加深对技术的理解和掌握。希望通过这篇博客,能够帮助到一些和我一样......
  • Mybatis框架中结果映射resultMap标签方法属性收录
    Mybatis框架中结果映射resultMap标签收录在MyBatis框架中,resultMap是一种强大的机制,用于将数据库结果集映射到Java对象上。它允许你定义如何将查询结果中的列映射到Java对象的属性上,尤其是当数据库表的字段名与Java对象的属性名不一致时,或者需要进行复杂的映射(如一对一、......
  • springboot+vue+mybatis家电系统+PPT+论文+讲解+售后
    随着信息互联网购物的飞速发展,一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了家电销售系统的开发全过程。通过分析企业对于家电销售系统的需求,创建了一个计算机管理家电销售系统的方案。文章介绍了家电销售系统的系统分析部分,包括可行性分析等,系统设计部分主......
  • 理解JSP底层
    importjava.net.URLDecoder;publicclasslogin_jsp{//JSP的9大内置对象privateJSPWriterout;//当前JSP输出流对象privateHttpServletRequestrequest;//请求对象privateHttpServletResponseresponse;//响应对象privateHttpSession......
  • mybatis之特殊SQL的执行
    1.1模糊查询尝试://模糊查询用户List<User>getUserByLike(@Param("mohu")Stringmohu);<selectid="getUserByLike"resultType="user">select*fromuserwhereusernamelike'%#{mohu}%'</select>@Testpub......
  • springboot+vue+mybatis基于java的物资综合管理系统的设计与实现+PPT+论文+讲解+售后
    如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统物资综合管理系统信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个物资综合管理系......
  • Java最全知识脑图 涵盖 juc mysql git mybatis 等 面试必备
    Java初中级知识脑图面试超实用1.Git下载链接导图下载地址:https://mm.edrawsoft.cn/mobile-share/index.html?uuid=31d00742157057-src&share_type=12.JUC下载链接https://mm.edrawsoft.cn/mobile-share/index.html?uuid=6c0be457444921-src&share_type=13.JVM下载链......
  • mybatisplus一个入参查询两个字段用或
    1List<TechnologyParamPackageMaterialVo>materialVoList=newArrayList<>();23LambdaQueryWrapper<TechnologyParamPackage>wrapper=newLambdaQueryWrapper<>();4wrapper.eq(ObjUtil.isNotEmpty(queryReq.getStatus()),TechnologyPara......
  • SpringBoot集成MyBatis-Plus
    SpringBoot集成MyBatis-Plus代码生成器背景​ MyBatis-Plus代码生成器相较于MyBatis代码生成器,可以多生成controller层和service层,并且配置更丰富,通过对Freemarker默认模板的修改和增加自定义模板配置适配,可提升开发效率操作步骤项目目录结构MyFreemarkerTemplateEngine继......