irpas技术客

MyBatis-如何实现分页_LiveEveryDay_mybatis分页

大大的周 5253

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://`

1、就是直接使用我们的SQL语句进行分页,也就是在Mapper里面加上分页的语句就好了。比如MySQL添加一个limit 2,4。这种方式弊端很大,比如我们不用MySQL了,所有的代码都要修改。 2、使用成熟的框架MyBaits-Plus,它是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。如果你坚持要使用MyBatis,而不是MyBatis-Plus,MyBatis也有分页的插件PageHelper,但是配置相对繁琐。所以一般项目推荐使用MyBaits-Plus。 3、自己手写分页框架。这种用的比较少,不是说写不出来,你写出来的性能可能没有开源的好,没有经过严格测试容易莫名出现问题。

我们还是要看下分页,因为对我们理解MyBaits非常重要。 分页主要是通过拦截器实现,拦截原来请求的SQL语句,对它进行改造,添加我们自己需要添加的逻辑。拦截器之前也说过,是通过动态代理实现的。 Mybatis为我们提供了一个Interceptor接口,通过实现该接口就可以定义我们自己的拦截器。 拦截器注解上配置@Signature,标记了该Interceptor只拦截StatementHandler接口的prepare方法,prepare的参数是Connection对象。 StatementHandler,毫无疑问它是MyBatis四大对象中最重要的一个,其他三个分别是ParameterHandler、ResultHandler和Executor。它的任务就是和数据库对话,因为他传入的是连接,拿到连接才能对话。 prepare方法是用来编译SQL的,MyBatis基本上是用的预编译的模式,都是传入#{}这种格式的数据,无论从安全上还是效率上都优于非预编译的SQL。 Interceptor接口有三个方法需要实现:intercept、plugin和setProperties。 plugin方法是拦截器用于封装目标对象的,通过该方法我们可以返回目标对象本身,也可以返回一个它的代理。当返回的是代理的时候,我们可以对其中的方法进行拦截,来调用intercept方法。setProperties方法是用于在Mybatis配置文件中指定一些属性的。 最重要的是要实现plugin方法和intercept方法,在plugin方法中我们可以决定是否要进行拦截,进而决定要返回一个什么样的目标对象。而intercept方法就是要进行拦截的时候要执行的方法。 在plugin方法中,判断当前目标对象是否有实现对应需要拦截的接口,如果没有则返回目标对象本身,如果有则返回一个代理对象。再把封装好的Invocation作为参数传递给当前拦截器的intercept方法。intercept方法中拿到SQL语句,以及参数,如果参数中有分页对象,通过包装一层获取查到的记录个数,page对象中拿到总记录数,然后根据page传入的当前页数,每页多少条记录,计算出分页的sql。再重新绑定SQL到BoundSQL,然后放行,就是没有其他拦截器,就是执行SQL语句得到记录数。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #mybatis分页 #分享一个大牛的人工智能教程 #2 #4