第十一章 springboot + mongodb

1、mongodb在mac上的安装

  • 下载mongodb,https://www.mongodb.org/
  • 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb-osx-x86_64-3.2.6(这是我的mongodb的版本)
  • 配置PATH
    • 输入命令:"vi ~/.bash_profile"
    • 添加如下两句配置:

      1 export MONGO_HOME=/Users/enniu1/Desktop/zjg/mongodb-osx-x86_64-3.2.6
      2 export PATH=$PATH:$MONGO_HOME/bin

  • 创建数据目录
    • 输入命令:"sudo mkdir -p /data/db"
  • 赋予数据目录权限
    • 输入命令:"sudo chmod 777 /data/db"
  • 启动
    • 输入命令:"mongod"
  • 退出:Ctrl+c

注意两个错:

参考:https://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/

2、代码(4个部分)

2.1、com.xxx.firstboot.domain.Customer

 1 package com.xxx.firstboot.domain;
 2
 3 import org.springframework.data.annotation.Id;
 4
 5 /**
 6  * 测试mongodb
 7  */
 8 public class Customer {
 9     /**
10      * cid:该字段用于mongodb的"_id"索引
11      * 1、需要@Id注解
12      * 2、取名无所谓,反正在mongodb中最后都会转化为"_id"
13      * 3、定义为String类型,如果定义为Integer可能索引只会是0,会出现key重复导致数据库插不进去的情况;
14      * 4、该类型也是MongoRepository泛型中主键的ID
15      */
16     @Id
17     private String cid;
18     private String firstname;
19     private String secondname;
20
21     public String getCid() {
22         return cid;
23     }
24
25     public void setCid(String cid) {
26         this.cid = cid;
27     }
28
29     public String getFirstname() {
30         return firstname;
31     }
32
33     public void setFirstname(String firstname) {
34         this.firstname = firstname;
35     }
36
37     public String getSecondname() {
38         return secondname;
39     }
40
41     public void setSecondname(String secondname) {
42         this.secondname = secondname;
43     }
44
45 }

说明:生成的colletion(类似于MySQL中的表)就是domain类的简单类名,eg.customer。

注意:

  • cid:该字段用于mongodb的"_id"索引
  • 需要@Id注解
  • 取名无所谓,反正在mongodb中最后都会转化为"_id"
  • 定义为String类型,如果定义为Integer可能索引只会是0,会出现key重复导致数据库插不进去的情况
  • 该类型也是MongoRepository泛型中主键的ID

2.2、com.xxx.firstboot.mongo.CustomerRepository

 1 package com.xxx.firstboot.mongo;
 2
 3 import java.util.List;
 4
 5 import org.springframework.data.mongodb.repository.MongoRepository;
 6
 7 import com.xxx.firstboot.domain.Customer;
 8
 9 /**
10  * MongoRepository<Customer, Integer>
11  * 第一个参数:T 操作的vo
12  * 第二个参数:ID T的主键类型
13  * 作用:该接口实现了CRUD方法
14  *
15  * 注意:
16  * 1、由于boot使用了spring-data-mongodb,所以我们不需要写该接口的实现,
17  *   当我们运行程序的时候,spring-data-mongodb会动态创建
18  * 2、findBySecondname命名是有讲究的,Secondname(是Customer的属性)若改为lastname就会报找不到属性lastname的错误
19  */
20 public interface CustomerRepository extends MongoRepository<Customer, String> {
21     public Customer findByFirstname(String firstname);
22     public List<Customer> findBySecondname(String secondname);
23 }

说明:该接口就是我们的业务接口。

注意:

  • 继承MongoRepository<T, ID>接口

    • T:操作的domain,例如com.xxx.firstboot.domain.Customer
    • ID:T的主键类型(@ID修饰的属性),通常就是String
    • 该接口的实现类也实现了CRUD操作
  • 我们的接口只需要定义方法的定义,不需要做实现,spring-data-mongodb会在程序运行的时候动态创建
    • 方法的命名是有讲究的,与domain的属性有关(可以再测测)

2.3、com.xxx.firstboot.web.CustomerController

 1 package com.xxx.firstboot.web;
 2
 3 import java.util.List;
 4
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.RequestMethod;
 8 import org.springframework.web.bind.annotation.RequestParam;
 9 import org.springframework.web.bind.annotation.RestController;
10
11 import com.xxx.firstboot.domain.Customer;
12 import com.xxx.firstboot.mongo.CustomerRepository;
13
14 import io.swagger.annotations.Api;
15 import io.swagger.annotations.ApiOperation;
16
17 @RestController
18 @RequestMapping("/customer")
19 @Api("customer相关的API,用于测试mongodb")
20 public class CustomerController {
21
22     @Autowired
23     private CustomerRepository customerRepository;
24
25     @ApiOperation("增加一个Customer")
26     @RequestMapping(value = "/addCustomer", method = RequestMethod.GET)
27     public Customer addCustomer(@RequestParam("firstname") String firstname,
28                                 @RequestParam("secondname") String secondname) {
29         Customer customer = new Customer();
30         customer.setFirstname(firstname);
31         customer.setSecondname(secondname);
32         return customerRepository.save(customer);
33     }
34
35     @ApiOperation("获取所有的Customer")
36     @RequestMapping(value = "/getAllCustomer", method = RequestMethod.GET)
37     public List<Customer> getAllCustomer() {
38         return customerRepository.findAll();
39     }
40
41     @ApiOperation("根据firstname获取Customer")
42     @RequestMapping(value = "/getCustomerByFirstname", method = RequestMethod.GET)
43     public Customer getCustomerByFirstname(@RequestParam("firstname") String firstname) {
44         return customerRepository.findByFirstname(firstname);
45     }
46
47     @ApiOperation("根据secondname获取多个Customer")
48     @RequestMapping(value = "/getCustomerBySecondname", method = RequestMethod.GET)
49     public List<Customer> getCustomerBySecondname(@RequestParam("secondname") String secondname) {
50         return customerRepository.findBySecondname(secondname);
51     }
52
53     @ApiOperation("根据id删除Customer")
54     @RequestMapping(value = "/deleteCustomerById", method = RequestMethod.GET)
55     public boolean deleteCustomerById(@RequestParam("cid") String cid) {
56         customerRepository.delete(cid);
57         return true;
58     }
59 }

说明:直接注入我们自己的业务接口,然后进行相应的操作即可。

此时,就可以进行测试了。只是此时使用的都是mongodb的默认信息。

  • host:localhost
  • port:27017
  • 数据库:test
  • collection:customer(domain类的简单类名)

2.4、application.properties

说明:如果需要指定host、port、数据库,需要在application.properties文件中配置以上信息。

注意:

  • 配置必须以"spring.data.mongodb"为前缀
  • 如果是mongo3.x的话,host和port没用,需要uri。(未测过)
  • uri = mongodb://host:port/数据库

3、测试

启动应用,启动mongo服务进程,打开swagger,使用robomongo客户端观察mongodb存储情况。

没有在application.properties中设置属性。

设置属性后,

参考:

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-data-mongodb

https://spring.io/guides/gs/accessing-data-mongodb/ 其中的例子就是对sample代码的解释

http://www.jianshu.com/p/e59cd2dc5274 关于mongodb主键

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-nosql.html 关于mongo2.x与3.x对host、port、uri配置的支持。

时间: 2024-08-10 21:29:21

第十一章 springboot + mongodb的相关文章

第十一章 springboot + mongodb(简单查询)

1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb-osx-x86_64-3.2.6(这是我的mongodb的版本) 配置PATH 输入命令:"vi ~/.bash_profile" 添加如下两句配置: 1 export MONGO_HOME=/Users/enniu1/Desktop/zjg/mongodb-osx-x86_64-3.2

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

简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(BasicDBList.BasicDBObject.Criteria等) 1.application.properties 1 #mongodb note:mongo3.x will not use host and port,only use uri 2 #spring.data.mongodb.hos

第十一章 SpringBoot事物管理器

一.springboot整合事物管理 springboot默认集成事物,只主要在方法上加上@Transactional即可 二.SpringBoot分布式事物管理 使用springboot+jta+atomikos 分布式事物管理 1.pom文件 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <

第二十一章 springboot + 定时任务

1.application.properties #cron job.everysecond.cron=0/1 * * * * * job.everytensecond.cron=0/10 * * * * * job.everyminute.cron=0 0/1 * * * * job.everysecond2.cron=* 0/1 * * * * 注意:cron表达式 第一个:每秒 第二个:每10秒 第三个:每分 第四个:每秒(注意这个不是每分) 2.CronJobTest.java 1 pa

第四部分 性能篇 第十一章 MongoDB 性能监控

声明:该文章主要来自<MongoDB实战>一书内容,主要想通过该书学习MongoDB的相应知识,加深理解,故写在自己的博文当中,作为记录在最后的章节中,会有一个自己集合MongoDB数据库应用的JavaEE的web应用. 1.MongoStat 此工具可以快速的查看某组运行中的MongoDB实例的统计信息,用法如下: [[email protected] bin]# ./mongostat connected to: 127.0.0.1 insert query update delete g

javascript高级程序设计 第十一章--DOM扩展

javascript高级程序设计 第十一章--DOM扩展DOM最主要的扩展就是选择符API.HTML5和Element Traversal Selectors API:定义了两个方法 querySelector() 和 querySelectorAll(),能够基于CSS选择符从DOM中取得元素.querySelector()方法接收一个CSS选择符,返回该模式匹配的第一个元素,querySelectorAll()接收的参数一样,但是返回NodeList实例: matchesSelector()

c++ primer 5th 笔记:第十一章

第十一章:关联容器 笔记 1. 关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的.与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的. 2. 关联容器支持高效的关键字查找和访问,两个主要的关联容器类型是map和set.map中的元素是一些关键字-值对:关键字起到索引的作用,值则表示与索引相关联的数据.set中每个元素只包含一个关键字:set支持高效的关键字查询操作--检查一个给定关键字是否在set中. 3. 当从map中提取一个元素时,会得到一个pair

zabbix专题:第十一章 zabbix proxy分布式监控配置

zabbix专题:第十一章 zabbix proxy分布式监控配置             对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.co zabbix proxy分布式监控配置 zabbix proxy可以代替zabbix server检索客户端的数据,然后把数据汇报给zabbix server,并且在一定程度上分担了zabbix server的压力.zabbix proxy可以非常简便的实现了集中式.分

第十一章 执行查询算法

第十一章      执行查询算法 基本概念: 三类查找方法:线性查找.树形查找.哈希表查找 动态查找表:在查找的同时,对表做修改操作(如插入和删除),则相应的表称为动态查找表 静态查找表:与动态查找表相反 查找过程中对关键字需要执行的平均比较次数(也称平均比较长度作为衡量一个查找算法优劣的标准 平均比较长度: 其中:n是结点的个数:pi是查找第i个结点的概率.若不特别申明,认为每个结点的查找概率相等,都为1/n:ci是找到第i个结点所需进行的比较次数. 线性查找: 基本思想:从表的一端开始,顺序