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. 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 方法命名规范

    • 微信
    • 赶快加我聊天吧
    • 博客交流群
    • 海纳百川,大家来水
    • weinxin
    言曌

    发表评论 取消回复