diff --git a/pom.xml b/pom.xml index 69b656d2..26538fa0 100644 --- a/pom.xml +++ b/pom.xml @@ -191,6 +191,11 @@ 1.3.1 test + + com.xugudb + xugu-jdbc + 12.2.0 + --> diff --git a/src/main/java/com/github/pagehelper/dialect/helper/XuguDialect.java b/src/main/java/com/github/pagehelper/dialect/helper/XuguDialect.java new file mode 100644 index 00000000..b76ef108 --- /dev/null +++ b/src/main/java/com/github/pagehelper/dialect/helper/XuguDialect.java @@ -0,0 +1,79 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2014-2017 abel533@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package com.github.pagehelper.dialect.helper; + +import com.github.pagehelper.Page; +import com.github.pagehelper.dialect.AbstractHelperDialect; +import com.github.pagehelper.util.MetaObjectUtil; +import org.apache.ibatis.cache.CacheKey; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; +import org.apache.ibatis.reflection.MetaObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author liuzh + */ +public class XuguDialect extends AbstractHelperDialect { + + @Override + public Object processPageParameter(MappedStatement ms, Map paramMap, Page page, BoundSql boundSql, CacheKey pageKey) { + paramMap.put(PAGEPARAMETER_FIRST, page.getStartRow()); + paramMap.put(PAGEPARAMETER_SECOND, page.getPageSize()); + //处理pageKey + pageKey.update(page.getStartRow()); + pageKey.update(page.getPageSize()); + //处理参数配置 + if (boundSql.getParameterMappings() != null) { + List newParameterMappings = new ArrayList(boundSql.getParameterMappings()); + if (page.getStartRow() == 0) { + newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, int.class).build()); + } else { + newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_FIRST, long.class).build()); + newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, int.class).build()); + } + MetaObject metaObject = MetaObjectUtil.forObject(boundSql); + metaObject.setValue("parameterMappings", newParameterMappings); + } + return paramMap; + } + + @Override + public String getPageSql(String sql, Page page, CacheKey pageKey) { + StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14); + sqlBuilder.append(sql); + if (page.getStartRow() == 0) { + sqlBuilder.append("\n LIMIT ? "); + } else { + sqlBuilder.append("\n LIMIT ?, ? "); + } + return sqlBuilder.toString(); + } + +} diff --git a/src/main/java/com/github/pagehelper/dialect/rowbounds/XuguRowBoundsDialect.java b/src/main/java/com/github/pagehelper/dialect/rowbounds/XuguRowBoundsDialect.java new file mode 100644 index 00000000..3bfc55a5 --- /dev/null +++ b/src/main/java/com/github/pagehelper/dialect/rowbounds/XuguRowBoundsDialect.java @@ -0,0 +1,56 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2014-2017 abel533@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package com.github.pagehelper.dialect.rowbounds; + +import com.github.pagehelper.dialect.AbstractRowBoundsDialect; +import org.apache.ibatis.cache.CacheKey; +import org.apache.ibatis.session.RowBounds; + +/** + * mysql 基于 RowBounds 的分页 + * + * @author liuzh + */ +public class XuguRowBoundsDialect extends AbstractRowBoundsDialect { + + @Override + public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) { + StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14); + sqlBuilder.append(sql); + if (rowBounds.getOffset() == 0) { + sqlBuilder.append("\n LIMIT "); + sqlBuilder.append(rowBounds.getLimit()); + } else { + sqlBuilder.append("\n LIMIT "); + sqlBuilder.append(rowBounds.getOffset()); + sqlBuilder.append(","); + sqlBuilder.append(rowBounds.getLimit()); + pageKey.update(rowBounds.getOffset()); + } + pageKey.update(rowBounds.getLimit()); + return sqlBuilder.toString(); + } + +} diff --git a/src/test/resources/xugu/mybatis-config-interceptor.xml b/src/test/resources/xugu/mybatis-config-interceptor.xml new file mode 100644 index 00000000..cf3f3317 --- /dev/null +++ b/src/test/resources/xugu/mybatis-config-interceptor.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/xugu/mybatis-config-pagesizezero.xml b/src/test/resources/xugu/mybatis-config-pagesizezero.xml new file mode 100644 index 00000000..ae06b834 --- /dev/null +++ b/src/test/resources/xugu/mybatis-config-pagesizezero.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/xugu/mybatis-config-reasonable.xml b/src/test/resources/xugu/mybatis-config-reasonable.xml new file mode 100644 index 00000000..78b39c00 --- /dev/null +++ b/src/test/resources/xugu/mybatis-config-reasonable.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/xugu/mybatis-config-rowbounds.xml b/src/test/resources/xugu/mybatis-config-rowbounds.xml new file mode 100644 index 00000000..04588bd6 --- /dev/null +++ b/src/test/resources/xugu/mybatis-config-rowbounds.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/xugu/mybatis-config.xml b/src/test/resources/xugu/mybatis-config.xml new file mode 100644 index 00000000..cd6a94c5 --- /dev/null +++ b/src/test/resources/xugu/mybatis-config.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/xugu/mysql.sql b/src/test/resources/xugu/mysql.sql new file mode 100644 index 00000000..350f0878 --- /dev/null +++ b/src/test/resources/xugu/mysql.sql @@ -0,0 +1,195 @@ +CREATE DATABASE pagehelper CHARACTER SET utf8; + +USE pagehelper; +DROP TABLE IF EXISTS `user`; + +CREATE TABLE `user` ( + `id` int IDENTITY(1,1) NOT NULL, + `name` varchar(50) DEFAULT NULL, + `py` varchar(50) DEFAULT NULL, + PRIMARY KEY (`Id`) +) ; + +insert into `user`(id, name, py) values('1','毕淑儒','BSR'); +insert into `user`(id, name, py) values('2','蔡兴熙','CXX'); +insert into `user`(id, name, py) values('3','曾三杰','ZSJ'); +insert into `user`(id, name, py) values('4','常元琴','CYQ'); +insert into `user`(id, name, py) values('5','陈栋芬','CDF'); +insert into `user`(id, name, py) values('6','陈宁婷','CNZ'); +insert into `user`(id, name, py) values('7','陈瑞','CR'); +insert into `user`(id, name, py) values('8','陈武宵','CWX'); +insert into `user`(id, name, py) values('9','陈晓丽','CXL'); +insert into `user`(id, name, py) values('10','陈翼涛','CYT'); +insert into `user`(id, name, py) values('11','陈宇然','CYR'); +insert into `user`(id, name, py) values('12','陈震','CZ'); +insert into `user`(id, name, py) values('13','程太君','CTJ'); +insert into `user`(id, name, py) values('14','程玉娜','CYN'); +insert into `user`(id, name, py) values('15','丛贺轩','CHX'); +insert into `user`(id, name, py) values('16','戴国宇','DGY'); +insert into `user`(id, name, py) values('17','戴杰亮','DJL'); +insert into `user`(id, name, py) values('18','丁玉华','DYH'); +insert into `user`(id, name, py) values('19','董秋明','DQM'); +insert into `user`(id, name, py) values('20','董政厚','DZH'); +insert into `user`(id, name, py) values('21','杜玉焱','DYZ'); +insert into `user`(id, name, py) values('22','段瑜芝','DZZ'); +insert into `user`(id, name, py) values('23','傅广友','FGY'); +insert into `user`(id, name, py) values('24','傅井飞','FJF'); +insert into `user`(id, name, py) values('25','高辉涛','GHT'); +insert into `user`(id, name, py) values('26','高龙飞','GLF'); +insert into `user`(id, name, py) values('27','高汝英','GRY'); +insert into `user`(id, name, py) values('28','高云天','GYT'); +insert into `user`(id, name, py) values('29','郭义民','GYM'); +insert into `user`(id, name, py) values('30','郭永洪','GYH'); +insert into `user`(id, name, py) values('31','韩国茜','HGZ'); +insert into `user`(id, name, py) values('32','韩龙康','HLK'); +insert into `user`(id, name, py) values('33','韩伟佳','HWJ'); +insert into `user`(id, name, py) values('34','韩扬谦','HYQ'); +insert into `user`(id, name, py) values('35','郝静生','HJS'); +insert into `user`(id, name, py) values('36','何柏红','HBH'); +insert into `user`(id, name, py) values('37','何彩智','HCZ'); +insert into `user`(id, name, py) values('38','何陶增','HTZ'); +insert into `user`(id, name, py) values('39','何薇','HZ'); +insert into `user`(id, name, py) values('40','何小凡','HXF'); +insert into `user`(id, name, py) values('41','何振平','HZP'); +insert into `user`(id, name, py) values('42','洪彩辉','HCH'); +insert into `user`(id, name, py) values('43','胡仕明','HSM'); +insert into `user`(id, name, py) values('44','黄建朋','HJP'); +insert into `user`(id, name, py) values('45','黄祥荣','HXR'); +insert into `user`(id, name, py) values('46','黄璇平','HZP'); +insert into `user`(id, name, py) values('47','贾茂飞','JMF'); +insert into `user`(id, name, py) values('48','李迪茹','LDR'); +insert into `user`(id, name, py) values('49','李桂博','LGB'); +insert into `user`(id, name, py) values('50','李国祯','LGZ'); +insert into `user`(id, name, py) values('51','李宏川','LHC'); +insert into `user`(id, name, py) values('52','李梅','LM'); +insert into `user`(id, name, py) values('53','李媚文','LMW'); +insert into `user`(id, name, py) values('54','李孟惠','LMH'); +insert into `user`(id, name, py) values('55','李南懋','LNZ'); +insert into `user`(id, name, py) values('56','李鹏龙','LPL'); +insert into `user`(id, name, py) values('57','李诗庸','LSY'); +insert into `user`(id, name, py) values('58','李姝勇','LZY'); +insert into `user`(id, name, py) values('59','李树鹏','LSP'); +insert into `user`(id, name, py) values('60','李薇红','LZH'); +insert into `user`(id, name, py) values('61','李文章','LWZ'); +insert into `user`(id, name, py) values('62','李星佳','LXJ'); +insert into `user`(id, name, py) values('63','李兴','LX'); +insert into `user`(id, name, py) values('64','李秀倩','LXZ'); +insert into `user`(id, name, py) values('65','李艳生','LYS'); +insert into `user`(id, name, py) values('66','李燕金','LYJ'); +insert into `user`(id, name, py) values('67','李玉彪','LYB'); +insert into `user`(id, name, py) values('68','李振峰','LZF'); +insert into `user`(id, name, py) values('69','梁斌芳','LBF'); +insert into `user`(id, name, py) values('70','梁国云','LGY'); +insert into `user`(id, name, py) values('71','梁巧爱','LQA'); +insert into `user`(id, name, py) values('72','梁照金','LZJ'); +insert into `user`(id, name, py) values('73','林婧美','LZM'); +insert into `user`(id, name, py) values('74','林沛寿','LPS'); +insert into `user`(id, name, py) values('75','林薇程','LZC'); +insert into `user`(id, name, py) values('76','林伟玉','LWY'); +insert into `user`(id, name, py) values('77','林艺玲','LYL'); +insert into `user`(id, name, py) values('78','刘睿','LR'); +insert into `user`(id, name, py) values('79','刘芊芊','LQQ'); +insert into `user`(id, name, py) values('80','刘海波','LHB'); +insert into `user`(id, name, py) values('81','刘斓琴','LZQ'); +insert into `user`(id, name, py) values('82','刘磊东','LLD'); +insert into `user`(id, name, py) values('83','刘明琪','LMZ'); +insert into `user`(id, name, py) values('84','刘铭恩','LME'); +insert into `user`(id, name, py) values('85','刘任恺','LRZ'); +insert into `user`(id, name, py) values('86','刘水秋','LSQ'); +insert into `user`(id, name, py) values('87','刘文萱','LWZ'); +insert into `user`(id, name, py) values('88','刘祥瑶','LXY'); +insert into `user`(id, name, py) values('89','刘薪坪','LXP'); +insert into `user`(id, name, py) values('90','刘秀涛','LXT'); +insert into `user`(id, name, py) values('91','刘彦利','LYL'); +insert into `user`(id, name, py) values('92','刘益存','LYC'); +insert into `user`(id, name, py) values('93','龙子苹','LZP'); +insert into `user`(id, name, py) values('94','卢秀剑','LXJ'); +insert into `user`(id, name, py) values('95','罗乔华','LQH'); +insert into `user`(id, name, py) values('96','罗希清','LXQ'); +insert into `user`(id, name, py) values('97','马家兰','MJL'); +insert into `user`(id, name, py) values('98','马莲莹','MLY'); +insert into `user`(id, name, py) values('99','马宁文','MNW'); +insert into `user`(id, name, py) values('100','马水鹏','MSP'); +insert into `user`(id, name, py) values('101','孟三云','MSY'); +insert into `user`(id, name, py) values('102','孟寿云','MSY'); +insert into `user`(id, name, py) values('103','聂伟元','NWY'); +insert into `user`(id, name, py) values('104','潘永飞','PYF'); +insert into `user`(id, name, py) values('105','彭健颖','PJY'); +insert into `user`(id, name, py) values('106','钱文松','QWS'); +insert into `user`(id, name, py) values('107','屈江珍','QJZ'); +insert into `user`(id, name, py) values('108','邵建林','SJL'); +insert into `user`(id, name, py) values('109','施家晖','SJZ'); +insert into `user`(id, name, py) values('110','施艺英','SYY'); +insert into `user`(id, name, py) values('111','孙常程','SCC'); +insert into `user`(id, name, py) values('112','谭佳盈','TJY'); +insert into `user`(id, name, py) values('113','唐春珊','TCS'); +insert into `user`(id, name, py) values('114','唐军霞','TJX'); +insert into `user`(id, name, py) values('115','唐里丽','TLL'); +insert into `user`(id, name, py) values('116','陶姐华','TJH'); +insert into `user`(id, name, py) values('117','万圻艳','WZY'); +insert into `user`(id, name, py) values('118','王傲凤','WAF'); +insert into `user`(id, name, py) values('119','王德英','WDY'); +insert into `user`(id, name, py) values('120','王鼎华','WDH'); +insert into `user`(id, name, py) values('121','王慧','WH'); +insert into `user`(id, name, py) values('122','王佳光','WJG'); +insert into `user`(id, name, py) values('123','王家胜','WJS'); +insert into `user`(id, name, py) values('124','王竞飞','WJF'); +insert into `user`(id, name, py) values('125','王科磊','WKL'); +insert into `user`(id, name, py) values('126','王丽章','WLZ'); +insert into `user`(id, name, py) values('127','王励苗','WLM'); +insert into `user`(id, name, py) values('128','王美东','WMD'); +insert into `user`(id, name, py) values('129','王美媛','WMZ'); +insert into `user`(id, name, py) values('130','王蕊颖','WRY'); +insert into `user`(id, name, py) values('131','王士成','WSC'); +insert into `user`(id, name, py) values('132','王熙斌','WXB'); +insert into `user`(id, name, py) values('133','王香军','WXJ'); +insert into `user`(id, name, py) values('134','王休娜','WXN'); +insert into `user`(id, name, py) values('135','王仪行','WYX'); +insert into `user`(id, name, py) values('136','王赢基','WYJ'); +insert into `user`(id, name, py) values('137','王云芯','WYX'); +insert into `user`(id, name, py) values('138','王郑林','WZL'); +insert into `user`(id, name, py) values('139','王治良','WZL'); +insert into `user`(id, name, py) values('140','王忠宇','WZY'); +insert into `user`(id, name, py) values('141','王子冰','WZB'); +insert into `user`(id, name, py) values('142','韦新裕','WXY'); +insert into `user`(id, name, py) values('143','魏复冉','WFR'); +insert into `user`(id, name, py) values('144','吴翰志','WHZ'); +insert into `user`(id, name, py) values('145','吴美森','WMS'); +insert into `user`(id, name, py) values('146','吴翔良','WXL'); +insert into `user`(id, name, py) values('147','吴艳伟','WYW'); +insert into `user`(id, name, py) values('148','吴钲辉','WZH'); +insert into `user`(id, name, py) values('149','向盼洛','XPL'); +insert into `user`(id, name, py) values('150','萧恩','XE'); +insert into `user`(id, name, py) values('151','萧军杰','XJJ'); +insert into `user`(id, name, py) values('152','萧圣梅','XSM'); +insert into `user`(id, name, py) values('153','谢辰吉','XCJ'); +insert into `user`(id, name, py) values('154','徐郎求','XLQ'); +insert into `user`(id, name, py) values('155','徐铭森','XMS'); +insert into `user`(id, name, py) values('156','徐蓉伟','XRW'); +insert into `user`(id, name, py) values('157','许为梧','XWW'); +insert into `user`(id, name, py) values('158','阎皓河','YZH'); +insert into `user`(id, name, py) values('159','阎思华','YSH'); +insert into `user`(id, name, py) values('160','杨爱秀','YAX'); +insert into `user`(id, name, py) values('161','杨昆飞','YKF'); +insert into `user`(id, name, py) values('162','杨良林','YLL'); +insert into `user`(id, name, py) values('163','杨少君','YSJ'); +insert into `user`(id, name, py) values('164','杨玉丽','YYL'); +insert into `user`(id, name, py) values('165','杨之安','YZA'); +insert into `user`(id, name, py) values('166','尤榕锋','YZF'); +insert into `user`(id, name, py) values('167','余俊珠','YJZ'); +insert into `user`(id, name, py) values('168','袁江蔓','YJM'); +insert into `user`(id, name, py) values('169','张必翰','ZBH'); +insert into `user`(id, name, py) values('170','张昌颜','ZCY'); +insert into `user`(id, name, py) values('171','张恩星','ZEX'); +insert into `user`(id, name, py) values('172','张飞强','ZFQ'); +insert into `user`(id, name, py) values('173','张凤焯','ZFZ'); +insert into `user`(id, name, py) values('174','张国强','ZGQ'); +insert into `user`(id, name, py) values('175','张计欣','ZJX'); +insert into `user`(id, name, py) values('176','张家颖','ZJY'); +insert into `user`(id, name, py) values('177','张金安','ZJA'); +insert into `user`(id, name, py) values('178','张莉','ZL'); +insert into `user`(id, name, py) values('179','张米龙','ZML'); +insert into `user`(id, name, py) values('180','张善渊','ZSY'); +insert into `user`(id, name, py) values('181','张万敏','ZWM'); +insert into `user`(id, name, py) values('182','张晓林','ZXL'); +insert into `user`(id, name, py) values('183','张秀高','ZXG');