SpringBoot + mongodb 整合, 记录网站操作日志,常用查询操作
mongodb 是一种文档型数据库。跟 Redis 一样是非关系型数据库,Redis 属于那种小而快的数据库,常常用作缓存。
而如果我们需要存一些类似于日志的那种,可以尝试用 mongodb (当然也有人用 MySQL,就是有点慢)。我们尝试用 mongodb 来存储博客的日志信息。
本文主要介绍 SpringBoot 和 mongodb 整合,和基本的查询操作。
一、依赖和配置
创建 springboot 项目,引入 web 和 lombok,然后再添加 mongodb 依赖
1、pom.xml
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-data-mongodbartifactId>
- dependency>
类似 Spring Data JPA
2、application.properties
- spring.data.mongodb.uri=mongodb://localhost:27017/saysky
saysky是数据库名称,确保你本地启动了 mongodb
二、代码实例
1、日志实体
- package com.liuyanzhao.mongodb.model;
- import lombok.Data;
- import java.util.Date;
- /**
- * 日志
- * @author 言曌
- * @date 2018/9/3 20:00
- */
- @Data
- public class Log {
- private Long id;
- private Long userId;
- private Integer type;
- private String url;
- private String desc;
- private Date createTime;
- }
2、LogRepository
- package com.liuyanzhao.mongodb.dao;
- import com.liuyanzhao.mongodb.model.Log;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import org.springframework.data.mongodb.repository.MongoRepository;
- import org.springframework.stereotype.Repository;
- import java.util.Date;
- import java.util.List;
- /**
- * @author 言曌
- * @date 2018/9/3 14:17
- */
- @Repository
- public interface LogRepository extends
{ - /**
- * 根据用户ID查询
- * @param userId
- * @return
- */
- List
findByUserId(Long userId); - /**
- * 根据描述查询
- * @param desc
- * @return
- */
- List
findByDesc(String desc); - /**
- * 根据创建日期范围查询
- * @param startTime
- * @param endTime
- * @return
- */
- List
findByCreateTimeBetween(Date startTime, Date endTime); - /**
- * 根据描述查询
- * 分页查询
- * @param desc
- * @return
- */
- Page
findByDesc(String desc, Pageable pageable); - /**
- * 根据创建日期范围查询
- * 分页查询
- * @param startTime
- * @param endTime
- * @return
- */
- Page
findByCreateTimeBetween(Date startTime, Date endTime,Pageable pageable); - }
3、测试类
- package com.liuyanzhao.mongodb.dao;
- import com.liuyanzhao.mongodb.model.Log;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.PageRequest;
- import org.springframework.test.context.junit4.SpringRunner;
- import java.util.Date;
- /**
- * @author 言曌
- * @date 2018/9/3 14:21
- */
- @SpringBootTest
- @RunWith(SpringRunner.class)
- public class LogRepositoryTest {
- @Autowired
- private LogRepository logRepository;
- @Test
- public void save() {
- Log log = new Log();
- log.setId(7L);
- log.setType(1);
- log.setDesc("更新用户");
- log.setUserId(10002L);
- log.setUrl("/user/update");
- log.setCreateTime(new Date());
- logRepository.save(log);
- }
- @Test
- public void findById() {
- Log Log = logRepository.findById(1L).get();
- System.out.println(Log);
- }
- @Test
- public void findByDes() {
- //不分页
- // List
LogList = logRepository.findByDesc("添加用户"); - // System.out.println(LogList);
- //分页查询
- //查询第1页,每页显示2条
- PageRequest pageRequest = new PageRequest(0,2);
- Page
logPage = logRepository.findByDesc("添加用户",pageRequest); - System.out.println(logPage);
- }
- @Test
- public void findByCreateTimeBetween() {
- //根据时间区间查询
- //不分页
- Date createdAtStart = new Date(1535974057016L);
- Date createdAtEnd = new Date(1535974145009L);
- // List
LogList = logRepository.findByCreateTimeBetween(createdAtStart,createdAtEnd); - // System.out.println(LogList);
- //分页查询
- //查询第1页,每页显示2条
- PageRequest pageRequest = new PageRequest(0,2);
- Page
logPage = logRepository.findByCreateTimeBetween(createdAtStart,createdAtEnd,pageRequest); - System.out.println(logPage);
- }
- }
我们通过mongodb可视化工具可以看到数据
三、更多查询
因为引入的 MongoRepository 是一种 JPA 框架,所以增删改查都很容易。
可以参考 Spring Data JPA 方法命名规范