学习MongoTemplate操作MongoDB增删改查
创始人
2024-01-26 08:26:10
0

学习MongoTemplate操作MongoDB增删改查

  • 一、准备
    • 1、依赖
    • 2、yml
    • 3、实体类
  • 二、案例
    • 1、增
    • 2、删
    • 3、改
    • 4、查
      • 4.1、根据Id查询数据
      • 4.2、条件查询方法
      • 4.3、模糊查询
      • 4.4、分页查询


一、准备

1、依赖

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

2、yml

spring:data:mongodb:# mongodb://用户名:密码@IP地址:27017/数据库uri: mongodb://appdbuser:123456@127.0.0.1:27017/appdb# 可以不用设置数据库# database: appdb

3、实体类

@Document(“User”)//指定数据库中的集合(相当于mysql中的表)
@Id 就是指定这个属性对应MongoDB数据库集合中_id的属性

@Document("book")//指定数据库中的集合(相当于mysql中的表)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {@Idprivate Long id;private String title;private Integer page;private Integer age;
}

二、案例

spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。

1、增

如果ID存在则报错

    @Testvoid contextLoads6() {Book book = new Book(1L, "China", 8, 15);mongoTemplate.insert(book);}

2、删

    @Testvoid test4() {Query query = new Query(Criteria.where("id").is(0L));DeleteResult result = mongoTemplate.remove(query, Book.class);long deletedCount = result.getDeletedCount();//=1成功  =0失败log.info("记录数:" + deletedCount);}

3、改

    @Testvoid test3() {//查询idBook byId = mongoTemplate.findById(2L, Book.class);//        设置值byId.setAge(100);//        保存修改Query query = new Query(Criteria.where("id").is(byId.getId()));Update update = new Update();update.set("age", byId.getAge());UpdateResult updateResult = mongoTemplate.upsert(query, update, Book.class);//        获取修改就记录数long modifiedCount = updateResult.getModifiedCount();log.info("记录数:" + modifiedCount);}

4、查

4.1、根据Id查询数据

除了要传入id的值也要传入对应实体类的class

    @Testvoid test1() {Book book = mongoTemplate.findById(2L, Book.class);log.info(book.toString());//Book(id=2, title=China, page=8, age=15)}

4.2、条件查询方法

    @Testvoid contextLoads4() {Query query = new Query(Criteria.where("title").is("China").and("age").is(15));List tList = mongoTemplate.find(query, Book.class);log.info("条件查询:" + tList);//条件查询:[Book(id=2, title=China, page=8, age=15), Book(id=1, title=China, page=8, age=15)]}

4.3、模糊查询

还是调用mongoTemplate.find(query,Student.class);方法,传入条件构造的对象

因为我们是要模糊查询,不同于mysql的like方法我们在这要用到正则匹配规则,需要要用到Pattern 来构造模糊条件。

通过String.format创建模糊规则传入Pattern构建 再将构建好 的条件传入Query构造对象。

    @Testvoid contextLoads5() {String likeName = "n";//自定义的常量String reges = String.format("%s%s%s", "^.*", likeName, ".*$");//匹配规则Pattern pattern = Pattern.compile(reges, Pattern.CASE_INSENSITIVE);//正则匹配规则--pattern的常量Query query = new Query(Criteria.where("title").regex(pattern));List bookList = mongoTemplate.find(query, Book.class);for (Book s : bookList) {log.info("模糊查询:" + s);}}

在这里插入图片描述

在这里插入图片描述

4.4、分页查询

    @Testvoid test2() {Integer page = 1;//当前页Integer pageSize = 2;//每页记录//条件查询String likeName = "n";//自定义的常量String reges = String.format("%s%s%s", "^.*", likeName, ".*$");//匹配规则Pattern pattern = Pattern.compile(reges, Pattern.CASE_INSENSITIVE);//正则匹配规则--pattern的常量Query query = new Query(Criteria.where("title").regex(pattern));//查询集合记录总数long count = mongoTemplate.count(query, Book.class);//分页查询/*** query.skip((page - 1) * pageSize) 获取到开始分页的位置下标* 例如第一页 0*2=0从第0个记录开始* 例如第二页 1*2=2从下标第二个记录开始* limit(pageSize)限制每页的记录*/List bookList = mongoTemplate.find(query.skip((page - 1) * pageSize).limit(pageSize), Book.class);log.info("记录总数" + count);for (Book s : bookList) {log.info("分页数据:" + s);}
  • 没能力把眼前苟且过好,就先别向往诗和远方。拿你有的,换想要的,世界向来如此,残酷却公平。
  • 你凭什么认为有人会拉你一把,摔倒了不自己爬起来,等着别人去踩吗?
  • 如果你连工作挣钱都要别人开导你,都要人盯着,看着,哄着,鼓励着,劝你还是别干了,那你就应该穷,这不是鸡汤,这是现实。
  • 通宵复习是因为平时没听过课,拼命减肥是因为吃零食从来不会控制,分手了才开始后后悔因为之前没有给足够的关心。于是别人开始敬佩你的勤奋,同情你的遭遇,可是只有你知道,你的痛苦都是罪有应得。
  • 大部分人,都有一个经不起推敲的幻觉,认为只要换换环境,自己的人生就会有起色。
  • 机头等舱可以优先登机,银行VIP可以不用排队,看演唱会位置最好的票是最贵的,世界从不平等,你有多努力就有多特殊
  • 你多学—样本事,就少说—句求人的话。
  • 读书学习去更远的地方的意义大概就是,远离那些自己不想见的人,也不用做那些不想做的事,希望我们都可以不被改变。
  • 人最大的对手,往往不是别人,而是自己的懒惰。别指望撞大运,运气不可能永远在你身上,任何时候都要靠本事吃饭。你必须拼尽全力,才有资格说自己的运气不好。
  • 你不想用实力打败讨厌的人吗。
  • 你在人群中看到的每一个耀眼的存在,都是踩着刀尖过来的。你如履平地般地舒适坦然,当然不配拥有任何光芒。

相关内容

热门资讯

4个你不能错过的好创业项目 4... 对于很多创业者来说,能够赚钱的好项目有很多,但是不知道如何选择。本文列举了一些现在比较赚钱的创业好项...
南通创业好项目 南通创业好项目... 南通市是中国江苏省下辖的一个地级市,位于江苏省东南部,东临黄海,南临长江,与上海的崇明岛及苏州市隔江...
南通市火爆低成本小生意全程扶持... 南通市火爆低成本小生意全程扶持,创业小项目投资小时间:2021-04-聊城市西高网络科技有限公司为您...
创业找项目加盟种植 创业找项目... 1、农村创业好项目:果树种植如果当地是山地就可发展种植业,在对当地农业产业发展情况了解比较充分的情况...
加盟创业种植好项目 加盟创业种...   2:大棚洋香瓜种植洋香瓜的黄皮品种有:状元、伊丽莎白、黄大、金太阳、金星、金镶玉等白皮品种有:雪...
大学生创业打造校园旅游平创业大... 生活不止眼前的烦恼,还有诗和远方的故事。徐海兵和鹿惠敏,两个未毕业的大学生,因为爱穷游而合伙创立了最...
【高层次创新创业团队项目重磅】... (4)用人单位必须是在珠海市依法注册、具有独立法人资格的企业,或经省、市科技行政主管部门认定的以企业...
深圳高层次人才创新创业计划团队... 1.先进电子信息材料创新团队团队研究方向为面向微电子封装和无源集成应用的新型纳米复合电介质材料,以开...
什么互联网项目值得加盟代理? ... 对于创业者,加盟或者代理一个一线城市的互联网项目是一个相对靠谱的决定!有一种成功叫“跟随式成功”。但...
对口援疆助力新疆高质量发展   央视网消息(新闻联播):中央各单位和19个援疆省市完善工作机制,加大对口援疆,助力新疆经济社会高...