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

org.beangle.commons.dao.query.builder.SqlBuilder Maven / Gradle / Ivy

The newest version!
/*
 * Beangle, Agile Development Scaffold and Toolkits.
 *
 * Copyright © 2005, The Beangle Software.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see .
 */
package org.beangle.commons.dao.query.builder;

import org.beangle.commons.collection.Order;
import org.beangle.commons.collection.page.PageLimit;
import org.beangle.commons.dao.query.Lang;
import org.beangle.commons.lang.Assert;
import org.beangle.commons.lang.Strings;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import static org.beangle.commons.lang.Strings.isNotEmpty;

/**
 * sql查询
 *
 * @author chaostone
 * @version $Id: $
 */
public class SqlBuilder extends AbstractQueryBuilder {
  /**
   * 

* sql. *

* * @param queryStr a {@link java.lang.String} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public static SqlBuilder sql(final String queryStr) { SqlBuilder sqlQuery = new SqlBuilder(); sqlQuery.statement = queryStr; return sqlQuery; } /** *

* genCountStatement. *

* * @return a {@link java.lang.String} object. */ protected String genCountStatement() { return "select count(*) from (" + genQueryStatement(false) + ")"; } /** * {@inheritDoc} */ @Override protected Lang getLang() { return Lang.SQL; } /** *

* alias. *

* * @param alias a {@link java.lang.String} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder alias(final String alias) { this.alias = alias; return this; } /** *

* join. *

* * @param path a {@link java.lang.String} object. * @param alias a {@link java.lang.String} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder join(final String path, final String alias) { from += " join " + path + " " + alias; return this; } /** *

* join. *

* * @param joinMode a {@link java.lang.String} object. * @param path a {@link java.lang.String} object. * @param alias a {@link java.lang.String} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder join(final String joinMode, final String path, final String alias) { from += " " + joinMode + " join " + path + " " + alias; return this; } public SqlBuilder params(final Map params) { this.params.putAll(params); return this; } /** *

* param. *

* * @param name a {@link java.lang.String} object. * @param value a {@link java.lang.Object} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder param(String name, Object value) { params.put(name, value); return this; } /** * {@inheritDoc} */ public SqlBuilder limit(final PageLimit limit) { this.limit = limit; return this; } /** *

* limit. *

* * @param pageIndex a int. * @param pageSize a int. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder limit(final int pageIndex, final int pageSize) { this.limit = new PageLimit(pageIndex, pageSize); return this; } /** *

* cacheable. *

* * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder cacheable() { this.cacheable = true; return this; } /** *

* cacheable. *

* * @param cacheable a boolean. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder cacheable(final boolean cacheable) { this.cacheable = cacheable; return this; } /** * where. * * @param condition a {@link org.beangle.commons.dao.query.builder.Condition} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder where(final Condition... cons) { if (isNotEmpty(statement)) throw new RuntimeException("cannot add condition to a exists statement"); return where(Arrays.asList(cons)); } /** * where. * * @param content a {@link java.lang.String} object. * @param param1 a {@link java.lang.Object} object. * @param param2 a {@link java.lang.Object} object. * @param param3 a {@link java.lang.Object} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder where(final String content, Object... varparams) { Condition con = new Condition(content); con.params(Arrays.asList(varparams)); return where(con); } /** * 添加一组条件
* query中不能添加条件集合作为一个条件,因此这里命名没有采用有区别性的addAll * * @param cons a {@link java.util.Collection} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder where(final Collection cons) { conditions.addAll(cons); return params(Conditions.getParamMap(cons)); } public SqlBuilder tailOrder(final String orderBy) { List os = Order.parse(orderBy); if (os.isEmpty()) { this.tailOrder = null; } else { this.tailOrder = os.get(0); } return this; } /** *

* orderBy. *

* * @param orderBy a {@link java.lang.String} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder orderBy(final String orderBy) { this.orders.addAll(Order.parse(orderBy)); return this; } /** *

* orderBy. *

* * @param order a {@link org.beangle.commons.collection.Order} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder orderBy(final Order order) { if (null != order) { this.orders.add(order); } return this; } /** *

* cleanOrders. *

* * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder clearOrders() { this.orders.clear(); return this; } /** *

* orderBy. *

* * @param orders a {@link java.util.List} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder orderBy(final List orders) { if (null != orders) { this.orders.addAll(orders); } return this; } /** *

* select. *

* * @param what a {@link java.lang.String} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder select(final String what) { if (null == what) { this.select = null; } else { if (Strings.contains(what.toLowerCase(), "select")) { this.select = what; } else { this.select = "select " + what; } } return this; } /** *

* newFrom. *

* * @param from a {@link java.lang.String} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder newFrom(final String from) { if (null == from) { this.from = null; } else { if (Strings.contains(from.toLowerCase(), "from")) { this.from = from; } else { this.from = " from " + from; } } return this; } /** *

* groupBy. *

* * @param what a {@link java.lang.String} object. * @return a {@link org.beangle.commons.dao.query.builder.SqlBuilder} object. */ public SqlBuilder groupBy(final String what) { if (Strings.isNotEmpty(what)) groups.add(what); return this; } /** *

* Having subclause. *

* * @param what having subclause * @return a {@link org.beangle.commons.dao.query.builder.OqlBuilder} object. */ public SqlBuilder having(final String what) { Assert.isTrue(null != groups && !groups.isEmpty()); if (Strings.isNotEmpty(what)) having = what; return this; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy