關於mongoTemplate的條件分頁查詢封裝方法
阿新 • • 發佈:2018-12-28
先上實體類
@Document @Data //lombok外掛 public class Profile { @Id private String id; @Indexed private String userId; @Indexed private String name; private DesignerType type; private String pic; private Integer sex; private String wechat; private String qq; private String weibo; private String description; private String address; private Date createAt; private Date updateAt; @Indexed(unique = true) private String inviteCode; private int inviteCodeUsedCount; private Date becomeDesignerDate; }
以上是實體類,沒毛病,get set方法已經通過lombok元件搞定,接著上傳查詢程式碼
public List<Profile> searchProfiles(Integer page, Integer size, String filter) { Profile profile = new Profile(); profile.setName(filter); Query query = new Query(); if (filter!=null && !filter.isEmpty()){ query.addCriteria(new Criteria().alike(Example.of(profile, ExampleMatcher.matching() .withIgnoreNullValues() .withIgnorePaths("inviteCodeUsedCount") .withIgnoreCase() .withMatcher("name", matcher -> matcher.contains()) ))); } List<Profile> profiles = mongoTemplate.find( query.skip(page * size).limit(size).with(new Sort(Sort.Direction.DESC, "createAt")), Profile.class ); return profiles; }
入參分別是頁碼,每頁次數和查詢條件,將查詢條件封裝到實體類,然後建立Query物件,在query物件裡新增Criteria物件,做模糊查詢,將剛建好的profile實體類傳入進去
重點來了,ExampleMatcher.matching()這個程式碼是進行匹配的,以前壓根就沒搞過類似的程式碼,所以一竅不通,其中第一行.
withIgnoreNullVlaues()意思是忽略空值,欄位中有空值的時候要忽略,否則查不出準確的條件查詢結果;
withIgnorePaths(), 這是我踩坑最傻的一次,這個方法的入參要傳入所有的有初始值的欄位,比如boolean型別的初始值就是false,否則的話是查不到結果集的,我掉進去很長一段時間爬不起來,切記切記!
後面就不說了,其實我只想說上一個,其餘的沒必要說了