1. 程式人生 > >關於mongoTemplate的條件分頁查詢封裝方法

關於mongoTemplate的條件分頁查詢封裝方法

先上實體類

@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,否則的話是查不到結果集的,我掉進去很長一段時間爬不起來,切記切記!

    後面就不說了,其實我只想說上一個,其餘的沒必要說了