// 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); } }