我是靠谱客的博主 默默飞鸟,最近开发中收集的这篇文章主要介绍简单聊聊 MyBatis,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简单聊聊 MyBatis


1、概述

​  MyBatis 是一款 持久层框架,用于将 结果集数据 持久化(保存)到 数据库 中。

​  常见的持久层框架有:

  • MyBatis
  • JPA(默认实现为 Hibernate)

扩展:MyBatis 与 JPA 的区别

  • ORM 映射
    • MyBatis 是 半自动 的 ORM 框架,提供 结果集 与 数据库 的映射;
    • JPA 是 全自动 的 ORM 框架,提供 对象 与 数据库 的映射。
  • 可移植性
    • MySQL 与 数据库的耦合性 直接取决于 SQL 的写法,可移植性较低;
    • JPA 通过 强大的映射结构 和 HQL 大大降低了与数据库的耦合性,可移植性较高。
  • 日志系统
    • MySQL 日志系统较薄弱,只包含 基本的记录功能;
    • JPA 日志系统较健全,包含 SQL 记录、关系异常、优化警告、缓存提示、脏数据警告等。
  • SQL 优化
    • MyBatis 的 SQL 基本都是 手动书写的,优化 SQL 比较方便;
    • Hibernate 的 SQL 基本都是 自动生成的,无法直接维护 SQL。



2、MyBatis # 和 $ 的区别

    • 使用 # 设置参数时,MyBatis 会创建 预编译的 SQL 语句,然后在执行 SQL 时 MyBatis 会为 预编译 SQL 中的占位符(?)赋值。
    • 预编译的 SQL 语句执行效率高,并且可以防止注入攻击。
  • $
    • 使用 $ 设置参数时,MyBatis 只是创建 普通的 SQL 语句,然后在执行 SQL 时 MyBatis 会将参数直接拼入到 SQL 中。
    • 效率、安全性较低,容易遭受注入攻击。
    • 可以解决一些特殊情况下的问题,如:在动态表格中,传递 SQL 的列名,根据某些列进行排序(或者传递列名给 SQL)。


3、MyBatis 缓存机制

​  MyBatis 的缓存分为 一级缓存 和 二级缓存。

3.1、一级缓存(又称 本地缓存,默认启动 且 不能关闭)

​  一级缓存 存在于 SqlSession 的生命周期中,即它是 SqlSession 级别的缓存。

​  在同个 SqlSession 中查询时,MyBatis 会把执行的方法和参数 通过算法生成缓存的键值,然后将 键值 和 查询结果 存入一个 Map 对象中。

​  如果同一个 SqlSession 中执行的方法和参数 完全一致,那么通过算法会生成相同的键值,当 Map 缓存对象中已经存在该键值时,则会返回缓存中的对象。


3.2、二级缓存(又称 全局缓存,需要进行手动配置)

​  二级缓存 存在于 SqlSessionFactory 的生命周期中,即它是 SqlSessionFactory 级别的缓存。

配置步骤:

  1. 开启全局缓存

    <!--开启全局缓存-->
    <setting name="cacheEnabled" value="true"/>
    
  2. 在要使用二级缓存的Mapper中开启

    <!--在当前Mapper.xml使用二级缓存-->
    <cache/>
    
    <!--自定义参数-->
    <cache eviction="FIFO" 
           flushInterval="60000" 
           size="512" 
           readOnly="true"/>
    

补充:

  • 映射语句文件(Mapper.xml) 中的所有 select 语句 都会被缓存;
  • 映射语句文件 中的所有 insert、update、delete 语句 都会刷新缓存;
  • 缓存 默认会使用 LRU 算法(Least Recently Used,最近最少使用)进行回收;
  • 缓存 会被视为 read/write(可读 / 可写)的,意味着 对象检索 不是共享的,且可以安全地被调用修改,而不干扰其它调用者(或线程)所做的潜在修改。

最后

以上就是默默飞鸟为你收集整理的简单聊聊 MyBatis的全部内容,希望文章能够帮你解决简单聊聊 MyBatis所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部