gpt4 book ai didi

MongoRepository查询数据常用语法

转载 作者:我是一只小鸟 更新时间:2023-03-09 22:31:34 31 4
gpt4 key购买 nike

安装

查看mongo可用版本 。

docker search mongo 。

安装指定版本的mogo或者拉取最新版本的镜像 。

docker pull mongo:latest 。

或者官网下载安装包 https://www.mongodb.com/try/download/community-kubernetes-operator 下载完成解压至自己的目录 。

tar -zxvf mongodb-macos-x86_64-4.2.18.tgz 。

创建mongo数据持久化目录 。

sudo mkdir -p /usr/local/var/mongodb 。

创建mongo数据库日志目录 。

sudo mkdir -p /usr/local/var/log/mongodb 。

分配权限 sudo chown my_mongodb_user /usr/local/var/mongodb sudo chown my_mongodb_user /usr/local/var/log/mongodb 运行mongod服务 。

mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork 。

查看是否启动成功 。

ps aux | grep -v grep | grep mongod 。

shell操作mongo 。

mongo 。

初次安装,只有几个默认的数据库 。

springboot程序查询mongo可以借助MongoRepository或者MongoTemplate 这里的MongoRepository跟spring data jpa很像,由于继承了CrudRepository或者ListCrudRepository和QueryByExampleExecutor所以基本的增删改查操作都可以直接调用方法来实现 如果使用MongoRepository多字段条件查询时可能会很复杂,使用MongoTemplate查询更为方便,这两者的使用得依靠自己来区分哪种方式更为方便 比如一般的分页以及排序查询MongoRepository更为方便一些 而mongoTemplate只能靠mongoTemplate.query()来实现分页的查询 。

spring data jpa

                        
                          interface PersonRepository extends Repository<Person, Long> {

  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);

  // Enables the distinct flag for the query
  List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
  List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);

  // Enabling ignoring case for an individual property
  List<Person> findByLastnameIgnoreCase(String lastname);
  // Enabling ignoring case for all suitable properties
  List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);

  // Enabling static ORDER BY for a query
  List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
  List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}

                        
                      

解析查询的方法名称分为主语和谓语find…By,exists…By),第二部分形成谓词,可以进一步操作如,find(或其他引入关键字)和By之间的任何文本可认为形容词,除非使用结果限制关键字,如Distinct在要创建的查询上设置不同的标志,如根据用户名去重复(findDistinctByUsername)或者使用Top/First来限制查询结果(findFirstByUsername),排序之后取前3条数据(findTop3ByOrderByCreateTimeDesc)。 Repository中的特殊参数 除了基本类型参数,还可以支持Pageable和 Sort来进行分页和排序 。

                        
                          Page<User> findByLastname(String lastname, Pageable pageable);

Slice<User> findByLastname(String lastname, Pageable pageable);

List<User> findByLastname(String lastname, Sort sort);

List<User> findByLastname(String lastname, Pageable pageable);

                        
                      

分页

使用Pageable参数来进行分页,使用sort来排序,因为page分页需要根据总数来进行分页计算,判断总共多少页,是否有下一页等等,如果只想分页,不需要知道总共多少页,可使用slice实现,根据属性hasNext判断是否有下一次分页即可,因为计算总页数需要总条数,使用page来接受会额外花费一次count查询 如果只需要排序,可以在方法参数添加sort,可以使用page也可以使用list接受 。

在jpa查询中,如果添加了pageable,但是不想分页查询,可以使用Pageable.unpaged(),如果不想使用排序可以使用Sort.unsorted(),如果传入null值会报NPE 。

排序

定义排序表达式,可以多个条件同时排序 。

                        
                          Sort sort = Sort.by("firstname").ascending().and(Sort.by("lastname").descending());

                        
                      

lambda条件表达式 。

                        
                          TypedSort<Person> person = Sort.sort(Person.class);
Sort sort = person.by(Person::getFirstname).ascending().and(person.by(Person::getLastname).descending());

                        
                      

条数限制

在find...By中间可以使用其他限制词,比如first或者top关键词来限制查询结果的条数,如果只写first或者top,默认为1条,即findByFirst1 = findByFirst = findByTop 。

                        
                          User findFirstByOrderByLastnameAsc();

User findTopByOrderByAgeDesc();

Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);

Slice<User> findTop3ByLastname(String lastname, Pageable pageable);

List<User> findFirst10ByLastname(String lastname, Sort sort);

List<User> findTop10ByLastname(String lastname, Pageable pageable);

                        
                      

如果是单条查询,如findFirstByOrderByLastnameAsc可以将返回结果使用Optional来包装避免NPE 。

                        
                          Optional<User> findFirstByOrderByLastnameAsc();

                        
                      

常用关键词 。

关键词 描述
find…By,read…By,get…By,query…By,search…By,stream…By 一般查询方法通常返回存储库类型
exists…By 是否存在,一般返回boolean|
count…By 统计条数|
delete…By,remove…By 删除方法,无返回结果(void)
…First …,…Top 将查询结果限制为结果的第一个 。此关键字可以出现在主题的任何地方,介于find(和其他关键字)和by。如前两条findTop2By
…Distinct… 使用不同的查询仅返回唯一的结果介于find(和其他关键字)和by。

最后此篇关于MongoRepository查询数据常用语法的文章就讲到这里了,如果你想了解更多关于MongoRepository查询数据常用语法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com