保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

SpringBoot整合MongoDB超详细

  一、介绍
  在前面的文章中,我们详细的介绍了MongoDB的配置和使用,如果你对MongoDB还不是很了解,也没关系,在MongoDB中有三个比较重要的名词:数据库、集合、文档!数据库(Database):和关系型数据库一样,每个数据库中有自己的用户权限,不同的项目组可以使用不同的数据库集合(Collection):集合指的是文档组(类似于Mysql中的表的概念),里面可以存储许多文档文档(Document):文档是MongoDB中最基本的数据单元,由键值对组成,类似于JSON格式,可以存储不同字段,字段的值可以包括其他文档、数组和文档数组
  搞懂这三个名词,基本就可以上手了,今天我们以Java语言为例,详细的介绍Java客户端改如何操作MongoDB!
  话不多说,直接开撸!二、Java客户端2。1、MongoDB连接
  Java连接MongoDB服务器,与我们常用的连接关系型数据库方式类似!
  标准URI连接语法:mongodb:username:passwordhost1:port1,host2:port2,。。。,hostN:portNdatabase?options
  参数说明:mongodb::这是固定的格式,必须要指定username:password:可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库host1:port1:主机IP和端口号,必须指定至少一个host。如果要连接复制集,请指定多个主机地址database:如果指定了username:password,连接时会验证并登录指定数据库。若不指定,默认打开test数据库?options:连接可选项,例如connectTimeoutMS5000ms,表示连接等待时间最长5秒
  例如,无密码连接MongoDBmongodb:127。0。0。1:27017
  使用用户名test,密码test登录MongoDB的testdb数据库mongodb:test:test127。0。0。1:27017testdb
  无密码连接指定三台服务器(端口27017,27018,和27019)mongodb:127。0。0。1:27017,127。0。0。1:27018,127。0。0。1:270192。2、添加依赖包
  和关系型数据库操作一样,在Java程序中如果要使用MongoDB,先要添加对应的MongoDBJDBC驱动器,然后才能继续操作!
  在选择的版本号的时候,注意需要和服务器中的安装版本匹配,具体的版本号选择可以从如下地址中获取到最新的版本:mongojavadriverdependencygroupIdorg。mongodbgroupIdmongojavadriverartifactIdversion3。12。7versiondependency2。3、连接数据库
  连接数据库的Java代码如下:privatestaticMongoClientmongoClient;static{try{连接到MongoDB服务如果是远程连接可以替换localhost为服务器所在IP地址mongoClientMongoClients。create(mongodb:test:test127。0。0。1:27017testdb);System。out。println(Connecttodatabasesuccessfully);}catch(Exceptione){System。err。println(e。getClass()。getName():e。getMessage());}}
  上文中采用的是用户名和密码方式登录数据库,因为数据库已经开启了权限验证,因此需要通过用户名和密码才能登录。2。4、创建集合
  com。mongodb。client包里面都帮我们集成好了大部分常用的api,我们可以通过MongoDatabase类中的createCollection()方法来创建集合。
  创建一个tbrole集合,代码片段如下:创建集合paramargspublicstaticvoidmain(String〔〕args){连接到数据库MongoDatabasemongoDatabasemongoClient。getDatabase(testdb);System。out。println(Connecttodatabasesuccessfully);mongoDatabase。createCollection(tbrole);System。out。println(集合创建成功);}
  如果想删除集合,操作也很简单!删除集合paramargspublicstaticvoidmain(String〔〕args){连接到数据库MongoDatabasemongoDatabasemongoClient。getDatabase(testdb);System。out。println(Connecttodatabasesuccessfully);mongoDatabase。getCollection(tbrole)。drop();System。out。println(集合tbrole删除成功);}2。5、创建文档
  我们可以通过MongoCollection类中的insertMany()方法来插入一个文档。
  向tbrole集合中插入文档,代码片段如下:插入文档paramargspublicstaticvoidmain(String〔〕args){连接到数据库MongoDatabasemongoDatabasemongoClient。getDatabase(testdb);System。out。println(Connecttodatabasesuccessfully);获取集合MongoCollectionDocumentcollectionmongoDatabase。getCollection(tbrole);向集合中插入文档DocumentdocumentnewDocument(name,管理员)。append(code,manager)。append(sort,100);ListDocumentdocumentsnewArrayList();documents。add(document);collection。insertMany(documents);System。out。println(文档插入成功);}2。6、更新文档
  我们可以通过MongoCollection类中的updateMany()方法来更新集合中的文档。
  更新tbrole集合中的指定文档信息,代码片段如下:更新文档paramargspublicstaticvoidmain(String〔〕args){连接到数据库MongoDatabasemongoDatabasemongoClient。getDatabase(testdb);System。out。println(Connecttodatabasesuccessfully);获取集合MongoCollectionDocumentcollectionmongoDatabase。getCollection(tbrole);更新文档collection。updateMany(Filters。eq(code,manager),newDocument(set,newDocument(name,经理)));遍历所有文档FindIterableDocumentfindIterablecollection。find();MongoCursorDocumentmongoCursorfindIterable。iterator();while(mongoCursor。hasNext()){System。out。println(mongoCursor。next());}}
  上文操作类似于SQL语句中的updatetbrolesetname经理wherecodemanager!2。7、删除文档
  我们可以通过MongoCollection类中的deleteOne()或者deleteMany方法来删除集合中的文档。
  删除tbrole集合中的指定文档信息,代码片段如下:删除文档paramargspublicstaticvoidmain(String〔〕args){连接到数据库MongoDatabasemongoDatabasemongoClient。getDatabase(testdb);System。out。println(Connecttodatabasesuccessfully);获取集合MongoCollectionDocumentcollectionmongoDatabase。getCollection(tbrole);删除符合条件的第一个文档collection。deleteOne(Filters。eq(code,manager));删除所有符合条件的文档collection。deleteMany(Filters。eq(code,manager));遍历所有文档FindIterableDocumentfindIterablecollection。find();MongoCursorDocumentmongoCursorfindIterable。iterator();while(mongoCursor。hasNext()){System。out。println(mongoCursor。next());}}
  在这里需要注意一下,在删除的时候,官方推荐尽可能先查询一下这个数据是否存在,如果存在,然后在执行删除操作,可以调用findOneAndDelete()方法进行删除!2。8、查询文档
  MongoCollection类中提供了非常丰富的检索文档的方法,例如,我们可以通过find()方法来获取集合中的所有文档。
  检索tbrole集合中的文档信息,代码片段如下:查询文档paramargspublicstaticvoidmain(String〔〕args){连接到数据库MongoDatabasemongoDatabasemongoClient。getDatabase(testdb);System。out。println(Connecttodatabasesuccessfully);获取集合MongoCollectionDocumentcollectionmongoDatabase。getCollection(tbrole);遍历所有文档FindIterableDocumentfindIterablecollection。find();MongoCursorDocumentmongoCursorfindIterable。iterator();while(mongoCursor。hasNext()){System。out。println(mongoCursor。next());}查询当前集合所有文档数量longcountcollection。countDocuments();System。out。println(当前文档数量:count);带条件遍历文档FindIterableDocumentdocumentFindIterablecollection。find(Filters。eq(code,manager));MongoCursorDocumentdocumentMongoCursordocumentFindIterable。iterator();while(documentMongoCursor。hasNext()){System。out。println(documentMongoCursor。next());}}三、SpringBoot整合MongoDB
  采用SpringBoot来对接MongoDB,可以说极其简单,下面就以常用的几个操作为例来介绍,过程如下!3。1、创建SpringBoot工程,添加MongoDB依赖包!引入springbootparentgroupIdorg。springframework。bootgroupIdspringbootstarterparentartifactIdversion2。1。0。RELEASEversionparentdependencygroupIdorg。springframework。bootgroupIdspringbootstarterdatamongodbartifactIddependency3。2、添加配置文件
  在application。properties文件中添加mongodb配置配置数据库连接地址spring。data。mongodb。urimongodb:test123:test123127。0。0。1:27017testdb3。3、创建实体类
  创建用于示例中测试的实体类Person。
  其中注解Document(collectionpersons)用于指定当前文档属于集合persons。
  注解Id表示当前id字段属于主键类型。使用Document注解指定集合名称Document(collectionpersons)publicclassPersonimplementsSerializable{privatestaticfinallongserialVersionUID3258839839160856613L;使用Id注解指定MongoDB中的id主键IdprivateLongid;privateStringuserName;privateStringpassWord;privateIntegerage;privateDatecreateTime;。。。getsetOverridepublicStringtoString(){returnPerson{idid,userNameuserName,passWordpassWord,ageage,createTimecreateTime};}}3。4、操作MongoDB
  Springboot操作MongoDB有两种方式。第一种方式是采用Springboot官方推荐的JPA方式,这种操作方式,使用简单但是灵活性比较差。第二种方式是采用SpringDataMongoDB封装的MongoDB官方Java驱动MongoTemplate对MongoDB进行操作,这种方式非常灵活,能满足绝大部分需求。
  本文将采用第二种方式进行介绍!3。5、插入文档
  MongoTemplate提供了insert()方法,用于插入文档,示例代码如下:用于插入文档
  没指定集合名称时,会取Document注解中的集合名称RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;插入文档throwsExceptionTestpublicvoidinsert()throwsException{PersonpersonnewPerson();person。setId(1l);person。setUserName(张三);person。setPassWord(123456);person。setCreateTime(newDate());mongoTemplate。insert(person);}}自定义集合名称,插入文档RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;自定义集合,插入文档throwsExceptionTestpublicvoidinsertCustomCollection()throwsException{PersonpersonnewPerson();person。setId(1l);person。setUserName(张三);person。setPassWord(123456);person。setCreateTime(newDate());mongoTemplate。insert(person,customperson);}}自定义集合,批量插入文档
  如果采用批量插入文档,必须指定集合名称RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;自定义集合,批量插入文档throwsExceptionTestpublicvoidinsertBatch()throwsException{ListPersonpersonListnewArrayList();Personperson1newPerson();person1。setId(10l);person1。setUserName(张三);person1。setPassWord(123456);person1。setCreateTime(newDate());personList。add(person1);Personperson2newPerson();person2。setId(11l);person2。setUserName(李四);person2。setPassWord(123456);person2。setCreateTime(newDate());personList。add(person2);mongoTemplate。insert(personList,customperson);}}3。6、存储文档
  MongoTemplate提供了save()方法,用于存储文档。
  在存储文档的时候会通过主键ID进行判断,如果存在就更新,否则就插入,示例代码如下:存储文档,如果没有插入,否则通过主键ID更新RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;存储文档,如果没有插入,否则更新throwsExceptionTestpublicvoidsave()throwsException{PersonpersonnewPerson();person。setId(13l);person。setUserName(八八);person。setPassWord(123456);person。setAge(40);person。setCreateTime(newDate());mongoTemplate。save(person);}}自定义集合,存储文档RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;自定义集合,存储文档throwsExceptionTestpublicvoidsaveCustomCollection()throwsException{PersonpersonnewPerson();person。setId(1l);person。setUserName(张三);person。setPassWord(123456);person。setCreateTime(newDate());mongoTemplate。save(person,customperson);}}3。7、更新文档
  MongoTemplate提供了updateFirst()和updateMulti()方法,用于更新文档,示例代码如下:更新文档,匹配查询到的文档数据中的第一条数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;更新文档,匹配查询到的文档数据中的第一条数据throwsExceptionTestpublicvoidupdateFirst()throwsException{更新对象PersonpersonnewPerson();person。setId(1l);person。setUserName(张三123);person。setPassWord(123456);person。setCreateTime(newDate());更新条件QueryquerynewQuery(Criteria。where(id)。is(person。getId()));更新值UpdateupdatenewUpdate()。set(userName,person。getUserName())。set(passWord,person。getPassWord());更新查询满足条件的文档数据(第一条)UpdateResultresultmongoTemplate。updateFirst(query,update,Person。class);if(result!null){System。out。println(更新条数:result。getMatchedCount());}}}更新文档,匹配查询到的文档数据中的所有数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;更新文档,匹配查询到的文档数据中的所有数据throwsExceptionTestpublicvoidupdateMany()throwsException{更新对象PersonpersonnewPerson();person。setId(1l);person。setUserName(张三);person。setPassWord(123456);person。setCreateTime(newDate());更新条件QueryquerynewQuery(Criteria。where(id)。is(person。getId()));更新值UpdateupdatenewUpdate()。set(userName,person。getUserName())。set(passWord,person。getPassWord());更新查询满足条件的文档数据(全部)UpdateResultresultmongoTemplate。updateMulti(query,update,Person。class);if(result!null){System。out。println(更新条数:result。getMatchedCount());}}}3。8、删除文档
  MongoTemplate提供了remove()、findAndRemove()和findAllAndRemove()方法,用于删除文档,示例代码如下:删除符合条件的所有文档RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;删除符合条件的所有文档throwsExceptionTestpublicvoidremove()throwsException{PersonpersonnewPerson();person。setId(1l);person。setUserName(张三);person。setPassWord(123456);person。setCreateTime(newDate());QueryquerynewQuery(Criteria。where(userName)。is(person。getUserName()));DeleteResultresultmongoTemplate。remove(query,Person。class);System。out。println(删除条数:result。getDeletedCount());}}删除符合条件的单个文档,并返回删除的文档RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;删除符合条件的单个文档,并返回删除的文档throwsExceptionTestpublicvoidfindAndRemove()throwsException{PersonpersonnewPerson();person。setId(1l);person。setUserName(张三);person。setPassWord(123456);person。setCreateTime(newDate());QueryquerynewQuery(Criteria。where(id)。is(person。getId()));PersonresultmongoTemplate。findAndRemove(query,Person。class);System。out。println(删除的文档数据:result。toString());}}删除符合条件的所有文档,并返回删除的文档RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;删除符合条件的所有文档,并返回删除的文档throwsExceptionTestpublicvoidfindAllAndRemove()throwsException{PersonpersonnewPerson();person。setId(1l);person。setUserName(张三);person。setPassWord(123456);person。setCreateTime(newDate());QueryquerynewQuery(Criteria。where(id)。is(person。getId()));ListPersonresultmongoTemplate。findAllAndRemove(query,Person。class);System。out。println(删除的文档数据:result。toString());}}3。9、查询文档
  MongoTemplate提供了非常多的文档查询方法,日常开发中用的最多的就是find()方法,示例代码如下:查询集合中的全部文档数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;查询集合中的全部文档数据throwsExceptionTestpublicvoidfindAll()throwsException{ListPersonresultmongoTemplate。findAll(Person。class);System。out。println(查询结果:result。toString());}}查询集合中指定的ID文档数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;查询集合中指定的ID文档数据throwsExceptionTestpublicvoidfindById(){longid1l;PersonresultmongoTemplate。findById(id,Person。class);System。out。println(查询结果:result。toString());}}根据条件查询集合中符合条件的文档,返回第一条数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据条件查询集合中符合条件的文档,返回第一条数据TestpublicvoidfindOne(){StringuserName张三;QueryquerynewQuery(Criteria。where(userName)。is(userName));PersonresultmongoTemplate。findOne(query,Person。class);System。out。println(查询结果:result。toString());}}根据条件查询集合中符合条件的文档RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据条件查询集合中符合条件的文档TestpublicvoidfindByCondition(){StringuserName张三;QueryquerynewQuery(Criteria。where(userName)。is(userName));ListPersonresultmongoTemplate。find(query,Person。class);System。out。println(查询结果:result。toString());}}根据【AND】关联多个查询条件,查询集合中的文档数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据【AND】关联多个查询条件,查询集合中的文档数据TestpublicvoidfindByAndCondition(){创建条件CriteriacriteriaUserNameCriteria。where(userName)。is(张三);CriteriacriteriaPassWordCriteria。where(passWord)。is(123456);创建条件对象,将上面条件进行AND关联CriteriacriterianewCriteria()。andOperator(criteriaUserName,criteriaPassWord);创建查询对象,然后将条件对象添加到其中QueryquerynewQuery(criteria);ListPersonresultmongoTemplate。find(query,Person。class);System。out。println(查询结果:result。toString());}}根据【OR】关联多个查询条件,查询集合中的文档数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据【OR】关联多个查询条件,查询集合中的文档数据TestpublicvoidfindByOrCondition(){创建条件CriteriacriteriaUserNameCriteria。where(userName)。is(张三);CriteriacriteriaPassWordCriteria。where(passWord)。is(123456);创建条件对象,将上面条件进行OR关联CriteriacriterianewCriteria()。orOperator(criteriaUserName,criteriaPassWord);创建查询对象,然后将条件对象添加到其中QueryquerynewQuery(criteria);ListPersonresultmongoTemplate。find(query,Person。class);System。out。println(查询结果:result。toString());}}根据【IN】关联多个查询条件,查询集合中的文档数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据【IN】关联多个查询条件,查询集合中的文档数据TestpublicvoidfindByInCondition(){设置查询条件参数ListLongidsArrays。asList(1l,10l,11l);创建条件CriteriacriteriaCriteria。where(id)。in(ids);创建查询对象,然后将条件对象添加到其中QueryquerynewQuery(criteria);ListPersonresultmongoTemplate。find(query,Person。class);System。out。println(查询结果:result。toString());}}根据【逻辑运算符】查询集合中的文档数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据【逻辑运算符】查询集合中的文档数据TestpublicvoidfindByOperator(){设置查询条件参数intmin20;intmax35;CriteriacriteriaCriteria。where(age)。gt(min)。lte(max);创建查询对象,然后将条件对象添加到其中QueryquerynewQuery(criteria);ListPersonresultmongoTemplate。find(query,Person。class);System。out。println(查询结果:result。toString());}}根据【正则表达式】查询集合中的文档数据RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据【正则表达式】查询集合中的文档数据TestpublicvoidfindByRegex(){设置查询条件参数Stringregex张;CriteriacriteriaCriteria。where(userName)。regex(regex);创建查询对象,然后将条件对象添加到其中QueryquerynewQuery(criteria);ListPersonresultmongoTemplate。find(query,Person。class);System。out。println(查询结果:result。toString());}}根据条件查询集合中符合条件的文档,获取其文档列表并排序RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据条件查询集合中符合条件的文档,获取其文档列表并排序TestpublicvoidfindByConditionAndSort(){StringuserName张三;QueryquerynewQuery(Criteria。where(userName)。is(userName))。with(Sort。by(age));ListPersonresultmongoTemplate。find(query,Person。class);System。out。println(查询结果:result。toString());}}根据单个条件查询集合中的文档数据,并按指定字段进行排序与限制指定数目RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据单个条件查询集合中的文档数据,并按指定字段进行排序与限制指定数目TestpublicvoidfindByConditionAndSortLimit(){StringuserName张三;从第一行开始,查询2条数据返回QueryquerynewQuery(Criteria。where(userName)。is(userName))。with(Sort。by(createTime))。limit(2)。skip(1);ListPersonresultmongoTemplate。find(query,Person。class);System。out。println(查询结果:result。toString());}}统计集合中符合【查询条件】的文档【数量】RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;统计集合中符合【查询条件】的文档【数量】TestpublicvoidcountNumber(){设置查询条件参数Stringregex张;CriteriacriteriaCriteria。where(userName)。regex(regex);创建查询对象,然后将条件对象添加到其中QueryquerynewQuery(criteria);longcountmongoTemplate。count(query,Person。class);System。out。println(统计结果:count);}}4。0、创建索引
  索引在所有的数据库中,暂居的位置非常重要,例如当你检索一张上百万的数据表的时候,如果没走索引,查询效率会极其缓慢,对于MongoDB来说,同样如此。
  示例如下:创建升序索引RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;创建升序索引TestpublicvoidcreateAscendingIndex(){设置字段名称StringfielduserName;创建索引mongoTemplate。getCollection(persons)。createIndex(Indexes。ascending(field));}}移除索引RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;根据索引名称移除索引TestpublicvoidremoveIndex(){设置字段名称StringfielduserName;删除索引mongoTemplate。getCollection(persons)。dropIndex(field);}}查询集合中所有的索引RunWith(SpringRunner。class)SpringBootTestpublicclassPersonServiceTest{AutowiredprivateMongoTemplatemongoTemplate;查询集合中所有的索引TestpublicvoidgetIndexAll(){获取集合中所有列表ListIndexesIterableDocumentindexListmongoTemplate。getCollection(persons)。listIndexes();获取集合中全部索引信息for(Documentdocument:indexList){System。out。println(索引列表:document);}}}我们还可以通过在实体类上加注解方式来创建索引使用Document注解指定集合名称Document(collectionpersons)publicclassPersonimplementsSerializable{privatestaticfinallongserialVersionUID3258839839160856613L;使用Id注解指定MongoDB中的id主键IdprivateLongid;privateStringuserName;privateStringpassWord;privateIntegerage;创建一个5秒之后文档自动删除的索引Indexed(expireAfterSeconds5)privateDatecreateTime;。。。getsetOverridepublicStringtoString(){returnPerson{idid,userNameuserName,passWordpassWord,ageage,createTimecreateTime};}}4。1、引入MongoDB中的事务
  单节点mongodb不支持事务,需要搭建MongoDB复制集。配置事务管理器ConfigurationpublicclassTransactionConfig{BeanMongoTransactionManagertransactionManager(MongoDatabaseFactorydbFactory){returnnewMongoTransactionManager(dbFactory);}}
  事务服务测试!ServicepublicclassTransactionExample{AutowiredprivateMongoTemplatemongoTemplate;Transactional(rollbackForException。class)publicObjecttransactionTest(){PersonpersonnewPerson();person。setId(1l);person。setUserName(张三);person。setPassWord(123456);person。setCreateTime(newDate());PersonnewPersonmongoTemplate。insert(person);抛出异常,观察数据是否进行回滚if(11){thrownewRuntimeException(异常);}returnnewPerson;}}四、小结
  本文主要围绕MongoDB的Java客户端使用进行基本的增删改查操作介绍,在实际的业务场景中,可能还需要用到聚合函数等高级查询,大家如果有这种需求,可以访问如下地址获取更加详细的api文档介绍:MongoDB文档查询api介绍
  demo获取地址:https:github。comjustdojavaspringbootexamplemongodb五、参考
  1、菜鸟教程mongodb
  2、超级小豆丁MongoDB介绍

币圈一级市场为何RNDR渲染技术对元宇宙至关重要?RNDR简介详情RNDRToken是一个将GPU运算能力转化为3D资产(如显卡)的去中心化经济网络。目标是通过以太坊区块链协议授权创建、共享和货币化任何3D对象或者环境。……假客服的套路伪装成大平台客服,层层布局引人上钩您好,这边是京东金融客服,近期您有资金周转的需求吗?您好,这边是360借条客服,查询到您有在我平台申请额度没有审核通过对吧?我们这边平台有新开通的特邀渠道,今天办理……我的TH900系统下一步改进方向?瓦特381现在都是墨西哥产的,声音不如以前美产的。2K以内还是买AudioReplas的RWC2RU吧,要注意闲鱼上有便宜的假货。chounuerak发表于2021122716……喜看家乡新变化作文500字三篇喜看家乡新变化我住在一个名叫东台的一个小镇上!听我奶奶说:以前生活非常艰苦。几角钱就相当于现在的十几元。从前粮食要用粮票去买,一个人最多可以买7斤,两分钱可以……关于给朋友的一封信的作文400字给朋友的一封信亲爱的明明:嗨!你还记得我吗?对,没错,就是我,我就是在班上的那位诸葛亮。你转校已接近十一个月了,班上的伙伴们都非常惦记你呢!班上少了你,就好像少了快……优秀的小学生暑假作文范文暑假计划我订了一个暑假计划,内容是这样写的mdash;mdash;每天早晨6:00中哦醒来,坚持做体育运动,如仰卧起坐20个,跑步800米,做体操等等。再读背古诗,然后写一上午的作业。……关于送别爸爸的作文3篇在平平淡淡的日常中,大家总免不了要接触或使用作文吧,通过作文可以把我们那些零零散散的思想,聚集在一块。你知道作文怎样才能写的好吗?下面是小编精心整理的关于送别爸爸的作文,欢迎阅……我的零花钱我做主作文650字【第1篇】我是一个花钱爱好者,妈妈每月会给我50元零用钱,而不懂得节制和计划的我往往只要3天就能将它花个精光,余下的日子只能每每望着自己看中的东西兴叹。有一次,妈妈……以宽容朋友为题的作文宽容是一种修养,更是一种美德。允许每一个人犯错,用心灵诠释理解与大度。记得来到南外的一次数学考试后,蒋老师要求次日将试卷及订正本一齐交上去,否则按0分纪录。可第二天……一方净土E度网专稿未经允许不得转载我渴望一方净土,没有城市的喧嚣,远离人情的束缚。在那里,空气中弥漫着沁人心脾的芳香,泥土里散发着金秋收获的幸福。我渴望一……品味人生初中作文精选人生要慢慢品味,才能有好的滋味。下面是小编收集的品味人生初中作文,欢迎参考。品味人生初中作文(一)人生是什么?悲观者说:ldquo;人生是咖啡,不管加多少糖,……介绍美丽的黄山作文500字介绍美丽的黄山我要向大家介绍的地方是黄山,黄山是驰名中外的旅游胜地,凭着四绝号称天下第一山,下面我就介绍一下黄山的四绝。黄山第一绝是奇峰。黄山奇峰罗列,怪石嶙峋。天都峰是……
家长会发言稿2500字教育孩子是我们每一位家长义不容辞的责任,ldquo;望子成龙rdquo;是我们做父母对孩子的殷切希望,然而要想使孩子成为有用之材,成为国家的栋梁,家庭教育是必不可少的。下面是小……全黑背景的照片,手机怎么拍?如何用手机拍摄背景全黑的人像?用手机拍背景全黑的人像,可以买黑色背景布,拍照时用黑色背景布做背景,在买个LED,打光就可以了,这样就可以拍背景全黑的人像了。我来为大家分享……为什么互联网公司不喜欢天津?因为天津人不惯着互联网996〔呲牙〕这个问题说的有点片面了,不是不喜欢天津,而是除了北京以外的北方城市都没有什么像样互联网公司,互联网行业本质上属于服务行业,北方的服务意……关于春节的作文团圆的日子春节,是一家团圆的日子,孩子们爱过春节,因为春节能够拿到压岁钱,大人们爱过春节,因为春节朋友能欢聚一堂,老人们爱过春节,因为春节忙碌工作的儿女能够回家。总而言之,春节是中国人最……电视供应链面临新考验,下半年面板价格将大跌,买电视不妨再等等在过去的一年多里,液晶面板的价格一直在快速上涨。截至今年6月,主流尺寸的电视面板涨幅普遍超过了50,55英寸及以下的中小尺寸液晶面板采购价同比涨幅更是超过了90。不过这种情况有……iPhone13没信号也能通电话?苹果黑科技或将上线步入9月,大家已经可以期待即将发布的iPhone13手机了。如果南方记者没有猜错,不出两个星期,大家口中的十三香就要来了。虽然有供应链消息传出,今年的iPhone13在外……我的桃源我的桃源大家可能都读过陶渊明的《桃花源记》,里面描写的世外桃源那是对美好事物的向往,也许有的人会说,那也是在做白日梦,其实,我认为做白日梦有什么不好,做白日梦也是一种向往……高一作文面对的态度历史悠久的中国在国际舞台中也算得上是一颗璀璨的明珠,而明珠的周围总是有不少的参观者来欣赏它,它的亮洁会让人夸奖,它的光滑会让人赞叹。金无足赤,人无完人。总是会有些人想要在完美中……2020年关于晚秋500字作文精选篇一:天越发的冷了,秋渐渐的晚了。围栏上的牵牛花越发的稀少了,就还有那么几朵,稀稀零零的倔强的开放着。在大片绿叶的衬托下,那本就少得可怜的花朵显得更加稀零,更加遥不……2022中国物联网技术未来发展趋势与市场规模分析2020年我国物联网市场规模从2017年的1。15万亿元增长到2。14万亿元左右。预计到2022年,我国物联网市场规模将达3。6万亿元。2022中国物联网技术未来发展趋势……充满关爱的春天四年级作文一个春机盎然的下午,风雨交加,我站在64路公交车上,站在我旁边的是一位阿姨,她的手中还拎着一袋苹果。雨后的路,不但湿滑,而且路面上还有一些积水。车行驶着,摇摇晃晃,站在车……多一句赞美的哲理故事人们相互希望得越多,想要给予对方的越多hellip;hellip;就必定越亲密。今天小编就来分享多一句赞美的哲理故事,希望读者喜欢。多一句赞美的哲理故事几天前,我和……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网