总结MongoDB采用MongoRepository进行查询

Java操作MongoDB采用MongoRepository进行条件查询

1)  实体类实现Serializable接口

@Document(collection = "Memo")
public class Memo implements Serializable {}

2) DAO继承MongoRepository,参数类型>, 并定义方法(若MongoRepository自带方法够用,可以不定义新方法)

@Repository
public interface MemoRepository extends MongoRepository, String> {
    ArrayList findByUserId(String userId);
}

3) 将DAO的Repository注入到Service类(Controller)

@Api(description = "备忘录相关接口")
@RestController
public class MemoController {

    private final MemoRepository memoRepository;

    @Autowired
    public MemoController(MemoRepository memoRepository) {
        this.memoRepository = memoRepository;
    }
}


Repository常用条件查询:

1. 查询所有 

findAll();


2. 分页

public Page queryAllByPage (int page, int rows) throws Exception {

pageRequest pr = new pageRequest(page-1, rows);

return memoReponsitory.findAll(pr);

}


3. 查询所有数据的数量

long size =  memoRepository.count();

int count = Integer.valueOf(String.valueOf(size));


4按实体类属性查询

a.先在DAO层定义方法.     

定义方法名的规则:findBy+属性名(首字母大写)

b.在Service中调用该方法


5.根据属性分页

findBy+属性名(参数类型 参数名,Pageable p)

例:Page memos = memoRepository.findByQsId(String qsId, Pageable p);

@ApiOperation(value="根据qsId获取备忘录列表", notes="根据用户的qsId获取备忘录列表")
@RequestMapping(value = "/{qsId}/memos", method = RequestMethod.GET)
public ResultData list(
        @RequestHeader("token") String token,
        @ApiParam(required = true, value = "qsId") @PathVariable("qsId") String qsId,
        @RequestParam(defaultValue = "1", name = "page") Integer page,
        @RequestParam(defaultValue = "20", name = "size") Integer size) {

    //验证qsId一致
    UserDto baseUser = userService.getBaseUserByToken(token);
    if (!StringUtils.equals(baseUser.getQsId(), qsId)) {
        throw new ForbiddenException();
    }

    PageRequest pageable = new PageRequest(page-1, size, new Sort(Sort.Direction.DESC, "createAt"));
    Page memos = memoRepository.findByQsId(qsId, pageable);
    return ResultData.ok()
            .putDataValue("memos", memos);
}
注:数据库查询分页后,首页默认是第0页,所以当page的默认值为1时,pageRequest的page参数为page-1 


6.根据属性模糊查询

定义方法名的规则:findBy+属性名(首字母大写)+Like(参数类型 参数名);

例:public Memo findByIdLike(String id);


7. 属性模糊查询+分页

a.DAO定义方法:

public Page findByNameLike(String name, Pageable p);

b.Service调用该方法

public List queryByNameAndPage(int page, int rows, String name) throws Exception {

PageRequest pr = new PageRequest(page-1, rows);

return memoRepository.findByNameLike(name, pr).getContent()

}


8.所有数据返回指定字段

@Query(value= "{'_id': {'$ne':null}", fields="{'name':1}")

注:value是查询条件,field是指定的返回字段

返回对象的Id自动返回,不用指定

标红区域可用其他MongoDB原子操作命令代替


9.根据属性查询+分页+返回指定字段

@Query(value="{'name':?0}", fields="{'name':1}")

public Page findByNameLike(String name, Pageable p);

注:?0 是占位符,其中0表示第一个参数,1表示第二个参数....

field中的1 表示该字段(name)要显示,0表示不显示










你可能感兴趣的:(总结MongoDB采用MongoRepository进行查询)