Java tutorial
/* * 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.sinotopia.mybatis.pagehelper.dialect; import com.sinotopia.mybatis.pagehelper.Page; import com.sinotopia.mybatis.pagehelper.PageHelper; import com.sinotopia.mybatis.pagehelper.PageRowBounds; import com.sinotopia.mybatis.pagehelper.util.StringUtil; import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.session.RowBounds; import java.util.List; import java.util.Properties; /** * PageHelper * * @author cacotopia * @since 2016-12-04 14:32 */ public abstract class AbstractHelperDialect extends AbstractDialect { /** * ?? * * @param <T> * @return */ public <T> Page<T> getLocalPage() { return PageHelper.getLocalPage(); } @Override public final boolean skip(MappedStatement ms, Object parameterObject, RowBounds rowBounds) { //? return true; } @Override public boolean beforeCount(MappedStatement ms, Object parameterObject, RowBounds rowBounds) { Page page = getLocalPage(); return page.isCount(); } @Override public String getCountSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds, CacheKey countKey) { Page<Object> page = getLocalPage(); String countColumn = page.getCountColumn(); if (StringUtil.isNotEmpty(countColumn)) { return countSqlParser.getSmartCountSql(boundSql.getSql(), countColumn); } return countSqlParser.getSmartCountSql(boundSql.getSql()); } @Override public boolean afterCount(long count, Object parameterObject, RowBounds rowBounds) { Page page = getLocalPage(); page.setTotal(count); if (rowBounds instanceof PageRowBounds) { ((PageRowBounds) rowBounds).setTotal(count); } //pageSize < 0 ? //pageSize = 0 ??? if (page.getPageSize() < 0) { return false; } return count > 0; } @Override public Object processParameterObject(MappedStatement ms, Object parameterObject, BoundSql boundSql, CacheKey pageKey) { return parameterObject; } @Override public boolean beforePage(MappedStatement ms, Object parameterObject, RowBounds rowBounds) { Page page = getLocalPage(); if (page.getPageSize() > 0) { return true; } return false; } @Override public String getPageSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds, CacheKey pageKey) { String sql = boundSql.getSql(); Page page = getLocalPage(); return getPageSql(sql, page, pageKey); } /** * ?? * * @param sql * @param page * @param pageKey * @return */ public abstract String getPageSql(String sql, Page page, CacheKey pageKey); @Override public Object afterPage(List pageList, Object parameterObject, RowBounds rowBounds) { Page page = getLocalPage(); if (page == null) { return pageList; } page.addAll(pageList); if (!page.isCount()) { page.setTotal(-1); } else if ((page.getPageSizeZero() != null && page.getPageSizeZero()) && page.getPageSize() == 0) { page.setTotal(pageList.size()); } return page; } @Override public void afterAll() { } @Override public void setProperties(Properties properties) { } }