内卷严重,不懂MyBatis插件开发怎么行,教你实现MyBatis分页插件

内卷严重,不懂MyBatis插件开发怎么行,教你实现MyBatis分页插件,第1张

如果大家对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,这是为什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9763268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存