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

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.  
  3. import lombok.Data;
  4.  
  5. import java.util.Date;
  6.  
  7. /**
  8.  * 日志
  9.  * @author 言曌
  10.  * @date 2018/9/3 20:00
  11.  */
  12. @Data
  13. public class Log {
  14.  
  15.     private Long id;
  16.  
  17.     private Long userId;
  18.  
  19.     private Integer type;
  20.  
  21.     private String url;
  22.  
  23.     private String desc;
  24.  
  25.     private Date createTime;
  26. }

 

2、LogRepository

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

 

3、测试类

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

 

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

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

 

三、更多查询

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

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

 

 

 




  • 微信
  • 赶快加我聊天吧
  • QQ
  • 相逢即是有缘
  • weinxin
三尾鱼

发表评论 取消回复