• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wmw1212

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

mybatis

mybatis 执行流程原理

Mybatis底层封装了JDBC,使用了动态代理模式。创建SqlSession,执行Executor

mybatis  缓存

一级缓存(本地缓存)

sqlSession级别的缓存,一级缓存一直是开启的,它实质上就是sqlSession级别的一个Map

与数据库同一次会话期间查询到的数据会放在本地缓存中,以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库

二级缓存(全局缓存)

二级缓存需要手动开启和配置

namespace级别的缓存,一个namespace对应一个二级缓存

如果会话关闭或提交,一级缓存中的数据会被保存到二级缓存中,新的会话查询信息,就可以参照二级缓存中的内容

参数占位符

#{...}

执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值

使用时机:参数传递,都使用#{…}

预编译::1.性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)(就是控制台带的那个)

2.更安全  (防止SQL注入):将敏感字进行转义,保障SQL的安全性

${...}

拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题

使用时机:如果对表名、列表进行动态设置时使用

缓存失效的情况

  • 不同SqlSession

  • 执行了增删改操作

  • 执行了commit

  • 执行了clear

posted on 2023-09-15 22:10  wmw1213  阅读(19)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3