SpringBoot操作Mongo
创始人
2024-04-26 14:01:36
0

文章目录

  • 引入依赖
  • yaml
  • 实体类
  • 集合操作
    • 创建删除
    • 相关注解
  • 文档操作
    • 添加实验 数据
    • 查询
    • 添加
    • 更新
    • 删除

引入依赖

org.springframework.bootspring-boot-starter-web
org.projectlomboklombok
org.springframework.bootspring-boot-starter-data-mongodb

yaml

# mongodb 没有开启任何安全协议
# mongodb(协议)://121.5.167.13(主机):27017(端口)/baizhi(库名)
spring.data.mongodb.uri=mongodb://192.168.111.101:27017/baizhi# mongodb 存在密码
#spring.data.mongodb.host=tx.chenyn.cn
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=baizhi
#spring.data.mongodb.username=root
#spring.data.mongodb.password=root

实体类

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;import java.util.Date;@ToString
@Setter
@Getter
@Document("users") // 这个 类实例代表 mongo中一条文档
public class UserDoc {@Id //将这个id 映射为文档中的 _idprivate int id;@Field("username")private String name;@Fieldprivate double salary;@Fieldprivate Date birthday;
}

集合操作

创建删除

  • 创建集合
@Test
public void testCreateCollection(){mongoTemplate.createCollection (UserDoc.class);//参数: 创建集合名称
}

注意: 创建集合 不能存在,存在报错

  • 删除集合
@Test
public void testDeleteCollection(){mongoTemplate.dropCollection(UserDoc.class);
}

相关注解

  • @Document
    • 修饰范围: 用在类上
    • 作用: 用来映射这个类的一个对象为 mongo 中一条文档数据
    • 属性:(value / collection )用来 指定操作的集合名称
  • @Id(只出现一次)
    • 修饰范围: 用在成员变量、方法上
    • 作用: 用来将成员变量的值映射为文档的_id 的值
  • @Field
    • 修饰范围: 用在成员变量、方法上
    • 作用: 用来 将成员变量以及 值映射为文档中 一个key、value对
    • 属性: ( name / value )用来指定在文档中 key 的名称,默认为成员变量名
  • @Transient
    • 修饰范围: 用在成员变量、方法上
    • 作用 : 用来 指定 该成员变量,不参与文档的序列化~

文档操作

添加实验 数据

for(let i=1;i<10;i++){db.users.insert({_id:i,username:"小丁"+i})
}

查询

在这里插入图片描述


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;import java.util.List;@SpringBootTest
class DemoApplicationTests {@Autowiredprivate MongoTemplate mongoTemplate;@Testpublic void testCreateCollection() {// 查询所有mongoTemplate.findAll (UserDoc.class);// 根据 _id(id)查询mongoTemplate.findById (1, UserDoc.class);// 等值 查询Criteria criteria1 = new Criteria ();criteria1.andOperator (Criteria.where ("name").is ("小丁1"));mongoTemplate.find (Query.query (criteria1), UserDoc.class);// > gt  < lt  >= gte  <= lteCriteria criteria2 = new Criteria ();criteria2.andOperator (Criteria.where ("age").lt (25).gte (28));mongoTemplate.find (Query.query (criteria2), UserDoc.class);//andCriteria criteria3 = new Criteria ().andOperator (Criteria.where ("name").is ("小丁1"),Criteria.where ("age").isNull ());mongoTemplate.find (Query.query (criteria1), UserDoc.class);// orCriteria criteria4 = new Criteria ();criteria4.orOperator (Criteria.where ("name").is ("小丁"),Criteria.where ("age").isNull ());mongoTemplate.find (Query.query (criteria4), UserDoc.class);// and or// name ="小丁" and( age=25 or age=28)Criteria criteria5 = new Criteria ().andOperator (Criteria.where ("name").is ("小丁"),new Criteria ().orOperator (Criteria.where ("age").is (25),Criteria.where ("age").is (28)));mongoTemplate.find (Query.query (criteria5), UserDoc.class);// sort 排序// desc 降序  asc 升序// skip limit 分页Query query = new Query ();Query age = query.with (// 按 name升序// name相同 按age降序Sort.by (Sort.Order.asc ("name"),Sort.Order.desc ("age"))).skip (5).limit (3);mongoTemplate.find (age, UserDoc.class);//count 总条数mongoTemplate.count (new Query (), UserDoc.class);// distinct 去重// 参数 1: 查询条件// 参数 2: 去重字段// 参数 3: 操作集合// 参数 4: 字段类型List nameList = mongoTemplate.findDistinct (new Query (),"name",UserDoc.class,String.class);//inmongoTemplate.find (Query.query (Criteria.where ("a").in ("1", "2", "3", "4")), UserDoc.class);//likeList userDocs = mongoTemplate.find (Query.query (Criteria.where ("name").regex ("小")), UserDoc.class);//使用 json 字符串方式查询Query query2 = new BasicQuery ("{$or:[{name:'编程人'},{name:'徐凤年'}]}",// 0 不显示// 1 显示"{name:0}");mongoTemplate.find (query2, UserDoc.class);}
}

添加

UserDoc user = new UserDoc ();user.setId (10);
user.setName ("编程人_1");
user.setBirthday (new Date ());
UserDoc userDB = mongoTemplate.insert (user);//返回 保存的对象 insert or save
System.out.println (userDB);
  • insert: 插入重复数据时:insertDuplicateKeyException提示主键重复; save已存在的数据进行更新

  • insert 可以一次性 插入 多条数据

  • save: **不可以批量插入!**批处理操作时:insert可以一次性插入整个数据,效率较高;save需遍历整个数据,一次插入或更新,效率较低。

更新

@Test
public void testUpdate() {// 1.更新条件Query query = Query.query (Criteria.where ("age").is (23));// 2.更新内容Update update = new Update ();update.set ("name", "编程小d");// 单条更新mongoTemplate.updateFirst (query, update, UserDoc.class);// 多条更新mongoTemplate.updateMulti (query, update, UserDoc.class);// 更新插入mongoTemplate.upsert (query, update, UserDoc.class);// 返回值均为 updateResult// System.out.println("匹配条数:" + updateResult.getMatchedCount());// System.out.println("修改条数:" + updateResult.getModifiedCount());// System.out.println("插入id_:" + updateResult.getUpsertedId());
}

删除

@Test
public void testDelete() {// 删除所有mongoTemplate.remove (new Query (), UserDoc.class);// 条件删除mongoTemplate.remove (Query.query (Criteria.where ("name").is ("编程小d")),UserDoc.class);
}

相关内容

热门资讯

安卓系统焦点变化事件,Andr... 你知道吗?在安卓系统的世界里,最近发生了一件超级有趣的事情——焦点变化事件。这可不是什么小打小闹,它...
一加系统安卓降级,轻松还原经典... 你有没有想过,你的手机系统升级后,突然发现某些功能变得不那么顺心了?别急,今天就来聊聊一加系统安卓降...
日本最好的安卓系统,体验非凡 亲爱的读者们,你是否曾想过,在遥远的东方,有一个国家,他们的智能手机系统独具特色,让人眼前一亮?没错...
荣耀安卓11 系统证书,保障安... 你知道吗?最近手机圈里可是炸开了锅,荣耀安卓11系统证书成了大家热议的话题。这不,我就迫不及待地来和...
安卓手机开机升级系统,体验流畅... 你有没有发现,每次你的安卓手机开机,总会有那么一刹那,屏幕上跳出一个升级系统的提示?是不是觉得这就像...
真正的安卓系统手机,安卓系统手... 你有没有想过,为什么有些人对安卓系统手机情有独钟?是不是觉得市面上的安卓手机千篇一律,缺乏个性?别急...
安卓怎么用定位系统,轻松实现精... 你有没有想过,手机里的定位系统竟然这么神奇?它不仅能帮你找到回家的路,还能在茫茫人海中找到你的好友。...
安卓的哪个系统流畅,探索新一代... 你有没有想过,为什么你的安卓手机有时候像蜗牛一样慢吞吞的,而别人的手机却像风一样快?今天,就让我带你...
安卓系统解锁工具下载,畅享自由 你是不是也和我一样,对安卓系统的解锁工具感兴趣呢?想象你的手机被锁住了,无论是忘记密码还是想尝试新的...
谷歌退出安卓系统停用,停用背后... 你知道吗?最近有个大新闻在科技圈里炸开了锅!谷歌竟然宣布要退出安卓系统,这可真是让人大跌眼镜啊!想象...
安卓系统卡顿修复,轻松提升手机... 手机用久了是不是感觉有点卡卡的呢?别急,今天就来给你支几招,让你的安卓手机重焕生机,告别卡顿的烦恼!...
安卓系统停用怎么解除,轻松恢复... 你是不是也遇到了安卓系统停用的问题,急得像热锅上的蚂蚁?别急,今天就来给你详细解析怎么解除这个让人头...
最初始的安卓系统,技术演进与产... 亲爱的读者,你是否曾好奇过,那个如今无处不在的安卓系统,它的诞生之初是怎样的呢?今天,就让我们一起穿...
patchwall系统和安卓系... 你有没有发现,手机上的界面越来越个性化了?没错,这就是科技的魅力所在。今天,咱们就来聊聊两个在个性化...
汽车安卓系统换主题,焕新视觉体... 你有没有发现,汽车里的安卓系统换主题,简直就像给爱车换了个新衣裳,瞬间感觉焕然一新呢!想象当你驾驶着...
掌柜智囊收银系统安卓,高效便捷... 你有没有想过,在繁忙的店铺里,如何让收银工作既高效又轻松呢?今天,就让我带你一探究竟,看看这款掌柜智...
怎么控制安卓系统内存,安卓系统... 手机用久了是不是感觉越来越卡?别急,今天就来教你怎么控制安卓系统的内存,让你的手机重新焕发活力!一、...
电视机系统安卓系统吗,探索智能... 亲爱的读者,你是不是也和我一样,对家里的电视机系统充满了好奇?尤其是当它运行的是安卓系统时,那种探索...
魅族系统flyme安卓,魅族安... 你有没有发现,手机的世界里,总有一些品牌能让人眼前一亮?今天,咱们就来聊聊魅族旗下的Flyme系统,...
安卓仿ios系统链接,带你领略... 你有没有发现,最近安卓手机界掀起了一股仿iOS系统链接的热潮?这可不是什么小打小闹,而是各大厂商纷纷...