SpringBoot + mongodb 整合, 记录网站操作日志,常用查询操作

文章封面
摘要: mongodb 是一种文档型数据库。跟 Redis 一样是非关系型数据库,Redis 属于那种小而快的数据库,常常用作缓存。而如果我们需要存一些类似于日志的那种,可以尝试用 mongodb (当然也有人用 MySQL,就是有点慢)。我们尝试用 mongodb 来存储博客的日志信息。本文主要介绍&nb

mongodb 是一种文档型数据库。跟 Redis 一样是非关系型数据库,Redis 属于那种小而快的数据库,常常用作缓存。

而如果我们需要存一些类似于日志的那种,可以尝试用 mongodb (当然也有人用 MySQL,就是有点慢)。我们尝试用 mongodb 来存储博客的日志信息。

本文主要介绍 SpringBoot 和 mongodb 整合,和基本的查询操作。

一、依赖和配置

创建 springboot 项目,引入 web 和 lombok,然后再添加 mongodb 依赖

1、pom.xml

  1. <dependency>
  2. <groupId>org.springframework.bootgroupId>
  3. <artifactId>spring-boot-starter-data-mongodbartifactId>
  4. dependency>

类似 Spring Data JPA

2、application.properties

  1. spring.data.mongodb.uri=mongodb://localhost:27017/saysky

saysky是数据库名称,确保你本地启动了 mongodb

二、代码实例

1、日志实体

  1. package com.liuyanzhao.mongodb.model;
  2. import lombok.Data;
  3. import java.util.Date;
  4. /**
  5. * 日志
  6. * @author 言曌
  7. * @date 2018/9/3 20:00
  8. */
  9. @Data
  10. public class Log {
  11. private Long id;
  12. private Long userId;
  13. private Integer type;
  14. private String url;
  15. private String desc;
  16. private Date createTime;
  17. }

2、LogRepository

  1. package com.liuyanzhao.mongodb.dao;
  2. import com.liuyanzhao.mongodb.model.Log;
  3. import org.springframework.data.domain.Page;
  4. import org.springframework.data.domain.Pageable;
  5. import org.springframework.data.mongodb.repository.MongoRepository;
  6. import org.springframework.stereotype.Repository;
  7. import java.util.Date;
  8. import java.util.List;
  9. /**
  10. * @author 言曌
  11. * @date 2018/9/3 14:17
  12. */
  13. @Repository
  14. public interface LogRepository extends {
  15. /**
  16. * 根据用户ID查询
  17. * @param userId
  18. * @return
  19. */
  20. List findByUserId(Long userId);
  21. /**
  22. * 根据描述查询
  23. * @param desc
  24. * @return
  25. */
  26. List findByDesc(String desc);
  27. /**
  28. * 根据创建日期范围查询
  29. * @param startTime
  30. * @param endTime
  31. * @return
  32. */
  33. List findByCreateTimeBetween(Date startTime, Date endTime);
  34. /**
  35. * 根据描述查询
  36. * 分页查询
  37. * @param desc
  38. * @return
  39. */
  40. Page findByDesc(String desc, Pageable pageable);
  41. /**
  42. * 根据创建日期范围查询
  43. * 分页查询
  44. * @param startTime
  45. * @param endTime
  46. * @return
  47. */
  48. Page findByCreateTimeBetween(Date startTime, Date endTime,Pageable pageable);
  49. }

3、测试类

  1. package com.liuyanzhao.mongodb.dao;
  2. import com.liuyanzhao.mongodb.model.Log;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.data.domain.Page;
  8. import org.springframework.data.domain.PageRequest;
  9. import org.springframework.test.context.junit4.SpringRunner;
  10. import java.util.Date;
  11. /**
  12. * @author 言曌
  13. * @date 2018/9/3 14:21
  14. */
  15. @SpringBootTest
  16. @RunWith(SpringRunner.class)
  17. public class LogRepositoryTest {
  18. @Autowired
  19. private LogRepository logRepository;
  20. @Test
  21. public void save() {
  22. Log log = new Log();
  23. log.setId(7L);
  24. log.setType(1);
  25. log.setDesc("更新用户");
  26. log.setUserId(10002L);
  27. log.setUrl("/user/update");
  28. log.setCreateTime(new Date());
  29. logRepository.save(log);
  30. }
  31. @Test
  32. public void findById() {
  33. Log Log = logRepository.findById(1L).get();
  34. System.out.println(Log);
  35. }
  36. @Test
  37. public void findByDes() {
  38. //不分页
  39. // List LogList = logRepository.findByDesc("添加用户");
  40. // System.out.println(LogList);
  41. //分页查询
  42. //查询第1页,每页显示2条
  43. PageRequest pageRequest = new PageRequest(0,2);
  44. Page logPage = logRepository.findByDesc("添加用户",pageRequest);
  45. System.out.println(logPage);
  46. }
  47. @Test
  48. public void findByCreateTimeBetween() {
  49. //根据时间区间查询
  50. //不分页
  51. Date createdAtStart = new Date(1535974057016L);
  52. Date createdAtEnd = new Date(1535974145009L);
  53. // List LogList = logRepository.findByCreateTimeBetween(createdAtStart,createdAtEnd);
  54. // System.out.println(LogList);
  55. //分页查询
  56. //查询第1页,每页显示2条
  57. PageRequest pageRequest = new PageRequest(0,2);
  58. Page logPage = logRepository.findByCreateTimeBetween(createdAtStart,createdAtEnd,pageRequest);
  59. System.out.println(logPage);
  60. }
  61. }

我们通过mongodb可视化工具可以看到数据

SpringBoot + mongodb 整合, 记录网站操作日志,常用查询操作

三、更多查询

因为引入的 MongoRepository 是一种 JPA 框架,所以增删改查都很容易。

可以参考 Spring Data JPA 方法命名规范

    80 阅读 ← 返回技术栈
    图片放大