Utilisation de base de SpringBootMongoDB


Pour la syntaxe de base de MongoDB, veuillez cliquer: Syntaxe de base de MongoDB L'
utilisation directe de SpringBootMongoDB pour faire fonctionner MongoDB nous empêchera de créer directement une base de données MongoDB. Très pratique.

1. Préparation

0.Docker installer 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. dépendance pom

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

Fichier de configuration 2.yml

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

3. La classe de démarrage principale

La base de données mysql n'étant pas utilisée, la configuration de la source de données est exclue

@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);
    }
}

L'erreur de démarrage est due au fait qu'il n'y a pas d'informations sur la source de données de configuration.
Insérez la description de l'image ici

Deux, le code

Classe d'entité

/**
 * 不使用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;
}

Utilisez MongoRepository pour faire fonctionner MongoDB

Créez une interface pour hériter d'un MongoRepository, vous pouvez utiliser l'opération d'ajout, de suppression, de modification et de vérification par défaut

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> {
    
    
}

Un service

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);
    }
}

Manette

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, "删除成功");
    }

}

Utilisez MongoTemplate pour faire fonctionner MongoDB

Insérez la description de l'image ici

@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");
}

Trois, BUG

Bug1 Mongo ne peut pas se connecter à distance

Insérez la description de l'image ici

Échec du démarrage de la connexion à MongoDB
Raison:
Le mongodb dans le miroir ne modifie pas la connexion à distance et n'est accessible qu'à l'intérieur de la machine virtuelle!
Solution:

#进入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
即可开启远程连接

Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici

Bug2 Impossible d'apt-get update dans le conteneur Dokcer

Insérez la description de l'image ici
Copiez les fichiers du conteneur sur l'hôte, modifiez-les dans l'hôte et téléchargez-les à l'emplacement d'origine dans le conteneur Docker.

Insérez la description de l'image ici
Arrêtez d'abord le conteneur, sinon cp peut échouer et le fichier peut être en cours d'utilisation

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 

Redémarrez le conteneur et constatez que le fichier a été modifié avec succès
Insérez la description de l'image ici

Insérez la description de l'image ici
Le serveur Alibaba Cloud doit se rappeler d'ouvrir les ports externes
Insérez la description de l'image ici

Visitez ip + 27017 dans la zone de navigation pour voir cette phrase, cela signifie que l'installation est réussie. Peut se connecter à distance
Insérez la description de l'image ici
Si vous ne pouvez pas vous connecter à distance, essayez de redémarrer le service docker.

La requête du bogue3 n'est pas certifiée

Insérez la description de l'image ici

La raison est la suivante: la
dépendance spring-boot-starter-security est ajoutée au fichier pom,
supprimez simplement cette dépendance.
Insérez la description de l'image ici

recherche réussie
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/DreamsArchitects/article/details/109352784
conseillé
Classement