idea+springboot+mongodb的实战使用分享

昨天的时候我们先在网上找了测试类,测试了一下mongdb的简单使用,今天就来实地在项目中用一用

没安装mongodb的参考我上一篇文章:idea+springboot+mongodb的简单测试使用分享

其实我们初学者最好是安装一个可视化的工具,这样方便我们管理数据:
下载地址:MongoDB Compass

我们选择Msi 安装版的,然后安装。
在这里插入图片描述
安装完成以后就可以打开软件使用了。
默认连接我们的27017端口
在这里插入图片描述

在这里插入图片描述

说完这个,现在来说一下我的业务需求:

今日用户活跃度:登录了web产品的用户数统计
今日用户访问量:用户每打开一个网站页面就被记录1次。用户多次打开同一页面,浏览量值累计。

思路:
用户登陆了就要把用户id,用户ip,用户名字等存入t_user_login,添加一条记录;同时要在t_user_visits表插入一条记录
用户访问了就t_user_visits表插入一条记录

开始干!
1.首先在拦截器中拦截,然后获取我们需要的信息
2.将获取的信息存入MongoDB
3.然后统计人数
1>先复制出一个拦截器取名为AccessLogInterceptor,然后修改

public class AccessLogInterceptor implements HandlerInterceptor {@Autowiredprivate MongoTemplate mongoTemplate;@Autowiredprivate SysParamMapper sysParamMapper;@Autowiredprivate UserMapper userMapper;private void responseForbiddenResult( HttpServletResponse httpResponse) {try {httpResponse.setContentType("application/json;charset=UTF-8");PrintWriter pw = httpResponse.getWriter();pw.write(JSONObject.toJSONString(ResultUtil.getResult(ResultCode.FORBIDDEN)));pw.flush();} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e);}}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {return  true;}/*** 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)* 我们主要修改这个方法 里的代码*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {//通过request获取用户正式ipString ip = IPUtil.getIpAddress(request);HttpSession session = request.getSession();//获取用户登陆的userIDString userID = request.getSession().getAttribute(WebConstants.CURRENT_USER_ID).toString();int userId = Integer.parseInt(userID);User user = userMapper.get(userId);//判断当前URL是否为登陆的url如果是就给userLoginDoc插入一条数据if("/v1/user/login_sms".equals(request.getRequestURI())){UserLoginDoc userLoginDoc = new UserLoginDoc();userLoginDoc.setUserName(user.getUsername());userLoginDoc.setCreateTime(new Date());userLoginDoc.setLastIp(ip);userLoginDoc.setUserId(user.getUserId());mongoTemplate.save(userLoginDoc,"t_user_login");}//不管访问那个页面都要在这个UserAccessDoc插入一条数据UserAccessDoc userAccessDoc = new UserAccessDoc();userAccessDoc.setUserId(user.getUserId());userAccessDoc.setAccessUrl(request.getRequestURI());userAccessDoc.setLastIp(ip);userAccessDoc.setUserName(user.getUsername());userAccessDoc.setCreateTime(new Date());mongoTemplate.save(userAccessDoc,"t_user_visits");}/*** 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {}
}

实体类:

@Getter
@Setter
@ToString
public class UserLoginDoc implements Serializable {private Integer userId;private String userName;private Date createTime;private String lastIp;}

在这里插入图片描述

上面就已经存到我们的MongoDB中了,现在就要去查询总数

//获取当天0点的时间
Date morning = DateUtil.getTimesmorning();
//获取第二天0点的时间
Date times = DateUtil.getTimesnight();
int loginCount = mongoTemplate.aggregate(Aggregation.newAggregation(Aggregation.match(where("createTime").gte(morning).lte(times))),"t_user_login", BasicDBObject.class).getMappedResults().size();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx整合tomcat,实现反向代理和负载均衡

1.Nginx与Tomcat整合,通过Nginx反向代理Tomcat。 Nginx安装路径为:/usr/local//nginx 首先切换路径到:/usr/local//nginx/conf通过命令 vim/usr/local//nginx/conf/nginx.conf打开配置文件 修改Nginx配置文件:/usr/local//nginx/conf/nginx.…

ElasticSearch Java SpringBoot根据时间范围分组求和

需求是这样的: 近7天的用户登陆统计,根据日期来返回的要是data:[{date:“2021-04-01”,count:“1”}] Autowired private ElasticsearchTemplate elasticsearchTemplate;SimpleDateFormat formater new SimpleDateFormat("yyyy-MM-dd&…

开发springboot项目,遇到的一些问题总结

首先看一下我的项目目录吧 1,添加拦截器 我们做项目肯定要用到拦截器这个功能哈,没登录的话一些页面我们是不能访问的哈,这里是用到了HandlerInterceptor。 分别在图中的位置创建2个目录和2个文件: WebConfig: import org.sp…

centOS下lnamp安装

首先安装apache,mysql ,最后安装php 1>apache安装 安装:yum install -y httpd 运行:/bin/systemctl start httpd.service 执行完运行命令之后是看不到效果的,这时候再输入查看apache服务状态命令来查看服务是否已经启动: 查看状…

java使用itext填充pdf模板,超简单教学,有手就行

java使用itext填充pdf模板1、先去建一个Word文件,设置好想要填充的地方,留好位置,设置好下划线2、将Word另存为pdf3、打开电脑中的Adobe Acrobat pro DC(这个应该win10 都有,搜索一下就出来了),…

KVM使用

这里使用的是Ubuntu18.04桌面版虚拟机 关于KVM可以看一下我之前的博客,有一些简单的介绍。 1.在打开虚拟机之前先开启此虚拟机的虚拟化功能。 2.安装KVM及其依赖项 wywy-virtual-machine:~$ sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager 3.安装完成…

mybatis-plus3.5.1学习笔记

1、ID 1>id策略有6种: 想要id自增就在id上面添加 TableId(type IdType.AUTO)mybaits-plus的默认的主键策略是: TableId(type IdType.ID_WORKER)这样生成的是19位的数字id。 有的人喜欢使用UUID: TableId(type IdType.UUID)2、cre…

Python网络编程之socket编程

什么是Socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全…

idea必装插件

1、lombok 这个是自动生成getter,setter的插件工具,现在idea已经集成了,好像不用单独去插件市场下载。 2、Free MyBatis Tool 官方话术: Free MyBatis Tool 是一款增强idea对mybatis支持的插件 主要功能如下: 生成mapper xml文…

Contest Hunter 0103最短Hamilton路径 【状压dp】 By cellur925

题目传送门 Hamilton路径的定义:从0(起点)到n-1(终点)不重不漏地经过每个点恰好一次。 由于数据范围非常小,考虑状压。如NOIP2017宝藏一题,把状态压缩设为n个点是否已到达的二进制数。1表示到达…

java使用itext生成pdf,超简单教学,有手就行

前言&#xff1a;以前出过两期用itext填充pdf的文章&#xff0c;有人说那个会那字体加入到pdf中&#xff0c;导致pdf占用内存过大&#xff0c;那么今天就来分享一期另外的方法。 java使用itext生成pdf1、导包2、直接贴代码&#xff0c;然后大家看注释3、效果1、导包 <depen…

2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结 教材学习总结 有关vim 打开方式&#xff1a;vim [文件名]按i会进入insert模式&#xff0c;可以对代码进行编辑按Esc会进入普通模式&#xff0c;此时可以使用快捷键进行编辑&#xff0c;编辑方式为&#xff1a; 指…

itext5固定段落Paragraph,指定段落位置

前几期分析了怎么用itext生成pdf&#xff0c;有兴趣的可以去看看。 1&#xff0c;java使用itext生成pdf&#xff0c;超简单教学&#xff0c;有手就行 2&#xff0c;java使用itext填充pdf模板&#xff0c;超简单教学&#xff0c;有手就行 然后现在有了新的需求&#xff0c;需…

wordcount C

Gitee 代码链接&#xff1a;https://gitee.com/huangxue1111/codes/12rfs3ztj5ga8ymce7qi910 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#define IN 1#define OUT 0void main() {FILE *fp;int length;fp fopen("…

PS中如何使用通道计算来进行美白

打开本机的Photoshow&#xff0c;把要美白的图片添加进来。 通过快捷键ctrlj 创建一个图层副本。 然后选择通道中的蓝色&#xff0c;复制通道&#xff0c;这里说明一下为什么要选择蓝色&#xff1a;因为蓝色和绿色是较暗的&#xff0c;把暗的选出来&#xff0c;目的是为了更…

Eclipse中导入Java项目出现“No projects are found to import”

如图所示&#xff1a; &#xff0c; 这其实是你的项目中缺少了两个文件&#xff1a;.classpath文件和 .project文件 所以eclipse找不到你的项目了。 解决办法&#xff1a; 在你的Eclipse中再新建一个新的项目&#xff0c;项目的类型和项目名和你想要导入的项目名一样&am…

为什么tomcat在eclipse中启动了,访问不了

tomcat在eclipse中启动不了&#xff0c;有很多中情况。 我把这些可能出现的情况总结了起来&#xff1a; 原因1&#xff1a; 项目的发布目录没有在tomcat下的webapps文件下&#xff0c;导致项目启动不了。 解决&#xff1a;先把tomcat中的服务remove出来 然后双击test1服务…

jsp页面中出现“String cannot be resolved to a type”

右键你的项目&#xff0c;Build Path–>Configure Build Path 按照步骤1–>2 –>3。 然后就大功告成了。

1. 冒泡与选择排序及其比较

冒泡排序 1. 思想 冒泡排序&#xff08;Bubble Sort&#xff09;是一种交换排序&#xff0c;基本思路是&#xff1a;两两比较相邻记录的关键字&#xff0c;如果反序则交换&#xff0c;直到没有反序的记录为止。 2. 实现 2.1 初学常用的一种 public static <T extends Compar…

photoshop切图

1.传统切图 &#xff08;1&#xff09;打开一个psd文件&#xff0c;选择ps左边菜单栏的裁剪工具&#xff0c;选择切片工具。首先我们对这个psd文件进行分析&#xff0c;有意识的将其划分成几个选区&#xff0c;然后通过鼠标的拖拽用切片工具将我们所需要的图案切下来&#xff0…