Spring Data

本文详细介绍了如何在SpringBoot应用中配置SpringDataMongoDB,包括添加依赖、配置数据库连接信息。接着,展示了CRUD操作的实现,包括插入、查询、更新和删除数据的步骤。同时,讲解了使用SpringData进行复杂查询和分页操作的方法,帮助开发者更好地理解和运用SpringDataMongoDB进行数据操作。
摘要由CSDN通过智能技术生成

Spring Data MongoDB 配置

依赖库:

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

配置:
修改src/main/resources/application.properties文件,增加配置项:

# 购买的云服务器的公网 IP
spring.data.mongodb.host=192.168.0.1
# MongoDB 服务的端口号
spring.data.mongodb.port=27017
# 创建的数据库及用户名和密码
spring.data.mongodb.database=practice

要检查云服务器的安全设置,必须开放27017端口

Spring Data CRUD

对数据库的操作一定要放在@Service类中,@Controller可以调用@Service类的方法,反之不行

  • @Service类主要用于不易变的核心业务逻辑
  • @Controller类主要与前端页面紧密结合,调用@Service服务读写数据,从而响应前端请求

1.新增数据

就是在数据库中插入一条数据也就是实例对象

import org.springframework.data.mongodb.core.MongoTemplate;
//@Autowired可以让系统自动注入MongoTemplate的实例
  @Autowired
  private MongoTemplate mongoTemplate;

  public void test() {
    Song song = new Song();
   Q

    mongoTemplate.insert(song);
  }

只需要调用mongoTemplate.insert()方法就能把对象存入数据库

2.查询数据

mongoTemplate.findById(id, 类名.class)

findById第一个参数就是id,第二个参数是具体的类,写法就是类名.class

3.修改数据

修改操作:修改条件和修改字段

// 修改 id=1 的数据
Query query = new Query(Criteria.where("id").is("1"));

// 把名字修改为 “new name”
Update updateData = new Update();
updateData.set("name", "new name");

// 执行修改,修改返回结果的是一个对象
UpdateResult result = mongoTemplate.updateFirst(query, updateData, Song.class);
// 修改的记录数大于 0 ,表示修改成功
System.out.println("修改的数据记录数量:" + result.getModifiedCount());

先使用条件对象Criteria构建条件对象Query实例,然后调用修改对象Update方法.set()设置要修改的字段.

最后调用mongoTemplate.updateFirst(query, updateData, 类名.class)方法完成修改

4.删除数据

调用mongoTemplate.remove()方法可以删除数据,参数是对象,表示要删除的数据.

Song song = new Song();
song.setId(songId);

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

删除数据一定要谨慎,通过主键来删除数据保证不误删

Spring Data Query

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

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

查询操作复杂在于条件,需要构建好的Criteria条件对象的实例:

Query query = new Query(criteria);
  • 单一条件用:
Criteria criteria1 = Criteria.where("条件字段名").is("条件值")
  • 组合条件,多个子条件对象组合成一个总条件对象:
    或(or)关系
Criteria criteria = new Criteria();
criteria.orOperator(criteria1, criteria2);

且(and)关系:

Criteria criteria = new Criteria();
criteria.andOperator(criteria1, criteria2);

orOperator()和andOperator()的参数可以是多个子条件也可以是子条件数组

Spring Data 分页

分页是查询中最常用的功能,同时也为了防止查询的数据量太大而影响性能

查询支持分页只需要调用PageRequest.of()方法构建分页对象,然后注入到查询对象即可

PageRequest.of()方法第一个参数是页码,从0开始计数,第一页的值是0,第二个参数是每页的数量

import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

Pageable pageable = PageRequest.of(0 , 20);
query.with(pageable);

要实现完整的分页还要两个步骤:

  • 调用count(query, XXX.class)方法查询总数,第一个参数是查询条件,第二个参数表示查询什么样的对象
  • 根据结果,分页条件,总数三个数据构建分页器对象
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() {
  @Override
  public long getAsLong() {
    return count;
  }
});

PageableExecutionUtils.getPage()方法第一个参数是查询结果,第二个参数是分页对象,第三个参数是实现一个LongSupplier接口的匿名类,在匿名类的getAsLong()方法中返回结果总数.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-irony-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值