您的位置:首页 > 娱乐 > 明星 > 视频推广软件排名帝搜软件_国内顶尖小程序开发公司_网站排名优化培训课程_百一度一下你就知道

视频推广软件排名帝搜软件_国内顶尖小程序开发公司_网站排名优化培训课程_百一度一下你就知道

2025/1/9 19:17:53 来源:https://blog.csdn.net/2301_79969279/article/details/145012751  浏览:    关键词:视频推广软件排名帝搜软件_国内顶尖小程序开发公司_网站排名优化培训课程_百一度一下你就知道
视频推广软件排名帝搜软件_国内顶尖小程序开发公司_网站排名优化培训课程_百一度一下你就知道

引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

数据库配置

spring.data.mongodb.host=
# MongoDB 服务的端口号
spring.data.mongodb.port=27017
# 创建的数据库及用户名和密码
spring.data.mongodb.database=

增删改查:

增加数据:

import org.springframework.data.mongodb.core.MongoTemplate;@Autowiredprivate MongoTemplate mongoTemplate;public void test() {Song song = new Song();song.setSubjectId("s001");song.setLyrics("...");song.setName("成都");mongoTemplate.insert(song);}

对于有id属性的实体类用save添加数据

UserLog userLog = new UserLog(2, 2, "test1", "test1", "test1", new Date(), "test");
UserLog save = mongoTemplate.save(userLog);

用findAll查询所有数据

System.out.println("插入成功"+save);
List<UserLog> all = mongoTemplate.findAll(UserLog.class);
System.out.println("查询成功"+all);
UserLog byId = mongoTemplate.findById(1, UserLog.class);
System.out.println(byId);

用findById查询单条数据

修改数据

// 修改 id=1 的数据
Query query = new Query(Criteria.where("id").is(userLog.getId()));
System.out.println(query);
Update update = new Update();
update.set("oldValue", userLog.getOldValue());
// 执行修改,修改返回结果的是一个对象
UpdateResult result = mongoTemplate.updateFirst(query, update, UserLog.class);
// 修改的记录数大于 0 ,表示修改成功
System.out.println("修改的数据记录数量:" + result.getModifiedCount());
UserLog byId = mongoTemplate.findById(2, UserLog.class);
System.out.println(byId);

删除数据

DeleteResult result = mongoTemplate.remove(userLog);
// 删除的记录数大于 0 ,表示删除成功System.out.println("删除的数据记录数量:" + result.getDeletedCount());}

根据多条件查询SpringDataQuery

List<Song> songs = mongoTemplate.find(query, Song.class);

因为可能查看到多条数据,所以返回的结果就是对象的集合,第一个参数是查询对象Query实例,第二个参数是查询什么对象.class

先构建Query实例

Query query = new Query(criteria);

构建情况(两种):

  • Criteria criteria1 = Criteria.where("条件字段名").is("条件值")
  • 组合条件:
Criteria criteria = new Criteria();
criteria.orOperator(criteria1, criteria2);
Criteria criteria = new Criteria();
criteria.andOperator(criteria1, criteria2);

多重条件混合

import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Criteria;public List<Song> list(Song songParam) {// 总条件Criteria criteria = new Criteria();// 可能有多个子条件List<Criteria> subCris = new ArrayList();if (StringUtils.hasText(songParam.getName())) {subCris.add(Criteria.where("name").is(songParam.getName()));}if (StringUtils.hasText(songParam.getLyrics())) {subCris.add(Criteria.where("lyrics").is(songParam.getLyrics()));}if (StringUtils.hasText(songParam.getSubjectId())) {subCris.add(Criteria.where("subjectId").is(songParam.getSubjectId()));}// 必须至少有一个查询条件if (subCris.isEmpty()) {LOG.error("input song query param is not correct.");return null;}// 三个子条件以 and 关键词连接成总条件对象,相当于 name='' and lyrics='' and subjectId=''criteria.andOperator(subCris.toArray(new Criteria[]{}));// 条件对象构建查询对象Query query = new Query(criteria);// 仅演示:由于很多同学都在运行演示程序,所以需要限定输出,以免查询数据量太大query.limit(10);List<Song> songs = mongoTemplate.find(query, Song.class);return songs;
}

SpringData分页

查询支持分页比较简单只要调用PageRequest.of();

第一个参数是页码,从0开始,第二个是每页的数量

import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;Pageable pageable = PageRequest.of(0 , 20);
query.with(pageable);

对于分页来说,除了要查询结果意外,还需要查询总数,才能进一步计算出总共多少页,实现完整的分页功能,因此还需要两个步骤:

1.调用count(query,xx.class)查询总数

2.根据结果,分页条件,总数三个数据,构建分页器对象

import org.springframework.data.domain.Page;
import org.springframework.data.repository.support.PageableExecutionUtils;// 总数
long count = mongoTemplate.count(query, Song.class);
// 构建分页器
Page<Song> pageResult = PageableExecutionUtils.getPage(songs, pageable, new LongSupplier() {@Overridepublic long getAsLong() {return count;}
});

PageableExecutionUtils.getPage() 方法第一个参数是查询结果;第二个参数是分页条件对象;第三个参数稍微复杂一点,实现一个 LongSupplier 接口的匿名类,在匿名类的 getAsLong() 方法中返回结果总数。方法返回值是一个 Page分页器对象,使用起来比较方便

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com