Springboot 整合 MongoDB CURD 操作
发布日期:2021-05-07 13:15:36 浏览次数:27 分类:原创文章

本文共 7090 字,大约阅读时间需要 23 分钟。

MongoDB 是什么我就不介绍了   详情看百度百科 

或者其他有关资料

废话不多说 上教程:

第一步:在 pom.xml 文件中 加入MongoDB 相关依赖

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

第二步 : 配置MongoDB 相关信息

yaml/yml文件配置(本文采用的方式)

spring:  # mongodb 配置  data:    mongodb:      uri: mongodb://lzw:lzwlzw@localhost:27017/imagesdb

说明:  uri: mongodb://username:password@ip:端口号/数据库名

properties 文件配置:

spring.data.mongodb.host=ipspring.data.mongodb.port=端口号spring.data.mongodb.username=用户名spring.data.mongodb.password=密码spring.data.mongodb.database=数据库名spring.data.mongodb.authentication-database=用户名

第三步 : 编写实体类

Photos 类

package com.lzw.braindeeplearnserver.entity;import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.Document;/** * 功能描述 * * @Author LZW * @CreateTime 2021/03/10 14:52 * @UpdateTime 2021/03/10 14:52 * @Version 1.0.0 */@Document(collection = "photos")public class Photos {    @Id    private String id;    private String pname;    @Override    public String toString() {        return "Photos{" +                "id='" + id + '\'' +                ", pname='" + pname + '\'' +                '}';    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getPname() {        return pname;    }    public void setPname(String pname) {        this.pname = pname;    }}

注意和你的集合保持一致,记得在实体类加入注解:

@Document(collection = "集合名")
@Idprivate String id;  这里对应的是 MongoDB 中的 _id(默认的主键,自动生成)

创建集合的语句:

db.createCollection("photos")db.photos.insert([{"pname":"test.jpg"},{"pname":"admin.jpg"}])   db.photos.find()

第四步 : 编写Service 层

PhotosInfoService
package com.lzw.braindeeplearnserver.service;import com.lzw.braindeeplearnserver.entity.Photos;import java.util.List;public interface PhotosInfoService{    List<Photos> queryByPname(String pname);    List<Photos> queryAll();    boolean remove(String pname);    boolean insert(Photos photos);    boolean updateById(String id,String pname);}

 

PhotosInfoServiceImpl
package com.lzw.braindeeplearnserver.service.impl;import com.lzw.braindeeplearnserver.entity.Photos;import com.lzw.braindeeplearnserver.service.PhotosInfoService;import com.mongodb.client.result.DeleteResult;import com.mongodb.client.result.UpdateResult;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.query.Criteria;import org.springframework.data.mongodb.core.query.Query;import org.springframework.data.mongodb.core.query.Update;import org.springframework.stereotype.Service;import java.util.List;/** * 功能描述 * * @Author LZW * @CreateTime 2021/03/11 14:59 * @UpdateTime 2021/03/11 14:59 * @Version 1.0.0 */@Servicepublic class PhotosInfoServiceImpl implements PhotosInfoService {    @Autowired    MongoTemplate mongoTemplate;    /**     * 根据 pname 查询     *     * @param pname     * @return     */    @Override    public List<Photos> queryByPname(String pname) {        Query query = new Query(Criteria.where("pname").is(pname));        List<Photos> list = mongoTemplate.find(query, Photos.class);//        list  ------> list:[Photos{id='1001', pname='xxxx.jpg'}]        return list;    }    /**     * 查询所有数据     *     * @return     */    @Override    public List<Photos> queryAll() {        List<Photos> list = mongoTemplate.find(new Query(new Criteria()), Photos.class);        return list;    }    /**     * 根据 pname 删除数据     *     * @param pname     * @return     */    @Override    public boolean remove(String pname) {        Query query = Query.query(Criteria.where("pname").is(pname));//         query ----->  query:========Query: { "pname" : "test.jpg"}, Fields: {}, Sort: {}        if (query == null) {            return false;        } else {            DeleteResult result = mongoTemplate.remove(query, Photos.class);//          result ------> 删除的内容是:AcknowledgedDeleteResult{deletedCount=1}            return true;        }    }    @Override    public boolean insert(Photos photos) {//        mongoTemplate.save(photos) ----> Photos{id='1001', pname='xxxx.jpg'}        Photos result = mongoTemplate.save(photos);        if (result == null) {            return false;        }        return true;    }    @Override    public boolean updateById(String id, String pname) {        Query query = new Query(Criteria.where("id").is(id));        Update update = Update.update("pname", pname);        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Photos.class);//        updateResult -----> update:AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null}        return false;    }}

以上的 返回值可根据自己需要进行改写 ,本文这里只做一个演示效果

第五步 :  编写 Controller

 

package com.lzw.braindeeplearnserver.controller;import com.lzw.braindeeplearnserver.entity.Photos;import com.lzw.braindeeplearnserver.entity.Result;import com.lzw.braindeeplearnserver.service.PhotosInfoService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;/** * 功能描述 * * @Author LZW * @CreateTime 2021/03/11 14:25 * @UpdateTime 2021/03/11 14:25 * @Version 1.0.0 */@RestController@RequestMapping("photos")public class PhotosController {    @Autowired    PhotosInfoService photosInfoService;    /**     * 根据 pname  查询数据     * @param pname     * @return     */    @RequestMapping("queryByPname")    public List<Photos> queryByPname(String pname) {        List<Photos> list = photosInfoService.queryByPname(pname);        return list;    }    /**     * 查询 所有数据     * @return     */    @RequestMapping("queryAll")    public  List<Photos> query(){        List<Photos> list = photosInfoService.queryAll();        return list;    }    /**     * 根据 pname 删除 数据     * @param pname     * @return     */    @RequestMapping("remove")    public Result remove(String pname){        if(photosInfoService.remove(pname)){           return Result.sendSuccessMsg("删除成功...");        }        return Result.sendFailMsg("删除失败,请重试...");    }    @RequestMapping("insert")    public void insert(@RequestBody Photos photos){        System.out.println(photosInfoService.insert(photos));    }    @RequestMapping("update")    public void update(String id ,String pname){        System.out.println(photosInfoService.updateById(id,pname));    }}

注:上面的Result 是用来给前端返回的数据,可根据自己修改成想要的数据

补充

如果大家遇到如下的错误:

Caused by: com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server XXXXXXX:27017. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" }
 

原因:

MongoDB中每个数据库之间是相互独立的,都有独立的权限,正确的做法是使用root账号在【将要操作的数据库】中创建一个【子账号】,在用这个子账号连接mongo:

解决办法:

切换到你要操作的 数据库 

创建一个操作用户即可:

 db.createUser({user:"lzw",pwd:"lzwlzw",roles:[{role:"dbOwner",db:"imagesdb"}]})

以上是Spingboot 对MongoDB进行简单的 CURD 操作 ,欢迎大家一起学习交流。

 

 

 

上一篇:MySQL 设置 创建时间 和 更新时间
下一篇:Windows 10 安装 MySQL 8

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月21日 05时32分18秒