数据库表
接口定义
其他都比较简单
我们讲黑名单查询页面的设计
@DubboService public class BlackListApiImpl extends ServiceImpl<BlackListMapper,BlackList> implements BlackListApi{ @Autowired private BlackListMapper blackListMapper; @Autowired private UserInfoApi userInfoApi; @Override public PageResult blackList(int page, int size, Long userId) { LambdaQueryWrapper<BlackList> queryWrapper=new LambdaQueryWrapper<>(); queryWrapper.eq(BlackList::getUserId, userId); //获取黑名单的集合 List<BlackList> list = this.list(queryWrapper); List<Long> ids =new ArrayList<>(); list.forEach((item)->{ ids.add(item.getBlackUserId()); } ); log.info("ids:{}",ids); Page<UserInfo> pageInfo =new Page<>(page,size); //查询出各个黑名单的id对应的userInfo页面 LambdaQueryWrapper<UserInfo> queryWrapper1=new LambdaQueryWrapper<>(); queryWrapper1.in(UserInfo::getId,ids); userInfoApi.page(pageInfo,queryWrapper1); log.info("pageInfo:{}",pageInfo); PageResult pageResult=new PageResult(page,size, pageInfo.getTotal(), pageInfo.getRecords()); log.info("pageResult:{}",pageResult); return pageResult; } /** * 取消黑名单 * @param userId * @param blackUid */ @Override public void deleteBlackUser(Long userId, Long blackUid) { QueryWrapper<BlackList> qw = new QueryWrapper<>(); qw.eq("user_id",userId); qw.eq("black_user_id",blackUid); blackListMapper.delete(qw); }
MongoDB
MongoDB是一个开源、高性能、支持海量数据存储的文档型数据库
是NoSQL数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库
数据特征
数据存储量较大,甚至是海量
对数据读写的响应速度要求较高
某些数据安全性要求不高,可以接受一定范围内的误差
MongoDB特点
数据存储:内存+磁盘
日志文件,10ms传输一次,这样就算突然宕机,丢失60s的data,我们可以通过日志文件来恢复
高扩展性
内置数据分片
MongoDB与Redis和Mysql的对比
Mongodb的适用场景
数据格式
docker安装MongoDB
MongoDB入门
基础命令
修改数据
删除数据
索引
MongoDB 入门案例
Springboot整合MongoDB
依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
yml文件:
spring:
data:
mongodb:
uri: mongodb://192.168.136.160:27017/test
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MongoApplication.class)
public class MongoTest {
/**
* SpringData-mongodb操作
* 1、配置实体类
* 2、实体类上配置注解(配置集合和对象间的映射关系)
* 3、注入MongoTemplate对象
* 4、调用对象方法,完成数据库操作
*/
@Autowired
private MongoTemplate mongoTemplate;
//保存
@Test
public void testSave() {
for (int i = 0; i < 10; i++) {
Person person = new Person();
person.setId(ObjectId.get()); //ObjectId.get():获取一个唯一主键字符串
person.setName("张三"+i);
person.setAddress("北京顺义"+i);
person.setAge(18+i);
mongoTemplate.save(person);
}
}
//查询-查询所有
@Test
public void testFindAll() {
List<Person> list = mongoTemplate.findAll(Person.class);
for (Person person : list) {
System.out.println(person);
}
}
@Test
public void testFind() {
//查询年龄小于20的所有人
Query query = new Query(Criteria.where("age").lt(20)); //查询条件对象
//查询
List<Person> list = mongoTemplate.find(query, Person.class);
for (Person person : list) {
System.out.println(person);
}
}
/**
* 分页查询
*/
@Test
public void testPage() {
Criteria criteria = Criteria.where("age").lt(30);
//1、查询总数
Query queryCount = new Query(criteria);
long count = mongoTemplate.count(queryCount, Person.class);
System.out.println(count);
//2、查询当前页的数据列表, 查询第二页,每页查询2条
Query queryLimit = new Query(criteria)
.limit(2)//设置每页查询条数
.skip(2) ; //开启查询的条数 (page-1)*size
List<Person> list = mongoTemplate.find(queryLimit, Person.class);
for (Person person : list) {
System.out.println(person);
}
}
/**
* 更新:
* 根据id,更新年龄
*/
@Test
public void testUpdate() {
//1、条件
Query query = Query.query(Criteria.where("id").is("5fe404c26a787e3b50d8d5ad"));
//2、更新的数据
Update update = new Update();
update.set("age", 20);
mongoTemplate.updateFirst(query, update, Person.class);
}
@Test
public void testRemove() {
Query query = Query.query(Criteria.where("id").is("5fe404c26a787e3b50d8d5ad"));
mongoTemplate.remove(query, Person.class);
}
}
今日佳人