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

pers.zr.opensource.magic.dao.action.Query Maven / Gradle / Ivy

There is a newer version: 1.0.1
Show newest version
package pers.zr.opensource.magic.dao.action;

import pers.zr.opensource.magic.dao.constants.ActionMode;
import pers.zr.opensource.magic.dao.order.Order;
import pers.zr.opensource.magic.dao.page.Page;

import java.util.List;

/**
 * Created by zhurong on 2016-4-28.
 */
public class Query extends ConditionalAction {

    private List queryFields;

    private Page page;

    private List orders;

    public void setQueryFields(List queryFields) {
        this.queryFields = queryFields;
    }

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

    public void setOrders(List orders) {
        this.orders = orders;
    }

    @Override
    public String getSql() {
        if(null == sql) {

            StringBuilder sqlBuilder = new StringBuilder();
            String targetFieldsStr;
            if(null!=queryFields && queryFields.size()>0) {
                StringBuilder fieldsBuilder = new StringBuilder();
                for(String field : queryFields) {
                    fieldsBuilder.append(field).append(",");
                }
                targetFieldsStr = fieldsBuilder.deleteCharAt(fieldsBuilder.lastIndexOf(",")).toString();
            }else {
                targetFieldsStr = "*";
            }

            sqlBuilder.append("SELECT ").append(targetFieldsStr).append(" FROM ")
                    .append(getRealTableName()).append(" ").append(getConSql());

            //sort
            if(null != orders && orders.size() > 0) {
                sqlBuilder.append(" ORDER BY ");
                for(Order order : orders) {
                    sqlBuilder.append(order.getColumn()).append(" ").append(order.getType()).append(", ");
                }
                sqlBuilder.deleteCharAt(sqlBuilder.lastIndexOf(","));
            }

            //paging
            if(null != page) {
                sqlBuilder.append("LIMIT ? OFFSET ? ");
            }

            this.sql = sqlBuilder.toString();

        }

        if (log.isDebugEnabled()) {
            log.debug("### [ " + sql + "] ###");
        }

        return this.sql;


    }

    @Override
    public Object[] getParams() {

        List paramsList = getConParams();
        //paging
        if(null != page) {
            int limit = page.getPageSize();
            int offset = (page.getPageNo() - 1) * limit;
            paramsList.add(limit);
            paramsList.add(offset);
        }

        this.params = paramsList.toArray();
        return this.params;

    }

    @Override
    public ActionMode getActionMode() {
        return ActionMode.QUERY;
    }


}