其他
Mybatis 中经典的 9 种设计模式!面试可以吹牛了!
1、《往期精选优秀博文都在这里了!》 2、海量交易订单查询没做“重试”,一哥们“喜提”P3故障! 3、2020年Java框架排行榜,谁居榜首? 4、39 个奇葩代码注释,看完笑哭了。。。 5、格式化时间用了YYYY-MM-dd,元旦当天老板喊我回去改Bug!
1、Builder模式
2、工厂模式
3、单例模式
4、代理模式
Subject: 抽象主题角色 Proxy: 代理主题角色 RealSubject: 真实主题角色
5、组合模式
在DynamicSqlSource.getBoundSql方法里,调用了rootSqlNode.apply(context)方法,apply方法是所有的动态节点都实现的接口:
6、模板方法模式
简单SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。(可以是Statement或PrepareStatement对象) 重用ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map内,供下一次使用。(可以是Statement或PrepareStatement对象) 批量BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理的;BatchExecutor相当于维护了多个桶,每个桶里都装了很多属于自己的SQL,就像苹果蓝里装了很多苹果,番茄蓝里装了很多番茄,最后,再统一倒进仓库。(可以是Statement或PrepareStatement对象)
7、适配器模式
8、装饰者模式
一级缓存,又叫本地缓存,是PerpetualCache类型的永久缓存,保存在执行器中(BaseExecutor),而执行器又在SqlSession(DefaultSqlSession)中,所以一级缓存的生命周期与SqlSession是相同的。
二级缓存,又叫自定义缓存,实现了Cache接口的类都可以作为二级缓存,所以可配置如encache等的第三方缓存。二级缓存以namespace名称空间为其唯一标识,被保存在Configuration核心配置对象中。