Mybatis详解

MyBatis是什么

MyBatis是一个持久层框架,用于简化数据库操作的开发。它通过将SQL语句和Java方法进行映射,实现了数据库操作的解耦和简化。以下是MyBatis的优点和缺点:

优点 :

  1. 灵活性:MyBatis允许开发人员编写原生的SQL语句,可以灵活地控制SQL语句的编写和优化。

  2. 易于学习和使用:MyBatis的配置相对简单,易于学习和使用,适合初学者和有经验的开发人员。

  3. 性能优秀:MyBatis可以通过优化SQL语句和使用缓存等方式提高数据库访问的性能。

  4. 易于集成:MyBatis可以与Spring等框架无缝集成,方便在现有项目中使用。

缺点 :

  1. 配置复杂:MyBatis需要编写大量的XML配置文件,有时候配置较为繁琐。

  2. SQL依赖:MyBatis需要开发人员熟悉SQL语句的编写和优化,对于不熟悉SQL的开发人员可能需要更多的学习成本。

  3. 不适合小型项目:对于小型项目来说,MyBatis可能显得过于繁重,不易于快速开发。

MyBatis工作原理
MyBatis基本构成

MyBatis的基本构成包括以下几个部分:

  1. SqlSessionFactory:SqlSessionFactory是MyBatis的核心接口之一,负责创建SqlSession实例。SqlSessionFactory可以通过SqlSessionFactoryBuilder从XML配置文件或Java配置类中构建而成。

  2. SqlSession:SqlSession是MyBatis的核心接口之一,负责与数据库进行交互。它包含了数据库操作的方法,如insert、update、delete和select等。开发人员可以通过SqlSession执行SQL语句,提交事务以及关闭SqlSession。

  3. Mapper接口:Mapper接口是定义数据库操作方法的接口,其中的方法与具体的SQL语句相对应。MyBatis通过动态代理技术将Mapper接口的方法映射到对应的SQL语句上,从而实现了数据库操作的解耦和简化。

  4. Mapper XML文件:Mapper XML文件是用于定义SQL语句的XML配置文件。其中包含了SQL语句的具体内容,以及SQL语句与Mapper接口方法的映射关系。

  5. Configuration:MyBatis的配置对象,包含了MyBatis的全局配置信息,如数据库连接信息、类型别名、插件等。

MyBatis缓存机制

MyBatis缓存机制分为一级缓存和二级缓存。

开启一级缓存的方法

在MyBatis的配置文件中,可以通过设置

复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <!DOCTYPE configuration

  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">

  5. <configuration>

  6. <settings>

  7. <!-- 开启一级缓存 -->

  8. <setting name="localCacheScope" value="SESSION"/>

  9. </settings>

  10. <typeAliases>

  11. <typeAlias type="com.example.entity.User" alias="User"/>

  12. </typeAliases>

  13. <mappers>

  14. <mapper resource="com/example/mapper/UserMapper.xml"/>

  15. </mappers>

  16. </configuration>

来开启一级缓存。默认值为SESSION。

开启二级缓存的方法

在Mapper.xml文件中添加 <cache/> 标签,如下所示:

复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <!DOCTYPE mapper

  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  5. <mapper namespace="com.example.mapper.UserMapper">

  6. <!-- 开启二级缓存 -->

  7. <cache/>

  8. <select id="getUserById" resultType="User" useCache="true">

  9. select * from user where id = #{id}

  10. </select>

  11. </mapper>

复制代码
  1. <mapper namespace="com.example.mapper.UserMapper">

  2. <cache/>

  3. <select id="getUserById" resultType="com.example.entity.User" useCache="true">

  4. select * from user where id = #{id}

  5. </select>

  6. </mapper>

缓存执行顺序
  1. 首先从一级缓存中查找数据,如果找到则直接返回结果。
  2. 如果一级缓存中没有数据,则从二级缓存中查找数据,如果找到则直接返回结果。
  3. 如果二级缓存中也没有数据,则向数据库发送SQL语句查询数据,并将结果缓存到一级缓存和二级缓存中。
缓存的好处
  1. 减少数据库的访问次数,提高系统性能。
  2. 缓存可以减轻数据库的压力,提高系统的并发能力。
  3. 缓存可以降低系统的耦合度,提高系统的可维护性。
总结

MyBatis 的基本构成包括SqlSessionFactory 、SqlSession 、Mapper接口 、Mapper XML文件 和Configuration 等部分,它们共同构成了MyBatis 持久层框架的核心功能。MyBatis 是一个成熟的持久层框架,具有灵活性和性能优秀的特点,但在使用过程中需要注意配置复杂和SQL依赖的问题,对于开发人员的数据库能力有一定要求。

相关推荐
OceanRoy6 小时前
数据库表的设计
数据库·内连接·外连接·er图·表的约束·三大范式·多表连接
Pniubi7 小时前
怎么排查慢SQL,怎么解决?
java·数据库·sql
Decay__11 小时前
VMware 安装 SQL Server 双节点 AlwaysOn 可用性组教程 —— WSFC、AG 与侦听器完整部署(系列核心篇)
运维·数据库·sql·mysql·架构
茶栀(*´I`*)11 小时前
SQL 性能分析:从慢查询日志到执行计划的完整定位方法
数据库·sql
艺杯羹12 小时前
1Panel 装好后 ufw 仍是 inactive:一次服务器安全盲区复盘
服务器·数据库·安全·网络安全·系统架构·实战·1panel
code2cat13 小时前
【随笔】MCP工具重试:任务已经创建,响应丢了怎么办
数据库·mcp
wuyk55514 小时前
Spider-第10讲-SQLite持久化与去重
数据库·爬虫·sqlite
乌暮16 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
小此方17 小时前
Re:Mysql数据库基础篇(十二):什么是事务、事务解决了什么问题、事务的四大属性、事务的操作方式
数据库·mysql
flash俊杰18 小时前
v0.5-01 让桌面 AI 助手记得住:预算组装、递归摘要、长期记忆与评估基线
数据库·安全·架构