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

相关推荐
炬火初现41 分钟前
Etcd的安装与使用
数据库·etcd
IT猿手1 小时前
2025最新群智能优化算法:云漂移优化(Cloud Drift Optimization,CDO)算法求解23个经典函数测试集,MATLAB
开发语言·数据库·算法·数学建模·matlab·机器人
雷渊1 小时前
深入分析理解mysql的MVCC
java·数据库·面试
easonhyj1 小时前
搞我,DBA角色用户调用存储过程失败?
oracle
Paparazi灬1 小时前
RocksDB写流程各种场景下的处理逻辑和线程交互时序
数据库
神经星星2 小时前
【vLLM 教程】使用 TPU 安装
数据库·人工智能·机器学习
hjehheje2 小时前
clickhouse查询效率低
数据库·人工智能
七七powerful2 小时前
ClickHouse 中出现 DB::Exception: Too many parts 错误
java·前端·数据库
Linux运维老纪3 小时前
Python实战项目(‌Hands-on Python Project)
开发语言·数据库·python·sql·mysql·云计算·运维开发
小林熬夜学编程3 小时前
【MySQL】第十五弹---全面解析事务:定义、起源、版本支持与提交方式
android·linux·服务器·开发语言·数据库·mysql