作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

文末获取源码

项目编号:KS-029

一,项目简介

本项目基于Springboot+vue实现的前后端分离的二手图书交易系统,实现的功能较为简单。用户登陆系统后可以进行图书的发布和浏览,并可以进行全文检索,别的用户可以查看详情联系发布人进行线下交易。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

三,系统展示

用户登陆

首页展示

图书列表

图书详情

个人中心:可以发布图书和管理己发布的图片

添加图书

修改密码

四,核心代码展示

package com.znz.backend.wj.contorller;import com.znz.backend.result.Result;
import com.znz.backend.wj.Service.BookService;
import com.znz.backend.wj.bean.Book;
import net.coobird.thumbnailator.Thumbnails;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Random;/*** @author znz* @create 2020/02/07/10:52*/
@RestController
public class LibraryController {@Resource(name="bookService")private BookService bookService;@Value("${fileupload.path}")private String path;//返回所有的图书@CrossOrigin@GetMapping("api/books")public List<Book>findAll() throws Exception{return bookService.findAll();}//根据用户账号返回所有的书@CrossOrigin@PostMapping("api/booksByUid")public List<Book>findAllByUid(@RequestBody Book book){return bookService.findAllByUid(book.getUid());}//根据种类查询图书@CrossOrigin@GetMapping("api/categories/{cid}/books")public List<Book> listByCategory(@PathVariable("cid") String cid) throws Exception {if (!cid.equals("0")) {return bookService.findAllByCategory(cid);} else {return findAll();}}//根据种类和用户名查询用户添加的图书@CrossOrigin@PostMapping("api/categories/uid/UserBooks")public List<Book> listByCategoryAndUid(@RequestBody Book book){System.out.println(book);if (!book.getCid().equals("0")) {return bookService.findAllByCategoryAndUid(book.getCid(),book.getUid());} else {return bookService.findAllByUid(book.getUid());}}//根据id删除图书@CrossOrigin@PostMapping("api/delete")public Result deleteBookById(@RequestBody Book book){int num=bookService.deleteBookById(book.getId());if(num==0){return new Result(400);} else {return new Result(200);}}//根据id和用户编号删除图书,并删除本地服务器存储的图片@PostMapping("api/deleteById")@CrossOriginpublic Result deleteBookByIdAndUid(@RequestBody Book book){int num=bookService.deleteBookByIdAndUid(book);if(num==0){return new Result(400);} else {if(!book.getCover().equals("")){String cover=book.getCover().split("/api/file/")[1];deleteImg(cover);}if(!book.getImg_1().equals("")){String img_1=book.getImg_1().split("/api/file/")[1];deleteImg(img_1);}if(!book.getImg_2().equals("")){String img_2=book.getImg_2().split("/api/file/")[1];deleteImg(img_2);}if(!book.getImg_3().equals("")){String img_3=book.getImg_3().split("/api/file/")[1];deleteImg(img_3);}if(!book.getImg_4().equals("")){String img_4=book.getImg_4().split("/api/file/")[1];deleteImg(img_4);}if(!book.getImg_5().equals("")){String img_5=book.getImg_5().split("/api/file/")[1];deleteImg(img_5);}return new Result(200);}}@CrossOriginpublic void deleteImg(String imgName){String imgUrl="/home/Youth-imgs/"+imgName;File img=new File(imgUrl);img.delete();}//添加一本图书@CrossOrigin@PostMapping("api/insert")public Result insertBook(@RequestBody Book book){System.out.println(book);if(bookService.insertBook(book)==0){return new Result(400);} else {return new Result(200);}}//根据书名查找图书//使用form表单传递数据@CrossOrigin@PostMapping("api/search")public List<Book> searchBooksByTitle(@RequestParam Map<String,Object> keywords, HttpSession session){return bookService.finAllByTitle((String)keywords.get("keywords"));}//上传图片@CrossOrigin@PostMapping("api/uploadImg")public String coversUpload(MultipartFile file) throws Exception {//查看图片类型String type=file.getContentType().split("/")[1];if(type==null||file.getSize()>1048576){return null;}String folder = path;File imageFolder = new File(folder);File f = new File(imageFolder, getRandomString(10) + file.getOriginalFilename().substring(file.getOriginalFilename().length() - 4));if (!f.getParentFile().exists())//如果不存在文件则创建文件夹f.getParentFile().mkdirs();try {//存入图片file.transferTo(f);//对存入的图片进行压缩,并转换为jpeg格式Thumbnails.of(f).outputFormat("jpg").scale(0.5f)//图片比例压缩.outputQuality(0.5f)//图片清晰度压缩.toFile(f.getPath().split("\\.")[0]+".jpg");if(!type.equals("jpeg")){//删除图片f.delete();}String imgURL = "http://localhost:8443/api/file/" + f.getName().split("\\.")[0]+".jpg";return imgURL;} catch (IOException e) {e.printStackTrace();return "";}}//删除图片@CrossOrigin@PostMapping("api/deleteImg")public void deleteImg(@RequestParam Map<String,Object> requestMap){String imgName=requestMap.get("imgUrl").toString().split("/api/file/")[1];deleteImg(imgName);}//生成length个随机数组成的字符串public String getRandomString(int length) {String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";Random random = new Random();StringBuffer sb = new StringBuffer();for (int i = 0; i < length; i++) {int number = random.nextInt(base.length());sb.append(base.charAt(number));}return sb.toString();}}
package com.znz.backend.wj.contorller;/*** @author znz* @create 2020/01/27/16:00*/import com.znz.backend.result.Result;
import com.znz.backend.wj.Service.UserService;
import com.znz.backend.wj.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import java.util.Map;@Controller
public class UserController {//Mybatis操作数据库@Resource(name = "userService")private UserService userService;//登录账号//注解@CrossOrigin解决跨域问题//@CrossOrigin@CrossOrigin@PostMapping(value = "api/login")@ResponseBodypublic String login(@RequestBody User requestUser) {return userService.login(requestUser);}//注册账号
//    @PostMapping(value="api/register")
//    @ResponseBody
//    public Boolean register(@RequestBody User requestUser){
//        return userService.register(requestUser);
//    }//修改密码@PostMapping(value = "api/changePassword")@ResponseBodypublic Result ChangePassword(@RequestParam Map<String, Object> requestMap) {return userService.changePassword(requestMap);}//查找账户是否存在@PostMapping(value = "api/selectUser")@ResponseBodypublic Boolean selectUser(@RequestParam Map<String, Object> requestMap) {return userService.selectUser(requestMap);}
}
package com.znz.backend.wj.dao;import com.znz.backend.wj.bean.Book;
import com.znz.backend.wj.bean.Category;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;
import org.springframework.stereotype.Repository;import java.util.List;/*** @author znz* @create 2020/02/06/23:21*/
@Mapper
@Repository(value = "bookMapper")
public interface BookMapper {//根据书的种类找到这一类型的所有书@Select("select * from book\n" +"where book.cid=#{_parameter}")List<Book> findAllByCategory(String cid);根据书的种类和用户账户找到这一类型的所有书@Select("Select * from book where book.cid=#{param1} and book.uid=#{param2}")List<Book>findAllByCategoryAndUid(String cid,String uid);//根据书名模糊找到书@Select("select * from book\n" +"where book.title like '%${_parameter}%'")List<Book> findAllByTitle(String title);//找到所有的书@Select("select * from book")List<Book> findAllBooks();//根据用户账号返回所有的书@Select("Select * from book where uid=#{_parameter}")List<Book> findAllBooksByUid(String uid);//根据id删除书籍@Delete("delete  from book where id=#{id}")int deleteBookById(int id);//添加图书@Insert("insert into znz.book(cover,title,author,date,price,newOld,contact,phone,qq,weChat,img_1,img_2,img_3,img_4,img_5,abs,cid,uid)\n" +"values(#{param1},#{param2},#{param3},#{param4},#{param5},#{param6},#{param7},#{param8},#{param9},#{param10},#{param11},#{param12},#{param13},#{param14}, #{param15},#{param16},#{param17},#{param18})")int insertBook(String cover,String title,String author,String date,String price,String newOld,String contact,String phone,String qq,String weChat,String img_1,String img_2,String img_3,String img_4,String img_5,String abs,String cid,String uid);//根据用户账号和书的id删除书籍@Delete("delete  from book where id=#{param1} and uid=#{param2}")int deleteBookByIdAndUid(int id,String uid);}
package com.znz.backend.wj.Service;import com.znz.backend.wj.bean.Book;
import com.znz.backend.wj.bean.Category;
import com.znz.backend.wj.dao.BookMapper;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;/*** @author znz* @create 2020/02/07/10:38*/@Service(value = "bookService")
public class BookService {@Resource(name = "bookMapper")private BookMapper bookMapper;@Resource(name = "categoryService")private CategoryService categoryService;/*******查询******///返回所有的图书public List<Book> findAll() {return bookMapper.findAllBooks();}//根据用户账号返回所有的书public List<Book> findAllByUid(String uid) {return bookMapper.findAllBooksByUid(uid);}//根据书的种类返回所有的书public List<Book> findAllByCategory(String cid) {return bookMapper.findAllByCategory(cid);}//根据书的种类和用户账户返回所有的书public List<Book> findAllByCategoryAndUid(String cid,String uid){return bookMapper.findAllByCategoryAndUid(cid,uid);}//根据书名找到所有的数据public List<Book> finAllByTitle(String title) {return bookMapper.findAllByTitle(title);}//根据id删除图书public int deleteBookById(int id) {return bookMapper.deleteBookById(id);}//添加一本书public int insertBook(Book book) {return bookMapper.insertBook(book.getCover(), book.getTitle(), book.getAuthor(), book.getDate(), book.getPrice(), book.getNewOld(), book.getContact(), book.getPhone(), book.getQq(), book.getWeChat(), book.getImg_1(), book.getImg_2(), book.getImg_3(), book.getImg_4(), book.getImg_5(), book.getAbs(), book.getCid(), book.getUid());}//根据用户账号和书的id删除书籍public int deleteBookByIdAndUid(Book book) {return bookMapper.deleteBookByIdAndUid(book.getId(), book.getUid());}
}

五,项目总结

本项目结构简单,代码简洁,比较适合做课程设计或期未作业使用,也可以在这个基础上进行功能扩展和增加,实现一个比较完整的毕业设计系统

基于Springboot+vue实现前后端分离二手图书交易相关推荐

  1. shiro+php,一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

    一.前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 c ...

  2. 基于Springboot+Vue实现前后端分离商城管理系统

    项目编号:BS-SC-030 一,项目简介 新新商城,一款基于 Springboot+Vue 的电商项目,前后端分离项目.完整的实现了一个商城系统应有的基本功能,包括但不限于以下主要功能模块: 前端商 ...

  3. 基于springboot+vue的前后端分离商城系统

    springboot前后端分离商城 介绍 springboot前后端分离商城 本项目由本人根据教程实现的一个springboot项目,基本已实现项目,但是本人希望加入自己的小功能, 请期待下一次的更新 ...

  4. 基于SpringBoot+Vue的前后端分离的博客管理系统

    菜单 首页 写文章 内容管理 博客管理 相册管理 归档 登录.注册 (项目整合了shiro+jwt+redis,用户未登录不能发布博客.内容管理.相册.归档等功能) 文章​​​​​​​末尾赋前后端代码 ...

  5. 在线租房|基于Springboot+Vue实现前后端分离的租房系统

    作者简介:全栈开发工程,从事Java.Python.前端.小程序方面的开发和研究,对大数据应用与开发比较感兴趣, 主要内容:Java项目.前端项目.Python项目.小程序开发.大数据项目.单片机 收 ...

  6. 社区团购|生鲜团购|基于Springboot+Vue实现前后端分离社区团购

    作者主页:编程千纸鹤 作者简介:Java.前端.Python开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发.毕业设计开发.面试技术整理.最新技术分享 收藏点赞不迷路  关注作者有好处 ...

  7. 基于SpringBoot+Vue的前后端分离开发汽车之家资讯论坛系统设计与实现

    演示地址:传送门 http://101.43.254.35/ (用户名:admin 密码:1) 废话不多说,直接上实际效果图 系统首页 系统首页桌面,顶部依次为系统Logo.全局搜索框(支持模糊查询动 ...

  8. 基于SpringBoot+vue的前后端分离学生成绩管理系统的设计与实现--毕业设计

    开发环境 JAVA8.MySQL5.7.SpringBoot2.1.0.Vue.ElementUI.JPA 主要功能 学生信息:学号.姓名.性别.联系方式.班级. 成绩管理:学号.课程编号.成绩 班级 ...

  9. 基于SSM+SpringBoot+Vue+ElementUI前后端分离的校园岗位招聘就业管理系统

    运行视频 基于SSM+SpringBoot+Vue+ElementUI前后端分离的校园岗位招聘就业管理系统 项目运行截图 学生管理 添加学生 学生信息 教师管理 教师信息 实习基地 公告信息 公司管理 ...

最新文章

  1. 线程间操作无效: 从不是创建控件的线程访问它
  2. QT的QSqlField类的使用
  3. 近期找工作无果的一些感想
  4. 案例7-1 模拟EXCEL排序 (25 分)(根据结构体某一元素排序)
  5. Element-UI合集之el-select
  6. Shader入门精要-1-渲染流水线数学基础
  7. Android简单实现本地图片和视频选择器功能
  8. 微处理器 微型计算机 单片机之间有何区别,微处理器,微计算机,微处理机,CPU,单片机,它们之间有何区别...
  9. UT000020: Connection terminated as request was larger than 10485760
  10. 《管理学》第七章 激励
  11. android 微博sdk 集成 文件不存在(8998) 您所访问的站点在新浪微博的认证失败,错误码 21322
  12. firebox安装selenium和firebug各种问题解决办法
  13. Excel将其他单元格的数据合并成一个单元格
  14. SpringBoot从入门到精通教程(三十一)- 爬虫框架集成
  15. C++简单贪吃蛇游戏——入门游戏编程(详细)
  16. js引用类型之RegExp类型-new RegExp()
  17. python基础教程视频纸飞机_叠飞机怎么叠
  18. 组态王如何让计算机关机,实用组态王命令语言
  19. JavDroider的作品展示
  20. 10-10 查询选修课程超过2门且成绩都在80分以上的学生

热门文章

  1. (入门级web应用)小书签收集站开发日志(一)--项目规划及最基本功能实现
  2. 如何更改vmware的网络模式
  3. HMC7044调试说明
  4. Java好学吗,我们怎么才能学好Java
  5. spss分组统计的方法
  6. 光纤信号衰减的原理及分析
  7. CAD文件怎么转成低版本?教你两个小妙招
  8. 使用开源实时监控系统 HertzBeat 5分钟搞定 Mysql 数据库监控告警
  9. [vue] 无缝滚动 vue-seamless-scroll 滚动表格
  10. linux中cp命令详解