第十二章 springboot + mongodb(复杂查询)

1、application.properties

1 #mongodb note:mongo3.x will not use host and port,only use uri
2 #spring.data.mongodb.host=192.168.22.110
3 #spring.data.mongodb.port=27017
4 #spring.data.mongodb.database=myfirstMongodb
5 spring.data.mongodb.uri=mongodb://192.168.22.110:27017/myfirstMongodb

说明:

  • mongo2.x支持以上两种配置方式
  • mongo3.x仅支持uri方式

2、Admin

 1 package com.xxx.firstboot.domain;
 2
 3 import org.springframework.data.annotation.Id;
 4
 5 /**
 6  * 测试复杂的mongo查询
 7  */
 8 public class Admin {
 9     @Id
10     private String adminId;
11     private String name;
12     private Integer sex;
13     private String address;
14
15     public String getAdminId() {
16         return adminId;
17     }
18
19     public void setAdminId(String adminId) {
20         this.adminId = adminId;
21     }
22
23     public String getName() {
24         return name;
25     }
26
27     public void setName(String name) {
28         this.name = name;
29     }
30
31     public Integer getSex() {
32         return sex;
33     }
34
35     public void setSex(Integer sex) {
36         this.sex = sex;
37     }
38
39     public String getAddress() {
40         return address;
41     }
42
43     public void setAddress(String address) {
44         this.address = address;
45     }
46
47 }

注意:

  • @Id必须有

3、AdminRepository

1 package com.xxx.firstboot.mongo;
2
3 import org.springframework.data.mongodb.repository.MongoRepository;
4
5 import com.xxx.firstboot.domain.Admin;
6
7 public interface AdminRepository extends MongoRepository<Admin, String> {
8 }

说明:该接口用于简单查询。这里是一个空接口,具有CRUD功能。

4、CustomerController

 1 /*********************测试复杂的mongo查询**********************/
 2     @Autowired
 3     private AdminRepository adminRepository;
 4     @Autowired
 5     private MongoTemplate mongoTemplate;
 6
 7     @ApiOperation("增加一个Admin")
 8     @RequestMapping(value = "/addAdmin", method = RequestMethod.GET)
 9     public Admin addAdmin(@RequestParam("name") String name,
10                           @RequestParam("sex") Integer sex,
11                           @RequestParam("address") String address) {
12         Admin admin = new Admin();
13         admin.setName(name);
14         admin.setSex(sex);
15         admin.setAddress(address);
16         return adminRepository.save(admin);
17     }
18
19     @ApiOperation("获取所有的Admin")
20     @RequestMapping(value = "/getAllAdmin", method = RequestMethod.GET)
21     public List<Admin> getAllAdmin() {
22         return adminRepository.findAll();
23     }
24
25     @ApiOperation("复杂的admin查询")
26     @RequestMapping(value = "/getAdminByNameAndSexOrAddress", method = RequestMethod.GET)
27     public Admin getAdminByNameAndSexOrAddress(@RequestParam("name") String name,
28                                                  @RequestParam(value="sex",required=false) Integer sex,
29                                                  @RequestParam(value="address",required=false) String address) {
30         /**
31          * OR
32          */
33         BasicDBList orList = new BasicDBList(); //用于记录
34         if (sex != null) {
35             orList.add(new BasicDBObject("sex", sex));
36         }
37         if (StringUtils.isNotBlank(address)) {
38             orList.add(new BasicDBObject("address", address));
39         }
40         BasicDBObject orDBObject = new BasicDBObject("$or", orList);
41
42         /**
43          * and
44          */
45         BasicDBList andList = new BasicDBList();
46         andList.add(new BasicDBObject("name", name));
47         andList.add(orDBObject);
48         BasicDBObject andDBObject = new BasicDBObject("$and", andList);
49
50         return mongoTemplate.findOne(new BasicQuery(andDBObject), Admin.class);
51
52     }

说明:

  • getAdminByNameAndSexOrAddress要实现select * from admin where name = ? and (sex = ? or address = ?)
  • 通过BasicDBList、BasicDBObject构建查询参数
  • findOne返回第一个符合条件的结果、find返回符合条件的结果列表
  • 以上查询的collection是admin(VO的简单类名),也可以指定从某一个collection中查询(查看find、findOne等方法)

测试:

启动mongo,启动应用,打开swagger,访问即可。

参考:

http://blog.csdn.net/congcong68/article/details/47183209

时间: 2024-10-16 14:57:55

第十二章 springboot + mongodb(复杂查询)的相关文章

JavaScript DOM编程艺术-学习笔记(第十二章)

第十二章 1.本章是综合前面章节的所有东西的,一个综合实例 2.流程:①项目简介:a.获取原始资料(包括文本.图片.音视频等) b.站点结构(文件目录结构) c.页面(文件)结构 ②设计(切图) ③css -  base.css用于引入使用的css文件 color.css  - 用于设置样式 layout.css - 用于设置布局 Typography.css - 用于设置版式 3.题外话:①在实际开发中,即使是一个空白项目也往往不会从一无所有做起,而借助的平台一般会提供目录结构,所以需要把自己

第十二章 APO编程语言

第十二章      APO编程语言 APO编程语言是基于汇编语言和面向对象编程.基本指令只有7种:赋值指令.COPY指令.BTX(位X测试为1.或0转移)指令.查表跳转指令switch(RN){-.}.移位与循环指令S.三操作数运算指令.调用与返回指令.所有的指令大小.除了32位立即数赋值是2字外:其它都是32位,一个字. 指令执行时间,除了32位立即数赋值是2ns.COPY指令取决于拷贝的长度外:其它指令都是1ns. 应用程序只能使用R0-R4,R8-R15的21个寄存器作为高速的寄存器局部变

进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量.所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来

1112第十一章视图第十二章游标(转载)

1112第十一章视图第十二章游标 第十一章 视图 视图最多可以包含1024 列,创建视图时SELECT 查询中不能包含 COMPUTE 子句,COMPUTE BY 子句或INTO 关键字:除非SELECT 中包含TOP 或 FOR XML 子句,否则不能使用 ORDER BY 子句:定义视图的查询不能包含指定查询提示的OPTION子句,也不能包含TABLESAMPLE 子句. 1. 索引视图(物化视图) 必须创建一个唯一聚集索引 P296 创建索引视图时,不能引用其它视图,只能引用基表,并且基表

第十二章 序列表达式和可选工作流

第十二章序列表达式和可选工作流 本章介绍 ■生成和处理序列值 ■处理 F# 序列表达式 ■理解单子和 LINQ 表达式 ■实现 F# 计算表达式 在我们开始讨论序列表达式之前,必须知道什么是序列(sequence),这也是数学的F# 术语.序列是有序的列表,可能包含无穷的元素.这一切听上去有点抽象,但也不用担心,我们已经熟悉这种类型了,在.NET 中表达同样概念的是:IEnumerable<T>. 在.NET 框架中有IEnumerable<T> 类型的主要原因,是它提供一种统一的

第二十五章 springboot + hystrixdashboard

注意: hystrix基本使用:第十九章 springboot + hystrix(1) hystrix计数原理:附6 hystrix metrics and monitor 一.hystrixdashboard 作用: 监控各个hystrixcommand的各种值. 通过dashboards的实时监控来动态修改配置,直到满意为止 仪表盘: 二.启动hystrix 1.下载standalone-hystrix-dashboard-1.5.3-all.jar https://github.com/

第十二章——SQLServer统计信息(2)——非索引键上统计信息的影响

原文:第十二章--SQLServer统计信息(2)--非索引键上统计信息的影响 前言: 索引对性能方面总是扮演着一个重要的角色,实际上,查询优化器首先检查谓词上的统计信息,然后才决定用什么索引.一般情况下,默认会在创建索引时,索引列上均创建统计信息.但是不代表在非索引键上的统计信息对性能没有用. 如果表上的所有列都有索引,那么将会是数据库负担不起,同时也不是一个好想法,包括谓词中用到的所有列加索引同样也不是好方法.因为索引会带来负载.因为需要空间存放索引,且每个DML语句都会需要更新索引. 一般

第十二章——SQLServer统计信息(1)——创建和更新统计信息

原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索引供查询之用,因为SQLServer优化器是基于开销的优化.当在where和on上的列上的数据需要显示在结果集的时候,如果有实时的统计信息,优化器会选择最好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况. 在创建索引的时候,SQLServer就会在索引列上创建统计信息.简单来说,统计信息

第十二章——SQLServer统计信息(4)——在过滤索引上的统计信息

原文:第十二章--SQLServer统计信息(4)--在过滤索引上的统计信息 前言: 从2008开始,引入了一个增强非聚集索引的新功能--过滤索引(filter index),可以使用带有where条件的语句来创建非聚集索引,过滤掉不需要的数据,降低索引的维护开销和存储空间,提高查询性能. 准备工作: 在AdventureWorks2012上,有一个Production.WorkOrder表,将使用这个表来做演示. 步骤: 1.  创建一个非聚集索引在Production.WorkOrder列: