
本文共 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 操作 ,欢迎大家一起学习交流。
发表评论
最新留言
关于作者
