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

cn.jiangzeyin.database.run.read.SelectPage Maven / Gradle / Ivy

There is a newer version: 1.2.11
Show newest version
package cn.jiangzeyin.database.run.read;

import cn.jiangzeyin.database.DbWriteService;
import cn.jiangzeyin.database.Page;
import cn.jiangzeyin.database.base.ReadBase;
import cn.jiangzeyin.database.config.DatabaseContextHolder;
import cn.jiangzeyin.database.util.SqlUtil;
import cn.jiangzeyin.database.util.Util;
import cn.jiangzeyin.system.DbLog;
import com.alibaba.druid.util.JdbcUtils;
import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 分页查询
 *
 * @author jiangzeyin
 */
public class SelectPage extends ReadBase {

    private Page page;


    /**
     * 分页基本使用
     *
     * @param page 分页对象
     */
    public SelectPage(Page page) {
        // TODO Auto-generated constructor stub
        this.page = page;
    }

    /**
     * @param page       page
     * @param resultType 返回类型
     */
    public SelectPage(Page page, Result resultType) {
        this.page = page;
        setResultType(resultType);
    }

    public Page getPage() {
        return page;
    }

    public void setPage(Page page) {
        this.page = page;
    }

    /**
     * @return 结果
     * @author jiangzeyin
     */
    @SuppressWarnings({"hiding", "unchecked"})
    @Override
    public  T run() {
        // TODO Auto-generated method stub
        Objects.requireNonNull(page, "page");
        String errorSql = null;
        try {
            String tag = getTag();
            if (StringUtils.isEmpty(tag)) {
                tag = DbWriteService.getInstance().getDatabaseName(getTclass());
                setTag(tag);
            }
            String[] pageSql;
            if (StringUtils.isEmpty(page.getSql())) {
                pageSql = SqlUtil.getSelectPageSql(this);
            } else {
                pageSql = SqlUtil.getSelectPageSql(page);
            }
            DataSource dataSource = DatabaseContextHolder.getReadDataSource(tag);
            List> list;
            long count = 0;
            { // 查询数据总数
                errorSql = pageSql[0];
                list = JdbcUtils.executeQuery(dataSource, pageSql[0], getParameters());
                if (list.size() > 0) {
                    Map countMap = list.get(0);
                    if (countMap != null) {
                        count = (Long) countMap.values().toArray()[0];
                    }
                }
                page.setTotalRecord(count);
            }
            if (count > 0) {
                // 查询数据
                setRunSql(pageSql[1]);
                DbLog.getInstance().info(getTransferLog() + pageSql[1]);
                errorSql = null;
                list = JdbcUtils.executeQuery(dataSource, pageSql[1], getParameters());
            } else {
                list = new ArrayList<>();
            }
            page.setMapList(list);
            {
                if (getResultType() == Result.JsonArray) {
                    return (T) JSON.toJSON(list);
                }
                // 结果是分页数据
                if (getResultType() == Result.PageResultType) {
                    JSONObject data = new JSONObject();
                    data.put("results", list);
                    data.put("pageNo", page.getPageNo());
                    data.put("pageSize", page.getPageSize());
                    data.put("totalPage", page.getTotalPage());
                    data.put("totalRecord", page.getTotalRecord());
                    return (T) data;
                }
                List resultList = Util.convertList(this, list);
                page.setResultsT(resultList);
                return (T) resultList;
            }
        } catch (Exception e) {
            // TODO: handle exception
            if (errorSql != null) {
                DbLog.getInstance().info(getTransferLog() + errorSql);
            }
            isThrows(e);
        } finally {
            runEnd();
            recycling();
        }
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy