news 2026/9/10 16:41:04

基于SpringBoot的图书个性化推荐系统-048

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于SpringBoot的图书个性化推荐系统-048

一、项目技术栈

Java开发工具:JDK1.8
后端框架:SpringBoot
前端:采用HTML和Vue相结合开发
数据库:MySQL5.7和Navicat管理工具结合
服务器:Tomcat8.5
开发软件:IDEA / Eclipse
是否Maven项目:是

二、源码获取
源码获取

三、项目视频
视频链接
四、功能截图





五、代码实现
图书信息评论

package com.controller;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Calendar;import java.util.Map;import java.util.HashMap;import java.util.Iterator;import java.util.Date;import java.util.List;import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import com.baomidou.mybatisplus.mapper.EntityWrapper;import com.baomidou.mybatisplus.mapper.Wrapper;import com.annotation.IgnoreAuth;import com.entity.DiscusstushuxinxiEntity;import com.entity.view.DiscusstushuxinxiView;import com.service.DiscusstushuxinxiService;import com.service.TokenService;import com.utils.PageUtils;import com.utils.R;import com.utils.MD5Util;import com.utils.MPUtil;import com.utils.CommonUtil;/** * 图书信息评论表 */@RestController@RequestMapping("/discusstushuxinxi")publicclassDiscusstushuxinxiController{@AutowiredprivateDiscusstushuxinxiServicediscusstushuxinxiService;/** * 后端列表 */@RequestMapping("/page")publicRpage(@RequestParam Map<String,Object>params,DiscusstushuxinxiEntitydiscusstushuxinxi,HttpServletRequestrequest){EntityWrapper<DiscusstushuxinxiEntity>ew=newEntityWrapper<DiscusstushuxinxiEntity>();PageUtilspage=discusstushuxinxiService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew,discusstushuxinxi),params),params));returnR.ok().put("data",page);}/** * 前端列表 */@IgnoreAuth@RequestMapping("/list")publicRlist(@RequestParam Map<String,Object>params,DiscusstushuxinxiEntitydiscusstushuxinxi,HttpServletRequestrequest){EntityWrapper<DiscusstushuxinxiEntity>ew=newEntityWrapper<DiscusstushuxinxiEntity>();PageUtilspage=discusstushuxinxiService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew,discusstushuxinxi),params),params));returnR.ok().put("data",page);}/** * 列表 */@RequestMapping("/lists")publicRlist(DiscusstushuxinxiEntitydiscusstushuxinxi){EntityWrapper<DiscusstushuxinxiEntity>ew=newEntityWrapper<DiscusstushuxinxiEntity>();ew.allEq(MPUtil.allEQMapPre(discusstushuxinxi,"discusstushuxinxi"));returnR.ok().put("data",discusstushuxinxiService.selectListView(ew));}/** * 查询 */@RequestMapping("/query")publicRquery(DiscusstushuxinxiEntitydiscusstushuxinxi){EntityWrapper<DiscusstushuxinxiEntity>ew=newEntityWrapper<DiscusstushuxinxiEntity>();ew.allEq(MPUtil.allEQMapPre(discusstushuxinxi,"discusstushuxinxi"));DiscusstushuxinxiViewdiscusstushuxinxiView=discusstushuxinxiService.selectView(ew);returnR.ok("查询图书信息评论表成功").put("data",discusstushuxinxiView);}/** * 后端详情 */@RequestMapping("/info/{id}")publicRinfo(@PathVariable("id")Longid){DiscusstushuxinxiEntitydiscusstushuxinxi=discusstushuxinxiService.selectById(id);returnR.ok().put("data",discusstushuxinxi);}/** * 前端详情 */@RequestMapping("/detail/{id}")publicRdetail(@PathVariable("id")Longid){DiscusstushuxinxiEntitydiscusstushuxinxi=discusstushuxinxiService.selectById(id);returnR.ok().put("data",discusstushuxinxi);}/** * 后端保存 */@RequestMapping("/save")publicRsave(@RequestBodyDiscusstushuxinxiEntitydiscusstushuxinxi,HttpServletRequestrequest){discusstushuxinxi.setId(newDate().getTime()+newDouble(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(discusstushuxinxi);discusstushuxinxiService.insert(discusstushuxinxi);returnR.ok();}/** * 前端保存 */@RequestMapping("/add")publicRadd(@RequestBodyDiscusstushuxinxiEntitydiscusstushuxinxi,HttpServletRequestrequest){discusstushuxinxi.setId(newDate().getTime()+newDouble(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(discusstushuxinxi);discusstushuxinxiService.insert(discusstushuxinxi);returnR.ok();}/** * 修改 */@RequestMapping("/update")publicRupdate(@RequestBodyDiscusstushuxinxiEntitydiscusstushuxinxi,HttpServletRequestrequest){//ValidatorUtils.validateEntity(discusstushuxinxi);discusstushuxinxiService.updateById(discusstushuxinxi);//全部更新returnR.ok();}/** * 删除 */@RequestMapping("/delete")publicRdelete(@RequestBodyLong[]ids){discusstushuxinxiService.deleteBatchIds(Arrays.asList(ids));returnR.ok();}/** * 提醒接口 */@RequestMapping("/remind/{columnName}/{type}")publicRremindCount(@PathVariable("columnName")StringcolumnName,HttpServletRequestrequest,@PathVariable("type")Stringtype,@RequestParamMap<String,Object>map){map.put("column",columnName);map.put("type",type);if(type.equals("2")){SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");Calendarc=Calendar.getInstance();DateremindStartDate=null;DateremindEndDate=null;if(map.get("remindstart")!=null){IntegerremindStart=Integer.parseInt(map.get("remindstart").toString());c.setTime(newDate());c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate=c.getTime();map.put("remindstart",sdf.format(remindStartDate));}if(map.get("remindend")!=null){IntegerremindEnd=Integer.parseInt(map.get("remindend").toString());c.setTime(newDate());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate=c.getTime();map.put("remindend",sdf.format(remindEndDate));}}Wrapper<DiscusstushuxinxiEntity>wrapper=newEntityWrapper<DiscusstushuxinxiEntity>();if(map.get("remindstart")!=null){wrapper.ge(columnName,map.get("remindstart"));}if(map.get("remindend")!=null){wrapper.le(columnName,map.get("remindend"));}intcount=discusstushuxinxiService.selectCount(wrapper);returnR.ok().put("count",count);}}

留言板

package com.controller;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Calendar;import java.util.Map;import java.util.HashMap;import java.util.Iterator;import java.util.Date;import java.util.List;import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import com.baomidou.mybatisplus.mapper.EntityWrapper;import com.baomidou.mybatisplus.mapper.Wrapper;import com.annotation.IgnoreAuth;import com.entity.MessagesEntity;import com.entity.view.MessagesView;import com.service.MessagesService;import com.service.TokenService;import com.utils.PageUtils;import com.utils.R;import com.utils.MD5Util;import com.utils.MPUtil;import com.utils.CommonUtil;/** * 留言板 */@RestController@RequestMapping("/messages")publicclassMessagesController{@AutowiredprivateMessagesServicemessagesService;/** * 后端列表 */@RequestMapping("/page")publicRpage(@RequestParam Map<String,Object>params,MessagesEntitymessages,HttpServletRequestrequest){if(!request.getSession().getAttribute("role").toString().equals("管理员")){messages.setUserid((Long)request.getSession().getAttribute("userId"));}EntityWrapper<MessagesEntity>ew=newEntityWrapper<MessagesEntity>();PageUtilspage=messagesService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew,messages),params),params));returnR.ok().put("data",page);}/** * 前端列表 */@RequestMapping("/list")publicRlist(@RequestParam Map<String,Object>params,MessagesEntitymessages,HttpServletRequestrequest){if(!request.getSession().getAttribute("role").toString().equals("管理员")){messages.setUserid((Long)request.getSession().getAttribute("userId"));}EntityWrapper<MessagesEntity>ew=newEntityWrapper<MessagesEntity>();PageUtilspage=messagesService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew,messages),params),params));returnR.ok().put("data",page);}/** * 列表 */@RequestMapping("/lists")publicRlist(MessagesEntitymessages){EntityWrapper<MessagesEntity>ew=newEntityWrapper<MessagesEntity>();ew.allEq(MPUtil.allEQMapPre(messages,"messages"));returnR.ok().put("data",messagesService.selectListView(ew));}/** * 查询 */@RequestMapping("/query")publicRquery(MessagesEntitymessages){EntityWrapper<MessagesEntity>ew=newEntityWrapper<MessagesEntity>();ew.allEq(MPUtil.allEQMapPre(messages,"messages"));MessagesViewmessagesView=messagesService.selectView(ew);returnR.ok("查询留言板成功").put("data",messagesView);}/** * 后端详情 */@RequestMapping("/info/{id}")publicRinfo(@PathVariable("id")Longid){MessagesEntitymessages=messagesService.selectById(id);returnR.ok().put("data",messages);}/** * 前端详情 */@RequestMapping("/detail/{id}")publicRdetail(@PathVariable("id")Longid){MessagesEntitymessages=messagesService.selectById(id);returnR.ok().put("data",messages);}/** * 后端保存 */@RequestMapping("/save")publicRsave(@RequestBodyMessagesEntitymessages,HttpServletRequestrequest){messages.setId(newDate().getTime()+newDouble(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(messages);messagesService.insert(messages);returnR.ok();}/** * 前端保存 */@RequestMapping("/add")publicRadd(@RequestBodyMessagesEntitymessages,HttpServletRequestrequest){messages.setId(newDate().getTime()+newDouble(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(messages);messages.setUserid((Long)request.getSession().getAttribute("userId"));messagesService.insert(messages);returnR.ok();}/** * 修改 */@RequestMapping("/update")publicRupdate(@RequestBodyMessagesEntitymessages,HttpServletRequestrequest){//ValidatorUtils.validateEntity(messages);messagesService.updateById(messages);//全部更新returnR.ok();}/** * 删除 */@RequestMapping("/delete")publicRdelete(@RequestBodyLong[]ids){messagesService.deleteBatchIds(Arrays.asList(ids));returnR.ok();}/** * 提醒接口 */@RequestMapping("/remind/{columnName}/{type}")publicRremindCount(@PathVariable("columnName")StringcolumnName,HttpServletRequestrequest,@PathVariable("type")Stringtype,@RequestParamMap<String,Object>map){map.put("column",columnName);map.put("type",type);if(type.equals("2")){SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");Calendarc=Calendar.getInstance();DateremindStartDate=null;DateremindEndDate=null;if(map.get("remindstart")!=null){IntegerremindStart=Integer.parseInt(map.get("remindstart").toString());c.setTime(newDate());c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate=c.getTime();map.put("remindstart",sdf.format(remindStartDate));}if(map.get("remindend")!=null){IntegerremindEnd=Integer.parseInt(map.get("remindend").toString());c.setTime(newDate());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate=c.getTime();map.put("remindend",sdf.format(remindEndDate));}}Wrapper<MessagesEntity>wrapper=newEntityWrapper<MessagesEntity>();if(map.get("remindstart")!=null){wrapper.ge(columnName,map.get("remindstart"));}if(map.get("remindend")!=null){wrapper.le(columnName,map.get("remindend"));}intcount=messagesService.selectCount(wrapper);returnR.ok().put("count",count);}}

退换图书

package com.controller;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Calendar;import java.util.Map;import java.util.HashMap;import java.util.Iterator;import java.util.Date;import java.util.List;import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import com.baomidou.mybatisplus.mapper.EntityWrapper;import com.baomidou.mybatisplus.mapper.Wrapper;import com.annotation.IgnoreAuth;import com.entity.TuihuantushuEntity;import com.entity.view.TuihuantushuView;import com.service.TuihuantushuService;import com.service.TokenService;import com.utils.PageUtils;import com.utils.R;import com.utils.MD5Util;import com.utils.MPUtil;import com.utils.CommonUtil;/** * 退换图书 */@RestController@RequestMapping("/tuihuantushu")publicclassTuihuantushuController{@AutowiredprivateTuihuantushuServicetuihuantushuService;/** * 后端列表 */@RequestMapping("/page")publicRpage(@RequestParam Map<String,Object>params,TuihuantushuEntitytuihuantushu,HttpServletRequestrequest){StringtableName=request.getSession().getAttribute("tableName").toString();if(tableName.equals("xuesheng")){tuihuantushu.setXuehao((String)request.getSession().getAttribute("username"));}EntityWrapper<TuihuantushuEntity>ew=newEntityWrapper<TuihuantushuEntity>();PageUtilspage=tuihuantushuService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew,tuihuantushu),params),params));returnR.ok().put("data",page);}/** * 前端列表 */@RequestMapping("/list")publicRlist(@RequestParam Map<String,Object>params,TuihuantushuEntitytuihuantushu,HttpServletRequestrequest){EntityWrapper<TuihuantushuEntity>ew=newEntityWrapper<TuihuantushuEntity>();PageUtilspage=tuihuantushuService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew,tuihuantushu),params),params));returnR.ok().put("data",page);}/** * 列表 */@RequestMapping("/lists")publicRlist(TuihuantushuEntitytuihuantushu){EntityWrapper<TuihuantushuEntity>ew=newEntityWrapper<TuihuantushuEntity>();ew.allEq(MPUtil.allEQMapPre(tuihuantushu,"tuihuantushu"));returnR.ok().put("data",tuihuantushuService.selectListView(ew));}/** * 查询 */@RequestMapping("/query")publicRquery(TuihuantushuEntitytuihuantushu){EntityWrapper<TuihuantushuEntity>ew=newEntityWrapper<TuihuantushuEntity>();ew.allEq(MPUtil.allEQMapPre(tuihuantushu,"tuihuantushu"));TuihuantushuViewtuihuantushuView=tuihuantushuService.selectView(ew);returnR.ok("查询退换图书成功").put("data",tuihuantushuView);}/** * 后端详情 */@RequestMapping("/info/{id}")publicRinfo(@PathVariable("id")Longid){TuihuantushuEntitytuihuantushu=tuihuantushuService.selectById(id);returnR.ok().put("data",tuihuantushu);}/** * 前端详情 */@RequestMapping("/detail/{id}")publicRdetail(@PathVariable("id")Longid){TuihuantushuEntitytuihuantushu=tuihuantushuService.selectById(id);returnR.ok().put("data",tuihuantushu);}/** * 后端保存 */@RequestMapping("/save")publicRsave(@RequestBodyTuihuantushuEntitytuihuantushu,HttpServletRequestrequest){tuihuantushu.setId(newDate().getTime()+newDouble(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(tuihuantushu);tuihuantushuService.insert(tuihuantushu);returnR.ok();}/** * 前端保存 */@RequestMapping("/add")publicRadd(@RequestBodyTuihuantushuEntitytuihuantushu,HttpServletRequestrequest){tuihuantushu.setId(newDate().getTime()+newDouble(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(tuihuantushu);tuihuantushuService.insert(tuihuantushu);returnR.ok();}/** * 修改 */@RequestMapping("/update")publicRupdate(@RequestBodyTuihuantushuEntitytuihuantushu,HttpServletRequestrequest){//ValidatorUtils.validateEntity(tuihuantushu);tuihuantushuService.updateById(tuihuantushu);//全部更新returnR.ok();}/** * 删除 */@RequestMapping("/delete")publicRdelete(@RequestBodyLong[]ids){tuihuantushuService.deleteBatchIds(Arrays.asList(ids));returnR.ok();}/** * 提醒接口 */@RequestMapping("/remind/{columnName}/{type}")publicRremindCount(@PathVariable("columnName")StringcolumnName,HttpServletRequestrequest,@PathVariable("type")Stringtype,@RequestParamMap<String,Object>map){map.put("column",columnName);map.put("type",type);if(type.equals("2")){SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");Calendarc=Calendar.getInstance();DateremindStartDate=null;DateremindEndDate=null;if(map.get("remindstart")!=null){IntegerremindStart=Integer.parseInt(map.get("remindstart").toString());c.setTime(newDate());c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate=c.getTime();map.put("remindstart",sdf.format(remindStartDate));}if(map.get("remindend")!=null){IntegerremindEnd=Integer.parseInt(map.get("remindend").toString());c.setTime(newDate());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate=c.getTime();map.put("remindend",sdf.format(remindEndDate));}}Wrapper<TuihuantushuEntity>wrapper=newEntityWrapper<TuihuantushuEntity>();if(map.get("remindstart")!=null){wrapper.ge(columnName,map.get("remindstart"));}if(map.get("remindend")!=null){wrapper.le(columnName,map.get("remindend"));}StringtableName=request.getSession().getAttribute("tableName").toString();if(tableName.equals("xuesheng")){wrapper.eq("xuehao",(String)request.getSession().getAttribute("username"));}intcount=tuihuantushuService.selectCount(wrapper);returnR.ok().put("count",count);}}

上万套源码,每日分享源码,谢谢你的关注和喜欢,需要可以联系主页信息。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 3:21:32

ImDisk虚拟磁盘工具:免费提升Windows文件管理效率的完整指南

ImDisk虚拟磁盘工具&#xff1a;免费提升Windows文件管理效率的完整指南 【免费下载链接】ImDisk ImDisk Virtual Disk Driver 项目地址: https://gitcode.com/gh_mirrors/im/ImDisk 还在为文件访问速度慢而烦恼&#xff1f;或者因为镜像文件无法直接使用而头疼&#xf…

作者头像 李华
网站建设 2026/9/8 20:03:13

3分钟快速上手:智能视频场景检测与自动分割终极指南

3分钟快速上手&#xff1a;智能视频场景检测与自动分割终极指南 【免费下载链接】PySceneDetect :movie_camera: Python and OpenCV-based scene cut/transition detection program & library. 项目地址: https://gitcode.com/gh_mirrors/py/PySceneDetect 还在为手…

作者头像 李华
网站建设 2026/9/10 0:41:46

OCLP-Mod:解锁老旧Mac潜力的完整升级指南

OCLP-Mod&#xff1a;解锁老旧Mac潜力的完整升级指南 【免费下载链接】OCLP-Mod A mod version for OCLP,with more interesting features. 项目地址: https://gitcode.com/gh_mirrors/oc/OCLP-Mod 还在为你的老旧Mac无法安装最新macOS系统而烦恼吗&#xff1f;OCLP-Mod…

作者头像 李华
网站建设 2026/9/9 23:14:02

AI如何帮你解决Spring依赖注入错误:expected at least 1 bean问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Spring Boot应用演示&#xff0c;展示当出现expected at least 1 bean which qualifies as autowire candidate错误时的典型场景。包括&#xff1a;1) 一个接口和它的实现类…

作者头像 李华
网站建设 2026/9/10 8:14:29

Plus Jakarta Sans 字体终极使用指南:从入门到精通

Plus Jakarta Sans 字体终极使用指南&#xff1a;从入门到精通 【免费下载链接】PlusJakartaSans Jakarta Sans is a open-source fonts. Designed for Jakarta "City of collaboration" program in 2020. 项目地址: https://gitcode.com/gh_mirrors/pl/PlusJakart…

作者头像 李华
网站建设 2026/9/10 4:52:07

RpcView终极指南:快速掌握Windows RPC接口分析技巧

RpcView终极指南&#xff1a;快速掌握Windows RPC接口分析技巧 【免费下载链接】RpcView RpcView is a free tool to explore and decompile Microsoft RPC interfaces 项目地址: https://gitcode.com/gh_mirrors/rp/RpcView RpcView是一款免费开源的Windows系统RPC接口…

作者头像 李华