001package gu.sql2java; 002 003import static com.google.common.base.Preconditions.checkNotNull; 004import static gu.sql2java.Managers.baseManagerOf; 005 006import com.google.common.base.Function; 007import com.google.common.base.Strings; 008import com.google.common.collect.Multimap; 009 010public class StringFieldSearcher<B extends BaseBean> extends BaseFieldSearcher<B, String> { 011 012 private Function<B, String> funKeyGetter; 013 public StringFieldSearcher(RowMetaData metaData, int... effectColumnId) { 014 super(metaData, effectColumnId); 015 setDefaultMatchFilter(StringMatchType.REGEX_MATCH); 016 } 017 018 public StringFieldSearcher(RowMetaData metaData, String... effectColumnNames) { 019 this(metaData, checkNotNull(metaData,"metaData is null").columnIDsOf(effectColumnNames)); 020 } 021 022 public <M extends TableManager<B>> StringFieldSearcher(Class<M> interfaceClass, int[] effectColumnId) { 023 this(baseManagerOf(interfaceClass).metaData, effectColumnId); 024 } 025 026 public <M extends TableManager<B>> StringFieldSearcher(Class<M> interfaceClass, String... effectColumnNames) { 027 this(baseManagerOf(interfaceClass).metaData, effectColumnNames); 028 } 029 030 @Override 031 protected String keyOf(B bean) { 032 // 返回空则视为null 033 return Strings.emptyToNull(checkNotNull(funKeyGetter,"funKeyGetter is uninitialized").apply(bean)); 034 } 035 036 public Function<B, String> getFunKeyGetter() { 037 return funKeyGetter; 038 } 039 040 public StringFieldSearcher<B> setFunKeyGetter(Function<B, String> funKeyGetter) { 041 this.funKeyGetter = funKeyGetter; 042 return this; 043 } 044 045 public StringFieldSearcher<B> setDefaultMatchFilter(StringMatchType defaultMatchType){ 046 if(defaultMatchType != null){ 047 setDefaultMatchFilter(defaultMatchType.createMatchFilter()); 048 } 049 return this; 050 } 051 public final <T> Multimap<String, T> search(String key, StringMatchType matchType){ 052 return search(key,matchType == null ? null : matchType.createMatchFilter()); 053 } 054}