zoukankan      html  css  js  c++  java
  • 第十一章 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
        View Code
    • 创建数据目录
      • 输入命令:"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 }
    View Code

    说明:生成的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 }
    View Code

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

    注意:

    • 继承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 }
    View Code

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

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

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

    2.4、application.properties

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

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

    注意:

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

    3、测试

    启动应用,启动mongo服务进程,打开swagger,使用robomongo或者mongobooster客户端观察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配置的支持。

    http://blog.didispace.com/springbootmongodb/ 主键为Long uri用户名、密码配置

  • 相关阅读:
    关于标签类的注意事项
    层叠样式表css的优先级
    link常用的作用
    html中属于布尔类型的属性
    行级标签和块级标签的区别
    拥有inline-block属性的标签
    JDK中的Timer和TimerTask详解(zhuan)
    关于 MySQL LEFT JOIN 你可能需要了解的三点(zhuan)
    Logger日志级别说明及设置方法、说明 (zhuan)
    Velocity教程 (zhuan)
  • 原文地址:https://www.cnblogs.com/java-zhao/p/5449333.html
Copyright © 2011-2022 走看看