mybatis分页查询的sql
‘壹’ 在mybatis中的动态sql在mysql数据库和orecal数据库的有什么区别
首先是大体一致的,只是分页查询时oracle用的伪列(rownum),mysql用的是limit,具体的可以网络一下分页;
另外oracle对sql语句要求更为严格,而且oracle里变量较mysql更多点,oracle中有number型,有大数据类型,mysql没得;
另外举个例子,oracle不能插入为空列,而mysql是可以的(个人觉得,不知道正确与否)。还有他们两者函数有不同之处,如转日期函数oracle是to_date('要转的字符串','格式') -- select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from al,而mysql是str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09//都是针对字符串转日期来的。
还有一点,我们常常希望主键可以自动增长,避免我们插入数据时的重复问题,但是oracle不能设置列自动增长,而mysql是可以的,oracle可以用序列加触发器来解决自动增长问题达到与mysql一样的效果。
总体来说百分之九十的sql语句是没区别的。总体来说oracle的格式严格点,对有些字符型的还必须加单引号才能插入,mysql要求就没这么多了。还有当向数据库插入一个日期时,mysql可以直接插入成功,但是oracle需要先转化为sql里面的日期类型才行;oracle较mysql而言更安全,但是收费的,一般大公司用的多。oracle还有存储过程和函数,触发器这些这是mysql没有的。大体就是这样吧。
‘贰’ Mybatis分页插件PageHelper的使用-
mybatis分页插件的配置可以在myts的配置文件进行配置,也可以在spring的配置文件中进行配置,两者配置其一即可
上面是 PageHelper 官方给的配置和注释,虽然写的很多,不过确实描述的很明白。
dialect :标识是哪一种数据库,设计上必须。 offsetAsPageNum :将 RowBounds 第一个参数 offset 当成 pageNum 页码使用 rowBoundsWithCount :设置为 true 时,使用 RowBounds 分页会进行 count 查询 reasonable : value=true 时, pageNum 小于1会查询第一页,如果 pageNum 大于 pageSize 会查询最后一页
注:上面的配置只针对于pagehelper4.x版本的,如果你用的是pagehelper5.x版本就要这样配置,注意两个spring配置中的类名不同
1. 在 MyBatis 配置 xml 中配置拦截器插件
2. 在 Spring 配置文件中配置拦截器插件
如果4.x的版本用了5.x的版本报错信息如下 springboot 在启动项目的时候就会报错,报错信息有很多,主要是因为
总的来说就是缺少了 com.github.pagehelper.PageInterceptor ,这个是新版拦截器,5.x版本才开始使用,所以在4.x版本这样配置是不行的
那么5.x版本的配置在pagehelper4.x上能生效吗?答案是不行 报错信息如下
新版的拦截器PageInterceptor不能和旧版拦截器相互转换,所以还是不行的。
总的来说,pagehelper4.x就该用4.x的配置,pagehelper5.x就用5.x的配置(官方推荐)
使用mybatis的分页插件时报错: net.sf.jsqlparser.statement.select.PlainSelect.getGroupBy()Lnet/sf/jsqlparse
原因:在使用mybatis分页插件时,需要依赖 jsqlparser
PageHelper的 不同版本依赖不同 的jsqlparser版本
pageHelper4.x依赖版本 jsqlparser-1.3.jar
在配置完mybatis后,pagehelper的业务用法,就以分页查询用户列表为例
添加查询所以用户的 mapper 接口
重点来了,然后在 service 中, 先开启分页 , 再进行查询 ,然后把查询结果集放入 PageInfo 中
PageHelper.startPage(pageNum, pageSize); 这句非常重要,这段代码表示分页的开始,意思是从第 pageNum 页开始,每页显示 pageSize 条记录。
PageInfo 这个类是插件里的类,这个类里面的属性会在输出结果中显示, 使用 PageInfo 这个类,你需要将查询出来的 list 放进去:
PageHelper输出的数据结构
然后在 controller 层调用该方法设置对应的 pageNum 和 pageSize 就可以了,我设置 pageNum 为1, pageSize 为5,看个输出结果吧
PageInfo这个类里面的属性:
pageNum 当前页
pageSize 每页的数量
size 当前页的数量
orderBy 排序
startRow 当前页面第一个元素在数据库中的行号
endRow 当前页面最后一个元素在数据库中的行号
total 总记录数(所有符合条件的数据总数)
pages 总页数 (这个页数也很好算,每页5条,总共有11条,需要3页才可以显示完)
list 结果集
prePage 前一页
nextPage 下一页
isFirstPage 是否为第一页
isLastPage 是否为最后一页
hasPreviousPage 是否有前一页
hasNextPage 是否有下一页
navigatePages 导航页码数
navigatepageNums 所有导航页号
navigateFirstPage 导航第一页
navigateLastPage 导航最后一页
firstPage 第一页
lastPage 最后一页
‘叁’ Mybatis分页插件-PageHelper
Mybatis分页插件-PageHelper是一个便捷的分页插件,支持Oracle、MySQL、MariaDB、SQLite、Hsqldb、PostgreSQL等六种数据库。最新版本为3.7.5,其中优化了PageInfo中的judgePageBoudary方法,修正了版本3.4.1中SqlParser解析SQL失败的问题,以及在版本3.4.0中增加了对@SelectProvider注解方法的支持,并改进了逻辑和减少了反射调用次数。
分页插件包含五个Java文件:Page、PageHelper、PageInfo、SqlParser和SqlUtil。使用时,需引入Page、PageHelper和SqlUtil到项目中,根据需求选择是否引入PageInfo和SqlParser。有三种引入方式:直接引入类、引入Jar包或使用Maven依赖。配置时,需在Mybatis配置xml中添加PageHelper拦截器插件,配置参数如dialect、rowBoundsWithCount、offsetAsPageNum、pageSizeZero和reasonable,根据场景选择合适的配置。对于Spring配置,可选择默认xml配置或使用Spring属性配置方式。
在代码中使用时,支持RowBounds方式和Mapper接口方式调用,推荐使用Mapper接口方式。通过PageHelper.startPage方法启动分页,紧跟其后的方法将被自动分页。使用PageInfo类包装查询结果以获取详细的分页信息。重要提示包括:只有紧跟PageHelper.startPage方法后的第一个查询方法会被分页,不支持带有for update语句的分页和关联结果查询。