blob: 3f1fa3b558d4886ed7ec78c3d207d4689a1291f9 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.utils.db;
/**
* SearchBuilder is meant as a static query construct. Often times in DAO code,
* we write static sql that just assumes the database table does not change.
* change by hand. SearchBuilder is meant to replace that. It provides load-time
*
* 1. SearchBuilder is declared as final because it should not change after load time.
* 2. search.entity().getHostId() allows you to declare which field you are searching
* on. By doing this, we take advantage of the compiler to check that we
* are not searching on obsolete fields. You should try to use this
* as much as possible as oppose to the addAndByField() and addOrByField() methods.
* 3. Note that the same SearchBuilder is used to create multiple SearchCriteria.
* This is equivalent to clearing the parameters on PreparedStatement. The
* multiple SearchCriteria does not interfere with each other.
* 4. Note that the same field (getHostId()) was specified with two param
* names. This is basically allowing you to reuse the same field in two
* parts of the search.
*
* {@code
* final SearchBuilder<UserVmVO> search = _userVmDao.createSearchBuilder();
* final String param1 = "param1";
* final String param2 = "param2";
* search.addAnd(param1, search.entity().getHostId(), SearchCriteria.Op.NEQ);
* search.addAnd(param2, search.entity().getHostId(), SearchCriteria.op.GT);
* ...
* SearchCriteria sc = search.create();
* sc.setParameters(param1, 3);
* sc.setParameters(param2, 1);
*
* ...
*
* SearchCriteria sc2 = search.create();
* sc2.setParameters(param1, 4);
* sc2.setParameters(param2, 1);
* }
*
* @param <T> VO object.
*/
public class SearchBuilder<T> extends GenericSearchBuilder<T, T> {
public SearchBuilder(Class<T> entityType) {
super(entityType, entityType);
}
}