如果大家对MyBatis源码不熟悉,可以阅读我的这篇文章,专门讲解MyBatis源码阅读的juejincn/post/701763…
如果大家想知道MyBatis插件怎么融入实际项目,请参考我的开源项目giteecom/zhuhuijie/b…
插件部分位于base-platform/base-common/common-db-mysql下
感兴趣的点个star,持续更新中
PreparedStatementHanler 创建PreparedStatement 最常用占位符
CallableStatementHandler 创建CallableStatement 执行存储过程
SimpleStatementHanler 创建Statement 字符串拼接,有SQL注入风险
INSERT sqlSessioninsert()
UPDATE sqlSessionupdate()
DELETE sqlSessiondelete()
SELECT sqlSessionselect()
executorquery() 调用CachingExecutor装饰者模式 真实使用SimpleExecutor--->父类BaseExcutorquery() ---> doQuery()抽象 -->SimpleExecutordoQuery() 模板模式
创建一个委托,根据不同StatementType创建不同的对象new PreparedStatementHanler()
JDBC的Statement stmt = preparedStatementHanlerinstantiateStatement() ---> connectionpreparedStatement()
handlerparameterize(stmt) 参数处理
ParameterHandler resultSetHandlerhandlerResultSets(preparedStatement) 封装结果
MyBatis插件本质上就是对MyBatis四大内置对象的增强。
它是基于MyBatis的拦截器,通过AOP的方式进行使用。
注意拦截器实现的是ibatis包下的,上边的注解决定了我们的拦截器是从MyBatis的哪里进行切入的,然后通过AOP的方式进行扩展。
@ConditionalOnProperty(value = "zhjpluginsprintSqlenable", havingValue = "true", matchIfMissing = false)
依赖
这里我们通过ThreadLocal来设置分页对象
创建注解
Page对象增加开关
在原来的分页拦截器上增加判断条件
通过AOP设置开关
在对应的service或者dao上开启分页
想要对框架进行扩展,首先必须得了解框架源码,只有对源码有较为深入的了解,我们才能更好的把握从哪个点进行切入扩展。本文中的两个案例都是最为简单的实现,说实话,还有很多漏洞,比如第一个打印SQL的插件我们并没有去将参数填充,也没有拿到参数,第二个案例分页,只能满足一些比较简单的场景,如果SQL过于复杂,很可能会出现Bug。这些内容都需要我们不断去学习源码,不断的去学习开源项目,积累的越多,我们写出来的工具越完美。大家可以参考GitHub上MyBatis分页的开源项目,对自己写的分页插件进行不断的完善,当然大家也可以在评论区进行交流,共同学习。
如何通过MyBatis获取mysql存储过程返回的不确定个数的多个结果集
如果对select
返回的结果行都需要处理,使用游标。
如果只想取得返回多行中的一行,使用limit。
是不是执行的分页查询,此时执行对应xml中配置的select查询语句时会先执行一个select count (你配置的表及条件),若有数据就会再执行一次select (你配置的列、表以及条件) limit ;分页查询成功时可以看下控制台打出的sql语句。
以上就是关于内卷严重,不懂MyBatis插件开发怎么行,教你实现MyBatis分页插件全部的内容,包括:内卷严重,不懂MyBatis插件开发怎么行,教你实现MyBatis分页插件、求助大神 mybatis 使用Mysql 的存储过程 怎么返回多个结果集、mybatis中查询时会将查询改成select count,这是为什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)