SpringBoot 使用MongoDB处理JSON数据(增删改查)
1.maven 引入pom文件包
<!-- mongodb --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.78</version> </dependency>
2.application.properties 或者application.yml 配置连接MongoDB
#非密码链接 spring.data.mongodb.uri=mongodb://localhost:27017/my-mongo #密码链接 spring.data.mongodb.uri=mongodb://用户名:密码@ip:27017/my-mongo
3.创建实体类集合(例如:DemoJson >> demo_json)
备注:
@Document 表示
Java
的类名对应的MongoDB
的集合名称。
@Id
映射MongoDB
的_id
字段,若没有使用这两个注解,则字段中名称为id
的字段将自动映射到_id
@Field
将Java
类中字段名称与MongoDB
集合中字段名称不一致的字段映射成一致的。使用驼峰命名的apiName
字段,想要映射成MongoDB
中的api_name
字段就可以使用@Field
import com.alibaba.fastjson.JSONObject; import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; /** * * @author zyx */ @Document(collection = "demo_json") @Data public class DemoJson { @Id private String id; private String name; private String date; @Field(value = "api_name") private String apiName; @Field(value = "result_json") private JSONObject resultJson; }
4.service、impl层,增删改查
备注:注入MongoTemplate
类可实现对MongoDB
的增删改查操作。
service
package com.stars.base.mongo.service; import com.stars.base.mongo.base.DemoJson; import java.util.List; /** * @author zyx */ public interface DemoJsonService { /** * 根据name获取所有数据 find查询集合,findOne查询一个 * @param name * @return */ List<DemoJson> getDemoJsonList(String name); /** * 根据name,apiName 获取单独一条数据 find查询集合,findOne查询一个 * @param name * @param apiName * @return */ DemoJson getDemoJsonOne(String name,String apiName); /** * 插入数据 insert插入重复数据会报异常,save对已存在的数据进行更新 * @param demoJson */ void insertDemo(DemoJson demoJson); /** * 删除 * @param name */ void delDemo(String name); /** * 修改 updateFirst更新一个,updateMulti更新多个 * @param name */ void updateDemo(String name); }
serviceImpl
package com.stars.base.mongo.service.impl; import com.stars.base.mongo.base.DemoJson; import com.stars.base.mongo.service.DemoJsonService; 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 javax.annotation.Resource; import java.util.List; /** * @author zyx */ @Service public class DemoJsonServiceImpl implements DemoJsonService { @Resource private MongoTemplate mongoTemplate; /** * 根据name获取所有数据 find查询集合,findOne查询一个 * @param name * @return */ @Override public List<DemoJson> getDemoJsonList(String name) { Criteria criteria = Criteria.where("name").is(name); Query query = new Query(); query.addCriteria(criteria); return mongoTemplate.find(query,DemoJson.class); } /** * 根据name,apiName 获取单独一条数据 find查询集合,findOne查询一个 * @param name * @param apiName * @return */ @Override public DemoJson getDemoJsonOne(String name, String apiName) { Criteria criteria = Criteria.where("name").is(name); Criteria criteria1 = Criteria.where("api_name").is(apiName); Query query = new Query(); query.addCriteria(criteria); query.addCriteria(criteria1); return mongoTemplate.findOne(query,DemoJson.class); } /** * 插入数据 insert插入重复数据会报异常,save对已存在的数据进行更新 * @param demoJson */ @Override public void insertDemo(DemoJson demoJson) { mongoTemplate.insert(demoJson); //或者 mongoTemplate.save(demoJson); } /** * 删除 * @param name */ @Override public void delDemo(String name) { Criteria criteria = Criteria.where("name").is(name); Query query = new Query(); query.addCriteria(criteria); mongoTemplate.remove(query,DemoJson.class); } /** * 修改 updateFirst更新一个,updateMulti更新多个 * @param name */ @Override public void updateDemo(String name) { Criteria criteria = Criteria.where("name").is(name); Query query = new Query(); query.addCriteria(criteria); Update update = Update.update("api_name", "apiDemoUp") .set("date", "20211206"); mongoTemplate.updateFirst(query, update, DemoJson.class); } }
5.controller,调用
package com.stars.base.mongo.controller; import com.alibaba.fastjson.JSONObject; import com.stars.base.mongo.base.DemoJson; import com.stars.base.mongo.service.DemoJsonService; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author zyx */ @RestController @RequestMapping("/demo") @Slf4j public class DemoJsonController { @Resource private DemoJsonService demoJsonService; /** * 根据map查询单条数据 * @param map * @return */ @RequestMapping("/query") public Map query(@RequestBody Map<String, String> map) { String name = map.get("name"); String apiName = map.get("apiName"); DemoJson demoJson = demoJsonService.getDemoJsonOne(name,apiName); Map result = new HashMap(1); result.put("code","0000"); result.put("msg","OK"); result.put("result",demoJson); return result; } /** * 根据条件查询所有数据 * @param map * @return */ @RequestMapping("/queryList") public Map queryList(@RequestBody Map<String, String> map) { String name = map.get("name"); List<DemoJson> demoJsonList = demoJsonService.getDemoJsonList(name); Map result = new HashMap(1); result.put("code","0000"); result.put("msg","OK"); result.put("result",demoJsonList); return result; } /** * 新增Json * @return */ @RequestMapping("/addDemoJson") public Map addDemoJson() { DemoJson demoJson = new DemoJson(); demoJson.setName("测试json"); demoJson.setApiName("apiDemo"); demoJson.setDate("20211205"); //json字符串 String jsonStr = "{\"code\":\"0000\",\"msg\":\"OK\",\"result\":[{\"DATA\":[{\"ID\":\"001\",\"STATUS\":\"在营(开业)\",\"NAME\":\"测试名称\",\"DATE\":\"20211205\",\"TEL\":\"4009000\",\"REMARK\":\"备注\"}],\"SIZE\":1,\"MODEL\":\"DEMOINFO\",\"TOTALCOUNT\":1}],\"successFlag\":true}"; //json字符串转换为jsonObject JSONObject jsonObject = JSONObject.parseObject(jsonStr); demoJson.setResultJson(jsonObject); //入库MongoDB demoJsonService.insertDemo(demoJson); Map result = new HashMap(1); result.put("code","0000"); result.put("msg","OK"); return result; } /** * 删除数据 * @param map * @return */ @RequestMapping("/delDemo") public Map delDemo(@RequestBody Map<String, String> map) { String name = map.get("name"); demoJsonService.delDemo(name); Map result = new HashMap(1); result.put("code","0000"); result.put("msg","删除成功"); return result; } /** * 修改数据 * @param map * @return */ @RequestMapping("/updateDemo") public Map updateDemo(@RequestBody Map<String, String> map) { String name = map.get("name"); demoJsonService.updateDemo(name); Map result = new HashMap(1); result.put("code","0000"); result.put("msg","修改成功"); return result; } }
6.postman测试接口
1.新增接口
查询MongoDB库 >> my-mongo库中集合 demo_json
2.查询接口
3.修改接口
查询刚刚那条数据,发现值已经改了
4.删除数据
库中查询,发现数据已经删除