在《你了解搜索的种类吗》一文中,我们着重介绍了不同种类的搜索,以及他们的展现方式。在本文中,我们将逐层深入,讨论几种不同类型的搜索的实现方式。此外,本文在讨论搜索的实现时,借用《从面向对象的角度谈搜索》中的词汇,如果读者不熟悉,请猛击此处进行查看。
- Select t from table t where t.propertyA like '%searchKey%' or t.propertyB like '%searchKey%' or ...
- Select t from table t where t.propertyA like '%searchKey1%' and t.propertyB like '%searchKey2%' and ...
- public static List commonSearch1(String key1,String key2,String key3){
- StringBuffer sb = new StringBuffer();
- sb.append("select t from table t where 1 or 1");
- if(!"".equal(key1)){
- sb.append(" and propertyA like '%").append(key1).append("%'");;
- }
- if(!"".equal(key2)){
- sb.append(" and propertyB like '%").append(key2).append("%'");;
- }
- if(!"".equal(key3)){
- sb.append(" and propertyC like '%").append(key3).append("%'");;
- }
- ...
- }
- public static List commonSearch2(Map map){
- StringBuffer sb = new StringBuffer();
- sb.append("select t from table t where 1 or 1");
- if(map.containsKey(key1) && !"".equal(map.get(key1))){
- sb.append(" and propertyA like '%").append(key1).append("%'");;
- }
- if(map.containsKey(key2) && !"".equal(map.get(key2))){
- sb.append(" and propertyB like '%").append(key2).append("%'");;
- }
- if(map.containsKey(key3) && !"".equal(map.get(key3))){
- sb.append(" and propertyC like '%").append(key3).append("%'");;
- }
- ...
- }
- public class AdvancedSearchTemplate{
- private String searchProperty; //搜索的属性
- private String searchValue; //搜索的值。如果为多值,则采用“,”号分开
- private String searchType; //搜索类型 = 、<>、like等
- private String operateType; //连接类型 and、or
- private boolean isMultiple; //是否为多值,true表示为多值
- ...
- }
- public static List advancedSearch(AdvancedSearchTemplate[] advancedSearchTemplates){
- ...
- ...
- }