All Downloads are FREE. Search and download functionalities are using the official Maven repository.

top.lingkang.mm.page.PageHelper Maven / Gradle / Ivy

Go to download

mybatis能力扩展框架,兼顾mybatis的mapper.xml编写操作数据库。

There is a newer version: 1.0.7
Show newest version
package top.lingkang.mm.page;

import cn.hutool.core.lang.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.lingkang.mm.error.MagicException;

import java.sql.Connection;
import java.sql.DatabaseMetaData;

/**
 * @author lingkang
 * Created by 2024/3/3
 */
public class PageHelper {
    private static final Logger log = LoggerFactory.getLogger(PageHelper.class);
    private static final ThreadLocal local = new ThreadLocal<>();
    /**
     * 分页处理,您可以手动修改实现, 更多请查看:{@link PageSqlHandle}
     */
    public static PageSqlHandle pageSqlHandle;

    /**
     * 开始分页
     *
     * @param page 默认 1
     * @param size 默认 10
     */
    public static void startPage(int page, int size) {
        Assert.isTrue(page > 0, "page 最小值为 1");
        Assert.isTrue(size > 0, "size 必须大于 0");
        PageInfo info = new PageInfo();
        info.setSize(size);
        info.setPage(page);
        info.setComplete(false);
        local.set(info);
    }

    /**
     * 分页查询完成时,调用一次后移除
     */
    public static PageInfo getPage() {
        PageInfo info = local.get();
        if (info == null)
            return null;
        if (info.isComplete())
            local.remove();
        return info;
    }

    public static void initPageHandler(Connection connection) {
        getHandle(connection);
    }

    public static PageSqlHandle getHandle(Connection connection) {
        if (pageSqlHandle != null) {
            return pageSqlHandle;
        }
        try {
            DatabaseMetaData metaData = connection.getMetaData();
            String name = metaData.getDatabaseProductName();
            pageSqlHandle = getByType(name);
            if (pageSqlHandle == null)
                throw new MagicException("未识别的数据库类型:" + metaData.getURL());
        } catch (Exception e) {
            log.warn("分页识别数据库类型失败,将默认使用mysql处理,您可以更改 PageHelper.pageSqlHandle 分页处理", e);
            pageSqlHandle = new PageSqlHandleMySql();
        }
        return pageSqlHandle;
    }

    private static PageSqlHandle getByType(String name) {
        name = name.toLowerCase();
        if (name.startsWith("mysql")) {
            return new PageSqlHandleMySql();
        } else if (name.startsWith("postgresql")) {
            return new PageSqlHandlePostgreSql();
        } else if (name.startsWith("h2")) {
            return new PageSqlHandleH2();
        } else if (name.startsWith("sqlite")) {
            return new PageSqlHandleSqlite();
        } else if (name.startsWith("sqlserver")) {
            return new PageSqlHandleSqlServer();
        }
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy