Mybatis

Mybatis优点

  • Mybatis是半自动的ORM框架,Hibernate是全自动的ORM框架。如果二级缓存出现错误,Hibernate会及时报错,但是Mybatis就需要开发者自己去感知
  • 把数据库操作逻辑和业务逻辑解耦,不用关心数据库的连接等问题,支持动态sql,事务的一级二级缓存

#{}和${}区别

  • 井是进行预编译,对于传入的参数会在预处理阶段使用?代替,可以有效避免sql注入
  • ${}只是进行字面量的拼贴,有可能输入的部分被拼贴成sql语句的一部分,导致产生错误

Mybatis插件的运行原理(依赖三个关键接口)

  • Interceptor拦截器接口,定义了插件的基本功能,包括初始化,拦截,销毁等
  • Invocation调用接口,表示mybatis在执行sql时的状态包括sql语句,参数等
  • Plugin:插件接口,在执行sql语句的时候会把所有注册的插件封装成Plugin对象,通过Plugin对象实现对sql的拦截和修改
  • 运行流程:
    • 1.对所有实现Interceptor接口的插件进行初始化
    • 2.把所有的插件和原始的Executor封装成一个InvacationChain
    • 3.在执行sql的时候依次调用插件的Intercept(重写的方法)方法
    • 4.让原始的Executor执行修改后的sql
  • 常见的有PageHelper:通过PageHelper.startPage(int pageNum, int pageSize),先把设置的参数方法哦ThreadLocal中,在执行器执行sql的时候会去ThreadLocal中获取分页信息,从而执行分页算法,在sql后面动态拼贴limit语句

Mybatis缓存

  • 一级缓存:把查到的sql语句存到内存中,再有查询语句先查询是否存在,缓存内部设计只有一个HashMap,最大作用范围是一个SqlSession内部
  • 二级缓存:是基于namespace命名空间实现的,但是不适合多表联合查询,很容易造成数据库更新但是缓存未更新的数据不一致问题,产生脏数据
posted @ 2026-01-05 21:49  Huangyien  阅读(9)  评论(0)    收藏  举报