当前位置: 首页 > news >正文

MyBatis 简介

MyBatis 简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射,能够帮助开发者将 Java 对象与数据库表进行灵活映射,简化数据持久化操作。以下从多个维度详细介绍 MyBatis:

一、核心定位与优势
  1. 轻量级框架:相比 Hibernate 等全自动 ORM 框架,MyBatis 更“轻”,开发者需手动编写 SQL 语句,灵活性更高,便于优化性能。
  2. ORM 映射功能:通过 XML 或注解方式,将 Java 对象与数据库表字段映射,减少手动编写 JDBC 代码的繁琐工作。
  3. 性能优化友好:开发者可完全控制 SQL 语句,便于针对复杂查询或性能瓶颈进行优化,适合对性能要求高的项目。
  4. 兼容多种数据库:支持 MySQL、Oracle、SQL Server 等主流数据库,通过切换方言实现跨数据库适配。
二、核心组件与架构
  1. SqlSessionFactory
    • 负责创建 SqlSession 实例,是 MyBatis 的入口,通过读取配置文件(如 mybatis-config.xml)初始化。
  2. SqlSession
    • 提供数据库操作方法(如 selectOneinsert 等),是 MyBatis 执行 SQL 的核心接口,类似 JDBC 中的 Connection
  3. Mapper 接口与映射文件
    • Mapper 接口:定义数据库操作方法(如 User selectById(int id))。
    • 映射文件(XML 或注解):实现接口方法与 SQL 的绑定,例如在 XML 中配置 selectinsert 等标签。
  4. TypeHandler
    • 处理 Java 类型与数据库类型的转换,支持自定义类型转换逻辑。
三、核心工作流程
  1. 初始化阶段
    • 读取 MyBatis 配置文件,创建 SqlSessionFactory
  2. 数据库操作阶段
    • 通过 SqlSessionFactory 获取 SqlSession
    • 调用 Mapper 接口方法,MyBatis 解析映射文件,将方法参数与 SQL 语句绑定(如 #{id} 替换为实际参数)。
    • 执行 SQL 并返回结果,结果通过映射规则转换为 Java 对象。
  3. 资源释放阶段
    • 关闭 SqlSession,释放数据库连接。
四、关键特性
  1. 动态 SQL
    • 通过 ifwhereforeach 等标签在 XML 中编写动态 SQL,适配不同查询条件(例如根据参数是否为空拼接 WHERE 子句)。
  2. 结果映射(ResultMap)
    • 处理复杂的对象关系映射,如一对一(association)、一对多(collection)关联查询,避免手动封装结果集。
  3. 缓存机制
    • 一级缓存:基于 SqlSession 的本地缓存,默认开启,提高同一会话内的重复查询效率。
    • 二级缓存:基于 namespace 的全局缓存,需手动配置,适用于频繁查询且数据更新频率低的场景。
  4. 插件扩展(Interceptor)
    • 支持自定义插件(如分页插件、SQL 性能监控插件),扩展 MyBatis 功能(如 PageHelper 插件实现分页查询)。
五、应用场景
  • 复杂业务场景:需要编写复杂 SQL(如多表联合查询、存储过程)的项目。
  • 性能敏感系统:开发者可手动优化 SQL,避免全自动 ORM 框架的性能损耗。
  • 遗留系统改造:适配已有数据库结构,无需强制修改表设计。
六、与其他框架对比
框架MyBatisHibernateSpring JDBC
SQL 控制手动编写,灵活性高全自动生成,灵活性低手动编写,类似 JDBC
学习成本中等(需掌握 SQL 和映射规则)高(需掌握 ORM 概念和 HQL)低(接近 JDBC)
性能优(手动优化 SQL)中(自动生成 SQL 可能存在冗余)优(直接操作 JDBC)
适合场景复杂查询、性能要求高快速开发、简单 CRUD轻量级项目、底层工具封装
七、入门示例(XML 配置方式)
  1. pom.xml 依赖
    <dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>3.5.10</version>  
    </dependency>  
    
  2. mybatis-config.xml 配置
    <configuration>  <environments default="development">  <environment id="development">  <transactionManager type="JDBC" />  <dataSource type="POOLED">  <property name="driver" value="com.mysql.jdbc.Driver" />  <property name="url" value="jdbc:mysql://localhost:3306/test" />  <property name="username" value="root" />  <property name="password" value="123456" />  </dataSource>  </environment>  </environments>  <mappers>  <mapper resource="mapper/UserMapper.xml" />  </mappers>  
    </configuration>  
    
  3. Mapper 接口与映射文件
    // UserMapper.java  
    public interface UserMapper {  User selectById(int id);  
    }  
    
    <!-- UserMapper.xml -->  
    <mapper namespace="com.example.mapper.UserMapper">  <select id="selectById" resultType="com.example.entity.User">  SELECT id, name, age FROM user WHERE id = #{id}  </select>  
    </mapper>  
    
  4. 代码调用
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));  
    try (SqlSession sqlSession = factory.openSession()) {  UserMapper mapper = sqlSession.getMapper(UserMapper.class);  User user = mapper.selectById(1);  System.out.println(user);  
    }  
    
八、发展与生态

MyBatis 最初由 Apache 孵化,后独立为 MyBatis-GitHub 项目,目前最新版本为 3.5.x。其生态丰富,包括:

  • Spring Boot 集成:通过 mybatis-spring-boot-starter 简化配置。
  • 代码生成工具:如 MyBatis Generator(MBG)自动生成实体类、Mapper 接口和映射文件。
  • 社区插件:PageHelper(分页)、MyBatis-Plus(增强版,简化 CRUD)等。
http://www.lryc.cn/news/572263.html

相关文章:

  • 《超级处理器》怎么安装到WPS/excel(最后有下载地址)
  • 基于Spring Boot+Vue的“暖寓”宿舍管理系统设计与实现(源码及文档)
  • 解锁身心密码:从“心”拥抱健康生活
  • 20250619在Ubuntu20.04.6下编译Rockchip瑞芯微原厂的RK3576的Buildroot系统
  • Zephyr boot
  • Three.js WebGL2.0深度应用:解锁图形渲染新极限
  • 母线槽接头过热隐患难防?在线测温方案实时守护电力安全
  • 408第二季 - 组成原理 - 指令的寻址方式
  • 攻防演练:1.木马后门文件演练
  • 线程之并发限制
  • C语言项目实践——贪吃蛇
  • Python Redis 简介
  • Day05_数据结构总结Z(手写)
  • 设计模式精讲 Day 7:桥接模式(Bridge Pattern)
  • 68、数据访问-crud实验-删除用户完成
  • 优化TCP/IP协议栈与网络层
  • 十年年化50%+的策略如何进化?兼容机器学习流程的量化策略开发,附python代码
  • WOOT BD活动背后的策略与操作
  • openKylin适配RISC-V高性能服务器芯片,携手睿思芯科共拓智算新蓝海
  • Linux head 命令
  • 软件项目管理(第4版)部分课后题答案
  • 腾讯云TCCP认证考试报名 - TDSQL数据库交付运维高级工程师(MySQL版)
  • 【设计模式】用观察者模式对比事件订阅(相机举例)
  • 智能混合检索DeepSearch
  • 《二叉搜索树》
  • Git版本控制详细资料
  • Postman 的 Jenkins 管理 - 自动构建
  • ABP VNext + MongoDB 数据存储:多模型支持与 NoSQL 扩展
  • 【深度学习】生成对抗网络(GANs)深度解析:从理论到实践的革命性生成模型
  • 理想树获沙利文认证,赢得中学教辅图书市场认可