什么是 MyBatis?

文章目录

    • 1️⃣ MyBatis 简介
      • 📌 MyBatis 主要特点
    • 2️⃣ MyBatis vs 传统 JDBC vs Hibernate 📊
    • 3️⃣ MyBatis 核心组件 🏗️
      • 1. SqlSessionFactory
      • 2. SqlSession
      • 3. Mapper(映射器)
    • 4️⃣ MyBatis 配置文件结构 📂
      • 📌 `mybatis-config.xml` 示例
      • 📌 `UserMapper.xml` 示例
    • 5️⃣ MyBatis 的典型使用流程 🔄
    • 6️⃣ 适用场景与总结 🎯

1️⃣ MyBatis 简介

MyBatis 是一款优秀的 持久层框架,用于简化 Java 应用程序与数据库的交互。它提供了一种 基于 SQL 映射 的持久化方案,避免了 JDBC 繁琐的代码,同时比全自动的 ORM 框架(如 Hibernate)更灵活。

📌 MyBatis 主要特点

  • SQL 映射:开发者可以手写 SQL,更加灵活,适用于复杂查询。
  • 简化 JDBC:封装了数据库连接、参数设置、结果映射等步骤。
  • 动态 SQL:支持 ifchooseforeach 等标签,使 SQL 更具适应性。
  • 缓存机制:内置一级缓存和可选的二级缓存,提高查询效率。
  • 插件扩展:可自定义拦截器,增强 SQL 执行逻辑。

2️⃣ MyBatis vs 传统 JDBC vs Hibernate 📊

特性JDBCMyBatisHibernate
开发复杂度需手写 SQL,较复杂需手写 SQL,较灵活无需手写 SQL,自动映射
SQL 控制完全手动控制手写 SQL,可动态 SQL由框架生成,难以优化
性能可优化,但代码冗长适中,SQL 直接执行可能存在 N+1 查询问题
缓存机制无内置缓存一级、二级缓存支持一级、二级缓存 + JPA 级联缓存
学习成本低,但需处理大量重复代码适中,需要理解 XML 或注解映射高,需要学习 HQL、映射配置

总结:如果项目对 SQL 有高度控制需求,且查询较复杂,MyBatis 是一个很好的选择。


3️⃣ MyBatis 核心组件 🏗️

1. SqlSessionFactory

  • 作用:创建 SqlSession,管理数据库连接。

  • 示例代码:

    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    

2. SqlSession

  • 作用:执行 SQL 语句,管理事务。

  • 示例代码:

    try (SqlSession session = sqlSessionFactory.openSession()) {User user = session.selectOne("com.example.mapper.UserMapper.selectUser", 1);
    }
    

3. Mapper(映射器)

  • 作用:定义 SQL 语句的接口,MyBatis 会动态生成实现类。

  • 示例代码:

    public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User selectUser(int id);
    }
    

4️⃣ MyBatis 配置文件结构 📂

MyBatis 使用 XML 或 Java 代码进行配置,主要包含以下部分:

  • mybatis-config.xml(核心配置)
  • mapper.xml(SQL 映射文件)

📌 mybatis-config.xml 示例

<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments>
</configuration>

📌 UserMapper.xml 示例

<mapper namespace="com.example.mapper.UserMapper"><select id="selectUser" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select>
</mapper>

5️⃣ MyBatis 的典型使用流程 🔄

1️⃣ 加载 MyBatis 配置文件,创建 SqlSessionFactory

2️⃣ 获取 SqlSession,执行 SQL 语句

3️⃣ 使用 Mapper 进行数据库操作

4️⃣ 提交事务(openSession(true) 自动提交)

5️⃣ 关闭 SqlSession,释放资源


6️⃣ 适用场景与总结 🎯

Mybatis适用于:

  • 需要 手写 SQL,优化查询性能的项目
  • 复杂数据库结构,ORM 框架难以满足需求的场景
  • 需要 轻量级持久层框架 的应用

不适用于:

  • 需要全自动 ORM,避免写 SQL 的项目(可以考虑 Hibernate)

🎯 总结:MyBatis 结合了 SQL 的灵活性和 ORM 的便利性,适用于大多数 企业级应用

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

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

相关文章

使用 Arduino 和 ThingSpeak 通过互联网进行实时温度和湿度监测

使用 ThingSpeak 和 Arduino 通过 Internet 进行温度和湿度监控 湿度和温度是许多地方(如农场、温室、医疗、工业家庭和办公室)非常常见的测量参数。我们已经介绍了使用 Arduino 进行湿度和温度测量,并在 LCD 上显示数据。 在这个物联网项目中,我们将使用ThingSpeak在互联…

电子电子架构 --- 车载ECU信息安全

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

有关Spring 简介和第一个Spring案例:基于XML配置的IoC容器

1.Spirng是什么? Spring 是一个分层的 轻量级开源框架&#xff0c;专为简化企业级Java应用开发而设计。 它由Rod Johnson于2003年提出&#xff0c;核心目标是解决企业应用开发的复杂性&#xff0c;通过 控制反转&#xff08;IoC&#xff09; 和 面向切面编程&#xff08;AOP&…

警惕!Ollama大模型工具的安全风险及应对策略

文章目录 **Ollama的安全隐患&#xff1a;不容忽视的风险****未授权访问&#xff1a;门户洞开的风险****数据泄露&#xff1a;敏感信息的外泄****漏洞利用&#xff1a;历史遗留的隐患** **安全加固&#xff1a;守护数据与服务的防线****限制监听范围&#xff1a;内网隔离的保护…

Qt从入门到入土(十) -数据库操作--SQLITE

认识 数据库是用于存储、管理和检索数据的系统化集合。它是一种按照特定结构组织数据的存储方式&#xff0c;通过软件&#xff08;数据库管理系统&#xff0c;DBMS&#xff09;来实现数据的高效存储、查询、更新和管理。通过文件存储数据适用于少量的数据&#xff0c;而当拥有…

嵌入式2-按键

一、按键 1.原理图&#xff1a; P14按下低电平&#xff0c;不按则高电平。 if((t&(1<<5))!0)& 优先级 8 ! 优先级 7 二、STC89Cxx中文参考手册 1.ram(随机访问存储器&#xff09;易失性 1.1sram&#xff08;512字节&#xff09;静态存储器 2.rom(只读存储…

论文分享 | HE-Nav: 一种适用于复杂环境中空地机器人的高性能高效导航系统

阿木实验室始终致力于通过开源项目和智能无人机产品&#xff0c;为全球无人机开发者提供强有力的技术支持&#xff0c;并推出了开源项目校园赞助活动&#xff0c;助力高校学子在学术研究与技术创新中取得更大突破。近日&#xff0c;香港大学王俊铭同学&#xff0c;基于阿木实验…

平安养老险广西分公司2025年“3∙15”金融消费者权益教育宣传活动暨南湖公园健步行活动

2025年3月11日&#xff0c;由国家金融监督管理总局广西监管局、中国人民银行广西壮族自治区分行指导&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;广西分公司联合平安银行南宁分行、平安人寿广西分公司、平安产险广西分公司、平安证券广…

学习threejs,使用MeshFaceMaterial面材质容器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshFaceMaterial 二…

电脑内存不足怎么办?

常规解决方法盘点 关闭后台程序&#xff1a;按下【Ctrl Shift Esc】组合键打开任务管理器&#xff0c;在 “进程” 选项卡里&#xff0c;把当前不用的程序统统 “结束任务” &#xff0c;像那些自动更新的软件、常驻后台的播放器&#xff0c;关了能释放不少内存。比如音乐软…

Excel中国式排名,3种方法!

大家好&#xff0c;我是小鱼。 什么是中国式排名呢&#xff1f; 举个例子比如说公司一共有10名员工进行成绩考核&#xff0c;如果9个人考核成绩都是90分&#xff0c;你是89分&#xff0c;按照国际惯用的排名法则&#xff1a;9 个人考核成绩并列第一&#xff0c;你第10名&…

deepseek+kimi做ppt教程记录

1.首先注册deepseek和kimi deepseek官网&#xff1a;https://chat.deepseek.com/ kimi官网&#xff1a;https://kimi.moonshot.cn/ 以下以一篇工作总结报告为例 2.使用deepseek生成ppt大纲 让deepseek生成kimi生成ppt所需要的内容时&#xff0c;需要注意提示词内容&#xff0c;…

前端无限滚动内容自动回收技术详解:原理、实现与优化

文章目录 一、核心需求与技术挑战1.1 无限滚动的问题症结1.2 自动回收的三大目标 二、技术实现原理2.1 虚拟滚动核心机制2.2 关键技术指标 三、完整实现方案3.1 基础HTML结构3.2 CSS关键样式3.3 JavaScript核心逻辑3.3.1 滚动控制器3.3.2 动态尺寸处理 四、性能优化策略4.1 内存…

【训练细节解读】文本智能混合分块(Mixtures of Text Chunking,MoC)引领RAG进入多粒度感知智能分块阶段

RAG系统在处理复杂上下文时,传统和语义分块方法的局限性,文本分块的质量限制了检索到的内容,从而影响生成答案的准确性。尽管其他算法组件有所进步,但分块策略中的增量缺陷仍可能在一定程度上降低整体系统性能。如何直接量化分块质量?如何有效利用大型语言模型(LLMs)进行…

Jmeter下载及环境配置

Jmeter下载及环境配置 java环境变量配置配置jdk环境变量检查是否配置成功JMeter下载 java环境变量配置 访问地址&#xff1a; https://www.oracle.com/cn/java/technologies/downloads/ 注意&#xff1a;需要自己注册账号 下载完成&#xff0c;解压后的目录为&#xff1a; …

coze ai assistant Task 2

创建一个智能体&#xff1a;夸夸机器人 https://www.coze.cn/store/agent/7480939060010713138?bot_idtrue 改为豆包系列-豆包角色扮演 添加bingWebSearch搜索 添加前&#xff1a; 添加后&#xff1a; 改为工具调用&#xff1a; 添加知识库 使用长期记忆 结合自己的需求&…

Unity基于C#+UGUI解决方案,制作每日签到系统(本地存储签到数据)

一、需求介绍:基于本地存储系统制作一个每日签到系统界面,相关签到界面如下图所示,点击“签到有礼”按钮后就会跳转到“每日登录礼”这个界面,点击“立即签到”按钮之后,按钮就会置灰,而且按钮的文字会变成“等待明日”。 二、制作界面显示相关功能,需要在Unity中新建一…

多线程(超详细) (ε≡٩(๑>₃<)۶ 一心向学)

多线程目录 一、认识线程 1、概念&#xff1a; 1) 线程是什么 2) 线程为什么存在 3) 进程与线程的区别 二、创建线程 1、方法1&#xff1a;继承Thread类 2、方法2&#xff1a;实现 Runnable 接口 3、方法3&#xff1a;匿名内部类创建 Thread 子类对象 4、方法4&#…

SpringBoot——Maven篇

Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它具有许多特性&#xff0c;其中一些重要的特性包括&#xff1a; 1. 自动配置&#xff1a;Spring Boot 提供了自动配置的机制&#xff0c;可以根据应用程序的依赖和环境自动配置应用程序的各种组件&#xff…

中文大语言模型提示工程:解锁AI力量的密钥(完整优化版)

文章目录 **引言&#xff1a;AI时代的"咒语"革命****一、为什么中文提示工程是技术深水区&#xff1f;****1.1 中文的"模糊美学"挑战****1.2 文化认知鸿沟****1.3 分词歧义陷阱** **二、中文提示工程六脉神剑&#xff08;附实战代码&#xff09;****2.1 结…