当前位置: 首页 > wzjs >正文

北京什么网站找工作iis中的网站启动不了

北京什么网站找工作,iis中的网站启动不了,扶贫832网络销售平台,哪家公司做网站不错文章目录🚀《MyBatis 进阶:插件开发与二级缓存》一、开场引导:MyBatis 不只是 ORM 工具二、MyBatis 插件机制详解2.1 插件本质是“执行栈拦截器”2.2 插件开发实战:记录 SQL 执行耗时步骤一:实现 Interceptor步骤二&am…

文章目录

  • 🚀《MyBatis 进阶:插件开发与二级缓存》
    • 一、开场引导:MyBatis 不只是 ORM 工具
    • 二、MyBatis 插件机制详解
      • 2.1 插件本质是“执行栈拦截器”
      • 2.2 插件开发实战:记录 SQL 执行耗时
        • 步骤一:实现 `Interceptor`
        • 步骤二:注册插件
      • 2.3 插件原理揭秘
    • 三、MyBatis 二级缓存机制
      • 3.1 一级缓存 vs 二级缓存
      • 3.2 启用二级缓存的步骤
    • 3.3 缓存失效与扩展
    • 四、实战案例:自定义 Cache 接入 Redis
      • 4.1 实现 Cache 接口
      • 4.2 注册自定义缓存
    • 五、常见问题与性能建议
    • 六、总结
    • 📚 推荐阅读

🚀《MyBatis 进阶:插件开发与二级缓存》

🎯 目标读者
已掌握 MyBatis 基础映射与 Mapper 使用,
想深入了解 MyBatis 插件机制与二级缓存原理及实践。


一、开场引导:MyBatis 不只是 ORM 工具

MyBatis 以 灵活可插拔轻量级 著称,但你是否真正了解它底层“魔法”?

  • 插件 能干预 SQL 执行流程:日志、权限、监控……
  • 二级缓存SqlSession 提升查询性能:内存、分布式都可扩展!

问题抛出:

  • 如何开发一个统计 SQL 执行耗时的插件?
  • 二级缓存如何从内存跑到 Redis?

二、MyBatis 插件机制详解

2.1 插件本质是“执行栈拦截器”

类比:Spring AOP 是“分层切面”,MyBatis 插件更像给执行栈每一站“排队拦车”——
每到关键节点,拦下并加入自定义逻辑,再放行。

可拦截的四大方法(对应核心四大处理器):

处理器可拦截方法
Executorquery()update()
ParameterHandlersetParameters()
ResultSetHandlerhandleResultSets()
StatementHandlerprepare()parameterize()batch()

2.2 插件开发实战:记录 SQL 执行耗时

步骤一:实现 Interceptor
@Intercepts({@Signature(type = Executor.class,method = "query",args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
})
public class SqlTimingInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {long start = System.nanoTime();Object result = invocation.proceed();long elapsedMs = (System.nanoTime() - start) / 1_000_000;MappedStatement ms = (MappedStatement) invocation.getArgs()[0];if (elapsedMs > 100) {System.err.printf("[Slow SQL] %s took %d ms%n", ms.getId(), elapsedMs);}return result;}@Override public Object plugin(Object target) {return Plugin.wrap(target, this);}@Override public void setProperties(Properties props) { }
}
步骤二:注册插件
<plugins><plugin interceptor="com.example.mybatis.SqlTimingInterceptor"/>
</plugins>

2.3 插件原理揭秘

  1. Plugin.wrap(target, interceptor)
  • 如果目标类型匹配 @Signature,则用 JDK 动态代理或 CGLIB 生成代理对象。
  1. 链式拦截
  • 多个插件按配置顺序“嵌套”,先注册的最外层,最后执行的最内层。
  1. 执行流程
ExecutorImpl.query() → interceptor1.intercept() → interceptor2.intercept() → 实际 query 方法

三、MyBatis 二级缓存机制

3.1 一级缓存 vs 二级缓存

缓存类型范围生命周期默认开启可配置性
一级缓存单个 SqlSession会话内不可关闭
二级缓存Mapper 映射空间SqlSession可开启/禁用
  • 一级缓存:类似图书馆阅览室,只在“当天”可重复借阅。

  • 二级缓存:像书架借书,可以跨会话“长期”缓存(甚至跨进程)。

3.2 启用二级缓存的步骤

  1. Mapper 接口/映射文件 加上注解或 XML:
@CacheNamespace(implementation=RedisCache.class, eviction=FifoCache.class, flushInterval=60000)
public interface UserMapper { ... }
  1. 实体类实现 Serializable
  2. 查询方法返回可序列化对象,不能是流或 ResultHandler

写操作(insert/update/delete)会清空对应 namespace 下的二级缓存。

3.3 缓存失效与扩展

  • Session 关闭:一级缓存清空
  • 写操作:清空二级缓存
  • 命名空间隔离:不同 Mapper 之间不共享
  • 自定义缓存:可实现 org.apache.ibatis.cache.Cache 接口,用 Redis、Guava 等

四、实战案例:自定义 Cache 接入 Redis

4.1 实现 Cache 接口

public class RedisCache implements Cache {private final String id;private RedisTemplate<String,Object> redis;public RedisCache(String id) { this.id = id; }@Override public String getId() { return id; }@Override public void putObject(Object key, Object value) {redis.opsForHash().put(id, key.toString(), value);}@Override public Object getObject(Object key) {return redis.opsForHash().get(id, key.toString());}@Override public Object removeObject(Object key) {return redis.opsForHash().delete(id, key.toString());}@Override public void clear() {redis.delete(id);}@Override public int getSize() {return redis.opsForHash().size(id).intValue();}
}

4.2 注册自定义缓存

<cache type="com.example.mybatis.RedisCache"/>

发布到分布式集群时,所有节点都可共享同一 Redis 二级缓存。

五、常见问题与性能建议

问题建议
插件过多影响性能精简插件链,按需拦截;生产环境剔除非必要插件
二级缓存命中率低减少写操作频率;针对热点数据单独设计缓存清理策略
数据一致性难保证配合消息队列或 Redis 发布/订阅实现失效通知
统计所有 SQLExecutor.query()update() 中同时拦截

六、总结

  • 插件机制:通过 Interceptor 拦截执行栈,灵活扩展 SQL 监控、审计、权限等功能。
  • 二级缓存:跨会话缓存结果,默认内存实现,可自定义 Redis、Guava 等持久化方式。
  • 进阶能力:掌握插件与缓存设计,意味着你已步入 MyBatis 的“进阶圈”,能让 ORM 不止“映射”,还能“加速”与“智能化”!

📚 推荐阅读

  • MyBatis 官方文档:插件开发 & 缓存章节
  • MyBatis 源码深度解析
  • Redis 官方文档:Hash 结构与内存优化
http://www.dtcms.com/wzjs/597922.html

相关文章:

  • 设计网站推荐语运城网站制作
  • 富阳网站建站公司哪家好淘宝购物
  • 开网站卖茶要怎么做设计师个人网站建设
  • 网络安全网站品牌网站设计步骤
  • 网站服务器重做系统怎么做辽宁住房建设厅网站首页
  • 新余 网站建设公司wordpress 为静态页面
  • 长沙网站托管seo优化公司app拉新怎么做
  • 手机网站 设计图时间轴网站模板
  • 仿站WordPress现在推广一般都用什么软件
  • 专做短篇的网站网站建设与管理心得体会和总结
  • 物流企业网站模板招聘网哪个平台比较好招人
  • 邯郸做wap网站价格网站建设总流程图
  • 设计师导航网站源码android开发技术
  • 一个商城优化seo设置
  • 网页传奇排名聊城网站建设优化
  • 手机网站设计公司哪家好最佳线上网站建设费用
  • 做网站开发很赚钱吗查域名信息
  • 网站两侧对联广告图片公司建设网站服务器必要条件
  • 怎么通过域名做网站软件科技开发公司
  • 国外设计网站h开头建行网站会员是什么
  • 招聘网站大全wordpress文件介绍
  • 大型企业网站建设广州app定制开发
  • 秦皇岛建设工程信息网站wordpress好看的主题
  • 做任务的网站源码许昌市建设路小学网站
  • 网站颜色 字体做网站要用什么服务器
  • 网站推广邮箱怎么做中小企业认定证明
  • 化妆品应如何网站建设定位网址查询ip地址
  • 小说主角重生之后做网站网站是什么公司做的
  • 游戏发号网站源码衡水移动网站建设报价
  • 网站优化建设深圳做网站建设的公司有哪些