Grundlegende Verwendung von SpringBootMongoDB


Für die grundlegende Grammatik von MongoDB klicken Sie bitte auf: Grundlegende Grammatik von MongoDB
Wenn Sie SpringBootMongoDB direkt verwenden, um MongoDB zu betreiben, können Sie keine MongoDB-Datenbank direkt erstellen. Sehr angenehm.

1. Vorbereitung

0.Docker installiert MongoDB

# 拉取镜像
 docker pull mongo:3.6
 # 查看镜像
 docker images
 # 创建容器
docker run --name mongo -v ~/docker/mongo:/data/db -p 27017:27017 -d mongo:3.6  
 # 查看容器
 docker ps 
 # 进入容器
 docker exec -it mongo /bin/bash

1.pom Abhängigkeit

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2.yml Konfigurationsdatei

spring:
  data:
    mongodb:
      host: 116.62.13.104
      database: spitdb

3. Die Hauptstartklasse

Da die MySQL-Datenbank nicht verwendet wird, ist die Datenquellenkonfiguration ausgeschlossen

@EnableEurekaClient
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class SpitApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(SpitApplication.class);
    }

    @Bean
    public IdWorker getIdWorkder() {
    
    
        return new IdWorker(1,1);
    }
}

Der Startfehler ist darauf zurückzuführen, dass keine Informationen zur Konfigurationsdatenquelle vorhanden sind.
Fügen Sie hier eine Bildbeschreibung ein

Zwei, der Code

Entitätsklasse

/**
 * 不使用JPA 所有不需要设置@Entity和@Table
 */
@Data
public class Spit implements Serializable {
    
    
    @Id
    private String _id;
    private String content;
    private Date publishtime;
    private String userid;
    private String nickname;
    private Integer visits;
    private Integer thumbup;
    private Integer share;
    private Integer comment;
    private String state;
    private String parentid;
}

Verwenden Sie MongoRepository, um MongoDB zu betreiben

Erstellen Sie eine Schnittstelle, um ein MongoRepository zu erben. Sie können die Standardoperation zum Hinzufügen, Löschen, Ändern und Überprüfen verwenden

package com.lsh.repository;

import com.lsh.model.Spit;
import org.springframework.data.mongodb.repository.MongoRepository;

/**
 * @author :LiuShihao
 * @date :Created in 2020/10/29 2:57 下午
 * @desc :类似于JPA的操作一样,创建接口继承一个MongoRepository,就可以使用默认的增删改查的操作
 */
public interface SpitRepository extends MongoRepository<Spit, String> {
    
    
}

Bedienung

package com.lsh.service;

import com.lsh.model.Spit;

import java.util.List;

/**
 * @author :LiuShihao
 * @date :Created in 2020/10/29 2:53 下午
 * @desc :
 */
public interface SpitService {
    
    
    /**
     * 查询全部数据
     * @return
     */
    List<Spit> findAll();
    /**
     * 根据id查询
     * @return
     */
    Spit findById(String id);
    /**
     * 添加数据
     * @return
     */
    void save(Spit spit);
    /**
     * 更新数据
     * @return
     */
    void update(Spit spit);
    /**
     * 删除数据
     * @return
     */
    void deleteById(String id);
}

ServiceImpl

package com.lsh.service.impl;

import com.lsh.model.Spit;
import com.lsh.repository.SpitRepository;
import com.lsh.service.SpitService;
import com.lsh.util.IdWorker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author :LiuShihao
 * @date :Created in 2020/10/29 2:59 下午
 * @desc :
 */
@Service
@Transactional
public class SpitServiceImpl implements SpitService {
    
    
    @Autowired
    SpitRepository repository;

    @Autowired
    IdWorker idWorker;

    @Override
    public List<Spit> findAll() {
    
    
        return repository.findAll();
    }

    @Override
    public Spit findById(String id) {
    
    
        return repository.findById(id).get();
    }

    @Override
    public void save(Spit spit) {
    
    
        repository.save(spit);
    }

    @Override
    public void update(Spit spit) {
    
    
        repository.save(spit);
    }

    @Override
    public void deleteById(String id) {
    
    
        repository.deleteById(id);
    }
}

Regler

package com.lsh.controller;

import com.lsh.model.Spit;
import com.lsh.service.SpitService;
import com.lsh.util.ResultObject;
import com.lsh.util.StatusCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author :LiuShihao
 * @date :Created in 2020/10/29 2:53 下午
 * @desc :
 */
@RestController
@CrossOrigin
@RequestMapping("/spit")
public class SpitController {
    
    

    @Autowired
    SpitService spitService;

    @GetMapping
    public ResultObject findAll(){
    
    
        return new ResultObject(true, StatusCode.OK, "查询成功", spitService.findAll());
    }

    @GetMapping(value = "/{spitId}")
    public ResultObject findById(@PathVariable String spitId){
    
    
        return new ResultObject(true, StatusCode.OK, "查询成功", spitService.findById(spitId));
    }

    @PostMapping
    public ResultObject save(@RequestBody Spit spit){
    
    
        spitService.save(spit);
        return new ResultObject(true, StatusCode.OK, "保存成功");
    }

    @PutMapping(value = "/{spitId}")
    public ResultObject update(@PathVariable String spitId, @RequestBody Spit spit){
    
    
        spit.set_id(spitId);
        spitService.update(spit);
        return new ResultObject(true, StatusCode.OK, "修改成功");
    }

    @DeleteMapping(value = "/{spitId}")
    public ResultObject delete(@PathVariable String spitId){
    
    
        spitService.deleteById(spitId);
        return new ResultObject(true, StatusCode.OK, "删除成功");
    }

}

Verwenden Sie MongoTemplate, um MongoDB zu betreiben

Fügen Sie hier eine Bildbeschreibung ein

@Autowired
private MongoTemplate mongoTemplate;

public void thumbup(String spitId) {
    
    
    //方式一:效率有问题
    //Spit spit = spitDao.findById(spitId).get();
    //spit.setThumbup((spit.getThumbup()==null ? 0 : spit.getThumbup()) + 1);
    //spitDao.save(spit);

    //方式二:使用原生mongo命令来实现自增 db.spit.update({"_id":"1"},{$inc:{thumbup:NumberInt(1)}})
   Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(spitId));
        Update update = new Update();
        update.inc("visist", 1);
        mongoTemplate.updateFirst(query,update,"spit");
}

Drei, BUG

Bug1 Mongo kann keine Remoteverbindung herstellen

Fügen Sie hier eine Bildbeschreibung ein

Verbindung zu MongoDB konnte nicht hergestellt werden
Grund:
Der Mongodb im Spiegel ändert die Remoteverbindung nicht und kann nur innerhalb der virtuellen Maschine aufgerufen werden!
Lösung:

#进入mongo容器内部
docker exec -it mongodb /bin/bash

#输入mongo进入mongo数据库
mongo

# 进入 admin 的数据库
use admin
# 创建管理员用户
db.createUser(
   {
    
    
     user: "admin",
     pwd: "123456",
     roles: [ {
    
     role: "userAdminAnyDatabase", db: "admin" } ]
   }
 )
 # 创建有可读写权限的用户. 对于一个特定的数据库, 比如'demo'
 db.createUser({
    
    
     user: 'spit',
     pwd: '123456',
     roles: [{
    
    role: "read", db: "spitdb"}]
 })
# 远程连接的开启
# 在容器内部当中
#更新源
apt-get update
# 安装 vim
apt-get install vim
# 修改 mongo 配置文件
vim /etc/mongod.conf.orig
将其中的
bindIp: 127.0.0.1
注释掉# bindIp: 127.0.0.1
或者改成bindIp: 0.0.0.0
即可开启远程连接

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Bug2 Update im Dokcer-Container kann nicht passend abgerufen werden

Fügen Sie hier eine Bildbeschreibung ein
Kopieren Sie die Dateien im Container auf den Host, ändern Sie sie auf dem Host und laden Sie sie an den ursprünglichen Speicherort im Docker-Container hoch.

Fügen Sie hier eine Bildbeschreibung ein
Stoppen Sie zuerst den Container, andernfalls kann cp fehlschlagen und die Datei wird möglicherweise verwendet

docker cp mongo:/etc/mongod.conf.orig /data/

将其中的
bindIp: 127.0.0.1
注释掉# bindIp: 127.0.0.1
或者改成bindIp: 0.0.0.0
即可开启远程连接



docker cp /data/mongod.conf.orig mongo:/etc/mongod.conf.orig 

Starten Sie den Container neu und stellen Sie fest, dass die Datei erfolgreich geändert wurde
Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein
Der Alibaba Cloud-Server muss daran denken, externe Ports zu öffnen
Fügen Sie hier eine Bildbeschreibung ein

Besuchen Sie ip + 27017 im Suchbereich, um diesen Satz zu sehen. Dies bedeutet, dass die Installation erfolgreich ist. Remoteverbindung herstellen
Fügen Sie hier eine Bildbeschreibung ein
Wenn Sie keine Remoteverbindung herstellen können, starten Sie den Docker-Dienst neu.

Bug3-Abfrage ist nicht zertifiziert

Fügen Sie hier eine Bildbeschreibung ein

Der Grund ist: Die
Spring-Boot-Starter-Sicherheitsabhängigkeit wird der POM-Datei hinzugefügt.
Entfernen Sie einfach diese Abhängigkeit.
Fügen Sie hier eine Bildbeschreibung ein

Suche erfolgreich
Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/DreamsArchitects/article/details/109352784
Empfohlen
Rangfolge