基于javaweb+mysql的springboot+mybatis网上书店管理系统在线购书系统(前台、后台)(javaweb+springboot+thymeleaf+html+mysql)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
前台:购书
后台:管理书、用户、订单发货等
前台
后台
技术框架
JavaWeb SpringBoot MyBatis Thymeleaf html layui JavaScript SpringMVC MySQL
基于javaweb+mysql的SpringBoot+MyBatis网上书店管理系统在线购书系统(前台、后台)(javaweb+springboot+thymeleaf+html+mysql)
@PostMapping("/update1")
public ResultVO updateUser( User record) {
int users =userService.updateByUserId(record);
return new ResultVO(ResultCode.SUCCESS,null);
}*/
/**
* 修改 添加验证注解和RequestBody注解 --By guozongchao
* @param record
* @return
*/
@PostMapping("/update")
public ResultVO updateUser(@RequestBody @Valid User record) {
int users =userService.updateByUserId(record);
return new ResultVO(ResultCode.SUCCESS,null);
}
@GetMapping("/search")
public ResultVO searchUsers(User user, Integer page, Integer limit) {
if (user.getUserName().isEmpty()) {
user.setUserName(null);
}
if (user.getEmail().isEmpty()) {
user.setEmail(null);
}
List<User> users = userService.searchUsers(user, page, limit);
PageInfo pageInfo = new PageInfo(users);
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(), users);
}
}
/**
* @Description: 书籍管理模块控制器
/**
* @Description: 首页商品展示模块控制器
*/
@Controller
@RequestMapping("/index")
public class BookDisplayController {
@Autowired
private BookDisplayService bookDisplayService;
/**
* 处理前台获取所有分类的请求
* @return
*/
@GetMapping("/category")
@ResponseBody
public ResultVO getCategories() {
List<Category> categories = bookDisplayService.getAllCategories();
return new ResultVO(ResultCode.SUCCESS,categories);
}
/**
* 根据前台传来的categoryCode,响应对应的分类的书籍
* 需要进行分页响应
* 如果categoryCode为null,则响应所有书籍
* @param categoryCode 分类代码
* @param page 页码
* @param limit 每页的数量
* @return
*/
@GetMapping("/books")
@ResponseBody
public ResultVO getBooksByCategoryCode(@RequestParam(required = false) String categoryCode, @RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit) {
List<Book> books = bookDisplayService.getBooksByCategoryCode(page==null?1:page, limit==null?10:limit, categoryCode);
PageInfo pageInfo = new PageInfo(books); //获得分页信息
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(),books);
}
/**
* 根据请求的bookId,返回该Id的书籍信息,响应Html视图
* @param bookId
* @return
*/
@GetMapping("/books/details/{bookId}")
public String bookDetailsView(@PathVariable("bookId") Integer bookId, Model model) {
PageInfo pageInfo = new PageInfo(books); //获得分页信息
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(),books);
}
/**
* 根据请求的bookId,返回该Id的书籍信息,响应Html视图
* @param bookId
* @return
*/
@GetMapping("/books/details/{bookId}")
public String bookDetailsView(@PathVariable("bookId") Integer bookId, Model model) {
Book book = bookDisplayService.getBookDetailsByBookId(bookId);
model.addAttribute("book", book);
return "details";
}
/**
* 首页根据书名搜索书籍
* @param bookName
* @return
*/
@GetMapping("/books/search")
@ResponseBody
public ResultVO searchBook(@RequestParam(required = true) String bookName) {
List<Book> books = bookDisplayService.searchBooksByBookName(1, 10, bookName);
PageInfo pageInfo = new PageInfo(books);
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(), books);
}
}
if(user!=null){
throw new CustomizeException(ResultCode.FAILED,"用户名已存在");
}
userMapper.insert(record);
}
@Override
public void adminLogin(Admin admin, HttpSession session) {
}
}
/**
* @Description: 用户中心模块
*/
@Controller
@RequestMapping("/user_center")
public class UserCenterController {
@Autowired
private OrderHandleService orderHandleService;
/**
* 根据用户ID,获取用户订单
* @return
*/
@GetMapping("/orders")
@ResponseBody
public ResultVO getUserOrders(Integer page, Integer limit, HttpSession session) {
User user = (User) session.getAttribute("user");
List<Order> orders = orderHandleService.getOrdersByUserId(user.getUserId(), page, limit);
PageInfo pageInfo = new PageInfo(orders);
return new ResultVO(ResultCode.SUCCESS, (int)pageInfo.getTotal(),orders);
}
}
}
/**
* @Description: 用户管理模块控制器
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 分页获取用户列表
* @param page
* @param limit
* @return
*/
@GetMapping("/list")
public ResultVO getUserList(@RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit) {
List<User> users= userService.selectAll(page,limit);
PageInfo pageInfo = new PageInfo(users);
return new ResultVO(ResultCode.SUCCESS,(int)pageInfo.getTotal(),users);
}
/**
* 删除指定用户ID
* @param userId
* 分页获取用户列表
* @param page
* @param limit
* @return
*/
@GetMapping("/list")
public ResultVO getUserList(@RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit) {
List<User> users= userService.selectAll(page,limit);
PageInfo pageInfo = new PageInfo(users);
return new ResultVO(ResultCode.SUCCESS,(int)pageInfo.getTotal(),users);
}
/**
* 删除指定用户ID
* @param userId
* @return
*/
@DeleteMapping("/list/{userId}")
public ResultVO deleteUser(@PathVariable("userId") Integer userId) {
int users =userService.deleteByUserId(userId);
return new ResultVO(ResultCode.SUCCESS,null);
}
/* 暂时不需要
@PostMapping("/insert")
public ResultVO insertUser(User record) {
int users =userService.insert(record);
return new ResultVO(ResultCode.SUCCESS,null);
}
*/
/* @GetMapping("/search")
public ResultVO searchUserById(Integer userId) {
User users =userService.selectByUserId(userId);
if(users!=null)
return new ResultVO(ResultCode.SUCCESS,users);
else
return new ResultVO(ResultCode.USER_NOT_FOUND,null);
}*/
/* 原来
@PostMapping("/update1")
public ResultVO updateUser( User record) {
int users =userService.updateByUserId(record);
return new ResultVO(ResultCode.SUCCESS,null);
}*/
/**
* 修改 添加验证注解和RequestBody注解 --By guozongchao
* @param record
* @return
*/
@PostMapping("/update")
//跳转用户管理页面
@GetMapping("/user_manage")
public String toUserManage(){
return "admin/user";
}
//跳转书籍管理页面
@GetMapping({"/","/book_manage"})
public String toBookManage(){
return "admin/books";
}
//跳转分类管理页面
@GetMapping("/category_manage")
public String toCategoryManage(){
return "admin/category";
}
//跳转订单管理页面
@GetMapping("/order_manage")
public String toOrderManage(){
return "admin/order";
}
//跳转添加书籍页面
@GetMapping("/add_book")
public String AddBook(){
return "admin/add_book";
}
//跳转后台登录页面
@GetMapping("/login")
public String toAdminLogin(){
return "admin/login";
}
}
/**
* @Description: 登录验证拦截器
* @return
*/
@GetMapping("/books")
@ResponseBody
public ResultVO getBooksByCategoryCode(@RequestParam(required = false) String categoryCode, @RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit) {
List<Book> books = bookDisplayService.getBooksByCategoryCode(page==null?1:page, limit==null?10:limit, categoryCode);
PageInfo pageInfo = new PageInfo(books); //获得分页信息
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(),books);
}
/**
* 根据请求的bookId,返回该Id的书籍信息,响应Html视图
* @param bookId
* @return
*/
@GetMapping("/books/details/{bookId}")
public String bookDetailsView(@PathVariable("bookId") Integer bookId, Model model) {
Book book = bookDisplayService.getBookDetailsByBookId(bookId);
model.addAttribute("book", book);
return "details";
}
/**
* 首页根据书名搜索书籍
* @param bookName
* @return
*/
@GetMapping("/books/search")
@ResponseBody
public ResultVO searchBook(@RequestParam(required = true) String bookName) {
List<Book> books = bookDisplayService.searchBooksByBookName(1, 10, bookName);
PageInfo pageInfo = new PageInfo(books);
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(), books);
}
}
//密码错误
throw new CustomizeException(ResultCode.PASSWORD_ERROR);
}
session.setAttribute("user",user);
}
/**
* 用户注册处理
* @param record
*/
@Override
public void userRegister(User record) {
User user=userMapper.selectByUserName(record.getUserName());
if(user!=null){
throw new CustomizeException(ResultCode.FAILED,"用户名已存在");
}
userMapper.insert(record);
}
@Override
public void adminLogin(Admin admin, HttpSession session) {
}
}
/**
/**
* 处理前台获取所有分类的请求
* @return
*/
@GetMapping("/category")
@ResponseBody
public ResultVO getCategories() {
List<Category> categories = bookDisplayService.getAllCategories();
return new ResultVO(ResultCode.SUCCESS,categories);
}
/**
* 根据前台传来的categoryCode,响应对应的分类的书籍
* 需要进行分页响应
* 如果categoryCode为null,则响应所有书籍
* @param categoryCode 分类代码
* @param page 页码
* @param limit 每页的数量
* @return
*/
@GetMapping("/books")
@ResponseBody
public ResultVO getBooksByCategoryCode(@RequestParam(required = false) String categoryCode, @RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit) {
List<Book> books = bookDisplayService.getBooksByCategoryCode(page==null?1:page, limit==null?10:limit, categoryCode);
PageInfo pageInfo = new PageInfo(books); //获得分页信息
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(),books);
}
/**
* 根据请求的bookId,返回该Id的书籍信息,响应Html视图
* @param bookId
* @return
*/
@GetMapping("/books/details/{bookId}")
public String bookDetailsView(@PathVariable("bookId") Integer bookId, Model model) {
Book book = bookDisplayService.getBookDetailsByBookId(bookId);
model.addAttribute("book", book);
return "details";
}
/**
* 首页根据书名搜索书籍
* @param bookName
* @return
*/
@GetMapping("/books/search")
@ResponseBody
public ResultVO searchBook(@RequestParam(required = true) String bookName) {
List<Book> books = bookDisplayService.searchBooksByBookName(1, 10, bookName);
PageInfo pageInfo = new PageInfo(books);
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(), books);
}
}
}
/**
* @Description: 用户管理模块控制器
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 分页获取用户列表
* @param page
* @param limit
* @return
*/
@GetMapping("/list")
public ResultVO getUserList(@RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit) {
List<User> users= userService.selectAll(page,limit);
PageInfo pageInfo = new PageInfo(users);
return new ResultVO(ResultCode.SUCCESS,(int)pageInfo.getTotal(),users);
}
@PostMapping("/delete")
public ResultVO categoryDelete(String categoryCode)
{
int categories = categoryService.deleteByByCategoryCode(categoryCode);
return new ResultVO(ResultCode.SUCCESS,null);
}
//添加验证
@PostMapping("/insert")
public ResultVO categoryInsert(@Valid Category record)
{
int categories = categoryService.insert(record);
return new ResultVO(ResultCode.SUCCESS,null);
}
//添加验证
@PostMapping("/update")
public ResultVO categoryUpdate(@Valid Category record)
{
int categories = categoryService.updateByCategoryCode(record);
return new ResultVO(ResultCode.SUCCESS,null);
}
//添加分页
@GetMapping("/searchall")
public ResultVO categorySearchAll(Integer page,Integer limit)
{
List<Category> categories = categoryService.selectAll(page==null?0:page,limit==null?10:limit);
if(categories.size()!=0)
return new ResultVO(ResultCode.SUCCESS,categories);
else
return new ResultVO(ResultCode.RECORD_NOT_FOUND,null);
}
}
/**
* @param page
* @param limit
* @return
*/
@GetMapping("/search")
public ResultVO searchBooks(Book book,Integer page, Integer limit) {
if(book.getBookName().isEmpty()){
book.setBookName(null);
}
if(book.getIsbn().isEmpty()){
book.setIsbn(null);
}
List<Book> books = bookService.searchBooks(book, page, limit);
PageInfo pageInfo = new PageInfo(books);
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(), books);
}
}
/**
* @Description: 首页商品展示模块控制器
*/
@Controller
@RequestMapping("/index")
public class BookDisplayController {
@Autowired
private BookDisplayService bookDisplayService;
/**
/**
* 根据前台传来的categoryCode,响应对应的分类的书籍
* 需要进行分页响应
* 如果categoryCode为null,则响应所有书籍
* @param categoryCode 分类代码
* @param page 页码
* @param limit 每页的数量
* @return
*/
@GetMapping("/books")
@ResponseBody
public ResultVO getBooksByCategoryCode(@RequestParam(required = false) String categoryCode, @RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit) {
List<Book> books = bookDisplayService.getBooksByCategoryCode(page==null?1:page, limit==null?10:limit, categoryCode);
PageInfo pageInfo = new PageInfo(books); //获得分页信息
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(),books);
}
/**
* 根据请求的bookId,返回该Id的书籍信息,响应Html视图
* @param bookId
* @return
*/
@GetMapping("/books/details/{bookId}")
public String bookDetailsView(@PathVariable("bookId") Integer bookId, Model model) {
Book book = bookDisplayService.getBookDetailsByBookId(bookId);
model.addAttribute("book", book);
return "details";
}
/**
* 首页根据书名搜索书籍
* @param bookName
* @return
*/
@GetMapping("/books/search")
@ResponseBody
public ResultVO searchBook(@RequestParam(required = true) String bookName) {
List<Book> books = bookDisplayService.searchBooksByBookName(1, 10, bookName);
PageInfo pageInfo = new PageInfo(books);
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(), books);
}
}
/**
* @Description: 全局异常处理
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 自定义异常处理
* @param e
* @return
*/
@ExceptionHandler(CustomizeException.class)
public ResultVO customizeExceptionHandler(CustomizeException e){
log.error(e.getMessage());
return new ResultVO(e.getCode(),e.getMsg(),null);
}
/**
* 参数校验异常处理和数据绑定异常处理
* @param e
* @return
*/
@ExceptionHandler(value = {MethodArgumentNotValidException.class, BindException.class})
public ResultVO methodArgumentNotValidExceptionHandler(Exception e) {
BindingResult bindingResult;
if(e instanceof MethodArgumentNotValidException){
MethodArgumentNotValidException ex= (MethodArgumentNotValidException)e;
bindingResult = ex.getBindingResult();
}else {
BindException ex=(BindException)e;
bindingResult = ex.getBindingResult();
}
ObjectError error = bindingResult.getAllErrors().get(0);
return new ResultVO(ResultCode.ARGUMENT_NOT_VALID,error.getDefaultMessage(),null);
}
* 批量删除购物车
* @param cartIds
* @return
*/
@DeleteMapping("/list")
public ResultVO deleteCartItem(@RequestBody int[] cartIds) {
shoppingCartService.deleteShoppingCarts(cartIds);
return new ResultVO(ResultCode.SUCCESS);
}
}
/**
* @Description: 用户管理模块控制器
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 分页获取用户列表
* @param page
* @param limit
* @return
*/
@Override
public void userRegister(User record) {
User user=userMapper.selectByUserName(record.getUserName());
if(user!=null){
throw new CustomizeException(ResultCode.FAILED,"用户名已存在");
}
userMapper.insert(record);
}
@Override
public void adminLogin(Admin admin, HttpSession session) {
}
}
/**
* @Description: 用户中心模块
*/
@Controller
@RequestMapping("/user_center")
public class UserCenterController {
@Autowired
private OrderHandleService orderHandleService;
/**
* 根据用户ID,获取用户订单
* @return
*/
@GetMapping("/orders")
@ResponseBody
public ResultVO getUserOrders(Integer page, Integer limit, HttpSession session) {
User user = (User) session.getAttribute("user");
List<Order> orders = orderHandleService.getOrdersByUserId(user.getUserId(), page, limit);
PageInfo pageInfo = new PageInfo(orders);