Java项目:120SpringBoot婚恋网站

博主主页:Java旅途
简介:分享计算机知识、学习路线、系统源码及教程
文末获取源码

一、项目介绍

婚恋网站是由SpringBoot+Mybatis开发的,功能详细,满足婚恋网的基本要求。

主要功能如下:

  • 登录注册
  • 用户浏览
  • 用户搜索
  • 成功故事
  • 发表祝福
  • 故事点赞
  • 个人资料完善
  • 金币模拟充值
  • 关注用户
  • 私信聊天

二、技术框架

  • 后端:SpringBoot,Mybatis
  • 前端:jquery

三、安装教程

  1. 用idea打开项目

  2. 在idea中配置jdk环境

  3. 配置maven环境并下载依赖

  4. 新建数据库,导入数据库文件

  5. 在application.yml文件中将数据库账号密码改成自己本地的

  6. 启动运行。账号密码列表

    abc@qq.com / 123456
    xtt@qq.com / 123456
    cf@qq.com / 123456
    wx@qq.com / 123456
    pyf@qq.com / 123456
    zh@qq.com / 123456
    

四、项目截图

image-20230719161320858

image-20230719161435399

image-20230719161523420

image-20230719161551516

image-20230719161608247

image-20230719161637935

五、相关代码

IndexController

package com.hpe.findlover.contoller.front;import com.github.pagehelper.PageHelper;
import com.hpe.findlover.model.*;
import com.hpe.findlover.service.*;
import com.hpe.findlover.util.Constant;
import com.hpe.findlover.util.LoverUtil;
import com.hpe.findlover.util.SessionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;/****/
@Controller
public class IndexController {@Autowiredprivate UserAssetService userAssetService;@Autowiredprivate UserPickService userPickService;@Autowiredprivate DictService dictService;@Autowiredprivate UserService userService;@Autowiredprivate VisitTraceService visitTraceService;@Autowiredprivate SuccessStoryService successStoryService;private Logger logger = LogManager.getLogger(IndexController.class);/**** @Describtion: 跳转到是首页,需要给首页传递的数据有* 1、用户信息,用于显示用户资料* 2、用户择偶条件,用于推荐每日情缘* 3、光荣脱单榜* 4、成功故事* 5、谁看过我**/@GetMapping(value = {"","index"})public String index(Model model, HttpServletRequest request) throws Exception {logger.debug("User Subject: "+ SecurityUtils.getSubject().getPrincipal().toString());//获取光荣脱单榜Map<UserBasic, Integer> vipNotSingles = successStoryService.selectVipNotSingle();//1.用户信息,基本信息可以从session中直接获取,消费信息需要我们查询数据库UserBasic user = (UserBasic)request.getSession().getAttribute("user");user.setAge(LoverUtil.getAge(user.getBirthday()));logger.debug("user:"+user);UserAsset userAsset = userAssetService.selectByPrimaryKey(user.getId());logger.debug("userAsset:"+userAsset);//剩余时间计算int vipDate=0, starDate=0,asset=0;if (userAsset!=null){if (userAsset.getVipDeadline()!=null){vipDate = LoverUtil.getDiffOfDays(userAsset.getVipDeadline());}if (userAsset.getStarDeadline()!=null){starDate = LoverUtil.getDiffOfDays(userAsset.getStarDeadline());}if (userAsset.getAsset()!=null){asset= userAsset.getAsset();}}logger.debug("vipDate="+vipDate+"....starDate="+starDate+".....asset="+asset);model.addAttribute("vipDate",vipDate);model.addAttribute("starDate",starDate);model.addAttribute("asset",asset);//2、用户择偶条件,用于推荐每日情缘UserPick userPick = userPickService.selectByPrimaryKey(user.getId());List<UserBasic> userBasicList = getDayLovers(userPick,user);model.addAttribute("dayLover",userBasicList);//职业List<Dict> jobList = dictService.selectDictByType("job");model.addAttribute("userPick",userPick);model.addAttribute("jobList",jobList);model.addAttribute("vipNotSingles",vipNotSingles);logger.debug(vipNotSingles);//  * 5、谁看过我PageHelper.startPage(1,5,"visit_time desc");List<VisitTrace> visitTraces = visitTraceService.selectIndexVisitTracer(user.getId());model.addAttribute("visitTraces",visitTraces);// * 4、成功故事PageHelper.startPage(1,5,"success_time desc");List<SuccessStory> successStories = successStoryService.selectAllByStatus();for (SuccessStory success : successStories) {success.setUserLeft(userService.selectByPrimaryKey(success.getLeftUser()));success.setUserRight(userService.selectByPrimaryKey(success.getRightUser()));}model.addAttribute("successStories",successStories);return "front/index";}@GetMapping("index/initSearch")@ResponseBodypublic UserPick initSearch(HttpServletRequest request){UserBasic user = (UserBasic)request.getSession().getAttribute("user");return userPickService.selectByPrimaryKey(user.getId());}@PostMapping("index/getSearchUser")@ResponseBodypublic List<UserBasic> getSearchUser(UserPick userPick,HttpServletRequest request){UserBasic user = SessionUtils.getSessionAttr("user",UserBasic.class);return getDayLovers(userPick,user);}/*** 更具用户择偶条件选出16个每日情缘,*      * 如果择偶条件对应的人数不够,则从所有性取向对应用户随机选取凑够16个*      * @param userPick* @return*/private List<UserBasic> getDayLovers(UserPick userPick, UserBasic user){userPick.setId(user.getId());logger.debug("userPick..."+userPick);List<UserBasic> userBasicList = userService.selectUserByUserPick(userPick);LoverUtil.formatUserInfo(userBasicList);if (userBasicList.size()> Constant.INDEX_SHOW_USER_NUMBER){logger.debug("根据择偶条件选出来的用户大于16,需要随机选取");return LoverUtil.getRandomUser(userBasicList,Constant.INDEX_SHOW_USER_NUMBER);}else {logger.debug("根据择偶条件选出来的用户小于16,需要从数据库随机获取");int size = Constant.INDEX_SHOW_USER_NUMBER-userBasicList.size();List<UserBasic> userBasics = userService.selectUserBySexualAndWorkProvince(user.getId(),userPick.getSex(),user.getWorkplace().substring(0,2));if (userBasics==null||userBasics.size()<size){logger.debug("根据性取向和工作最地选出来的用户小于16,只选取性取向对应的用户");userBasics =userService.selectUserBySexualAndWorkProvince(user.getId(),userPick.getSex(),null);}LoverUtil.formatUserInfo(userBasics);List<UserBasic> allUsers = LoverUtil.getRandomUser(userBasics,size);userBasicList.addAll(allUsers);userBasicList.forEach(logger::debug);return userBasicList;}}}

AdminController

package com.hpe.findlover.contoller.back;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hpe.findlover.model.Admin;
import com.hpe.findlover.service.AdminRoleService;
import com.hpe.findlover.service.AdminService;
import com.hpe.findlover.service.RoleService;
import com.hpe.findlover.token.CustomToken;
import com.hpe.findlover.util.Identity;
import com.hpe.findlover.util.LoverUtil;
import com.hpe.findlover.util.SessionUtils;
import com.hpe.findlover.util.ShiroHelper;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.security.InvalidParameterException;
import java.util.Arrays;
import java.util.Date;@Controller
@RequestMapping("admin")
public class AdminController {private Logger logger = LogManager.getLogger(AdminController.class);private final AdminService adminService;private final RoleService roleService;private final AdminRoleService adminRoleService;@Autowiredpublic AdminController(AdminService adminService, RoleService roleService, AdminRoleService adminRoleService) {this.adminService = adminService;this.roleService = roleService;this.adminRoleService = adminRoleService;}@GetMapping(value = {"", "index"})public String index() {return "back/index";}@GetMapping("logout")public String logout() {SecurityUtils.getSubject().logout();SecurityUtils.getSubject().getSession().removeAttribute("admin");return "redirect:login";}@GetMapping("login")public String login() {return "back/login";}@PostMapping("login")public String login(String username, String password, HttpSession session, RedirectAttributes redirectAttributes) {ShiroHelper.flushSession();CustomToken token = new CustomToken(username, password, Identity.ADMIN);try {SecurityUtils.getSubject().login(token);if (SecurityUtils.getSubject().isAuthenticated()) {Admin admin = new Admin();admin.setUsername(token.getUsername());admin = adminService.selectOne(admin);admin.setLastLogin(new Date());adminService.updateByPrimaryKey(admin);session.setAttribute("admin", admin);return "redirect:index";} else {return "redirect:login";}} catch (UnknownAccountException uae) {redirectAttributes.addAttribute("message", "用户名不存在");} catch (IncorrectCredentialsException ice) {redirectAttributes.addAttribute("message", "密码不正确");}return "redirect:login";}@GetMapping("admins/page")@RequiresRoles("admin")public String listPage(@RequestParam String type, Model model) {if ("list".equals(type)) {return "back/admin/admin_list";} else if ("add".equals(type)) {model.addAttribute("roles", roleService.selectAll());return "back/admin/admin_add";}throw new InvalidParameterException("没有" + type + "对应的页面。");}@GetMapping("admins")@RequiresRoles("admin")@ResponseBodypublic PageInfo<Admin> list(@RequestParam int pageNum, @RequestParam int pageSize, @RequestParam String keyword, @RequestParam String column) {PageHelper.startPage(pageNum, pageSize);return new PageInfo<>(adminService.selectByKeyword("%" + keyword + "%", column));}@GetMapping("admin_roles")@RequiresRoles("admin")@ResponseBodypublic JSONObject roleList(@RequestParam int adminId) {JSONObject result = new JSONObject();JSONArray arr = new JSONArray();roleService.selectAllByAdminId(adminId).forEach(v -> arr.add(v.getId()));result.put("adminRolesId", arr);result.put("roles", roleService.selectAll());return result;}@PostMapping("admin_roles")@RequiresRoles("admin")@ResponseBodypublic boolean updateAdminRole(@RequestParam("roleIds[]") int[] roleIds, @RequestParam int adminId) {return adminRoleService.updateAdminRole(roleIds, adminId);}@PostMapping("admins")@RequiresRoles("admin")public String addAdmin(Admin admin, int[] rid) {adminService.insert(admin, rid);return "back/admin/admin_list";}@GetMapping("admins/check")@RequiresRoles("admin")@ResponseBodypublic JSONObject usernameIsExists(@RequestParam String username) {Admin vo = new Admin();vo.setUsername(username);JSONObject obj = new JSONObject();if (adminService.selectOne(vo) == null) {obj.put("ok", "该用户名可用");} else {obj.put("error", "该用户名已存在,不能使用!");}return obj;}@GetMapping("admins/pwdcheck")@RequiresRoles("admin")@ResponseBodypublic boolean pwdCheck(Admin admin) {admin.setId(SessionUtils.getSessionAttr("admin", Admin.class).getId());admin.setPassword(LoverUtil.getMd5Password(admin.getPassword(), SessionUtils.getSessionAttr("admin", Admin.class).getUsername()));logger.debug("修改密码Admin:" + admin);return adminService.selectOne(admin) != null;}@PutMapping("admins")@RequiresRoles("admin")@ResponseBodypublic boolean updatePwd(Admin admin) {admin.setId(SessionUtils.getSessionAttr("admin", Admin.class).getId());admin.setPassword(LoverUtil.getMd5Password(admin.getPassword(), SessionUtils.getSessionAttr("admin", Admin.class).getUsername()));return adminService.updateByPrimaryKeySelective(admin);}@GetMapping("right")public String right(){return "back/common/right";}}

大家点赞、收藏、关注、评论啦 、👇🏻点开下方卡片👇🏻关注后回复 105

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

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

相关文章

2024年腾讯云服务器多少钱1年?超便宜62元一年

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

springCould中的Hystrix【下】-从小白开始【8】

目录 &#x1f9c2;1.熔断机制❤️❤️❤️ &#x1f32d;2.修改8001服务 ❤️❤️❤️ &#x1f95e;3.测试 ❤️❤️❤️ &#x1f953;4. 服务监控hystrixDashboard❤️❤️❤️ &#x1f32d;5.仪表盘❤️❤️❤️ &#x1f9c2;6.仪表盘的使用 ❤️❤️❤️ 1.熔断机…

数据库SELECT语句

文章目录 一、检索数据二、排序检索三、过滤数据四、数据过滤4.1 组合WHERE子句1. AND操作符2. OR操作符3. 计算次序 4.2 IN操作符4.3 NOT操作符 五、用通配符过滤LIKE操作符1. 百分号&#xff08;%&#xff09;通配符2. 下划线&#xff08;_&#xff09;通配符 使用通配符的技…

【Kotlin】协程的字节码原理

前言 协程是Koltin语言最重要的特性之一&#xff0c;也是最难理解的特性。网上关于kotlin协程的描述也是五花八门&#xff0c;有人说它是轻量级线程&#xff0c;有人说它是无阻塞式挂起&#xff0c;有人说它是一个异步框架等等&#xff0c;众说纷芸。甚至还有人出了书籍专门介…

transbigdata笔记:可视化

1 可视化轨迹 transbigdata.visualization_trip(trajdata, col[Lng, Lat, ID, Time], zoomauto, height500) 例子见transbigdata 笔记&#xff1a;官方文档案例1&#xff08;出租车GPS数据处理&#xff09;-CSDN博客 2 可视化od transbigdata.visualization_od(oddata, col…

【分布式技术】监控平台zabbix对接grafana,优化dashboard

目录 第一步&#xff1a;在zabbix server服务端安装grafana&#xff0c;并启动 第二步&#xff1a; 访问http://ip:3000/login 第三步&#xff1a;创建数据源 第四步&#xff1a;导入dashboard模板 ps&#xff1a;自定义创建新面板 第一步&#xff1a;在zabbix server服务…

Java线上问题堆栈排查分析

最近线上出现类似内存溢出问题&#xff0c;需要排查具体原因&#xff0c;记录过程&#xff0c;方便备查。 一、数据抓取 在启动参数中添加参数&#xff0c;可参照以下设置。 参数的作用是在程序发生内存溢出 OutOfMemory 时打印日志&#xff0c;dump下来&#xff0c;方便用工…

leetcode 206翻转链表

题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 提示&#xff1a; 链表中节点的数目范围是 [0, 5000] -5000 < Node.val < 5000 解法&#xff1a; 思路 使用双指针&#xff0c;pre,定义当前指针cur&#xff0…

入门Docker1: 容器技术的基础

目录 服务器选型 虚拟机 基于主机(物理机或虚机)的多服务实例 基于容器的服务实例 Docker Docker三要素 Docker安装 Docker基本使用 基本操作 仓库镜像 容器 服务器选型 在选择服务器操作系统时&#xff0c; Windows 附带了许多您需要付费的功能。 Linux 是开放源代…

Could not find annotations-4.9.0.jar 异常

问题 org.gradle.internal.resolve.ArtifactNotFoundException: Could not find annotations-4.9.0.jar (com.github.bumptech.glide:annotations:4.9.0).原因 解决方式 repositories {google()//谷歌放前面jcenter()//放在谷歌后面}更换顺序后确实没问题了 参考文章 https:…

Python接口自动化测试项目实战

1.1 接口测试项目搭建 1.1.1 教育局招生管理系统部署 教育局招生管理系统是基于javamysql,下面介绍它的部署过程。 1.从我的网盘下载部署文件。 2.安装jdk以及配置环境变量。 点击 文件进行安装。 下一步下一步直接安装。 本人的安装路径是C:\Program Files\Java\jdk1.7.…

解决Vue 3 + Element Plus树形表格全选多选以及子节点勾选的问题

目录 前言 问题概述 解决方案 1. 创建树形表格 2. 实现全选功能 3. 实现多选功能 4. 实现子节点勾选 5. 实现父节点勾选 总结 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊解决Vue 3 Element Plus树形表格全选多选以及子节…

【MATLAB】EEMD+FFT+HHT组合算法

代码原理 EEMD&#xff08;经验模态分解&#xff09;FFT&#xff08;快速傅里叶变换&#xff09;HHT&#xff08;希尔伯特-黄变换&#xff09;组合算法是一种常用的信号处理和分析方法。这个组合算法包含了EEMD、FFT和HHT三个步骤&#xff0c;可以用于处理非线性和非平稳信号。…

小程序中使用微信同声传译插件实现语音识别、语音合成、文本翻译功能----语音识别(一)

官方文档链接&#xff1a;https://mp.weixin.qq.com/wxopen/plugindevdoc?appidwx069ba97219f66d99&token370941954&langzh_CN#- 要使用插件需要先在小程序管理后台的设置->第三方设置->插件管理中添加插件&#xff0c;目前该插件仅认证后的小程序。 语音识别…

了解Dubbo配置:优先级、重试和容错机制的秘密【五】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 了解Dubbo配置&#xff1a;优先级、重试和容错机制的秘密【五】 前言Dubbo高级配置概述不同配置覆盖关系重试与容错处理机制负载均衡机制 前言 Dubbo作为一款强大的分布式服务框架&#xff0c;其高级…

(2024,分数蒸馏抽样,Delta 降噪分数,LoRA)PALP:文本到图像模型的提示对齐个性化

PALP: Prompt Aligned Personalization of Text-to-Image Models 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 4. 提示对齐方法 4.1 概述 4.2 个性化 4.3 提示对齐分数抽…

报表生成器FastReport .Net用户指南:数据源与“Data“窗口

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。 FastReport.NET官方版…

央视推荐的护眼灯是哪款?教育部认可护眼灯品牌

许多家长一般都会给孩子买上许多学习用品&#xff0c;比如现在一些学习桌椅、读写笔灯等等&#xff0c;配有蛮多的学习用具&#xff0c;但对孩子学习时用的护眼台灯很忽略&#xff0c;没有给孩子选好真正合格好用的护眼台灯&#xff0c;就容易让孩子的视觉形成偏差&#xff0c;…

Pixel手机进入工程模式、是否是Version版本?

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

APP加固原理与作用

文章目录 引言正文1. 什么是APP加固&#xff0c;加固原理是什么&#xff1f;2. 加固的作用是什么&#xff1f;加固后是否完全不会被破解&#xff1f;3. 如何提前规避加固新版本可能带来的风险&#xff1f;4. 付费加固与免费加固的区别是什么&#xff1f; 白嫖的混淆加密工具总结…