Java Project: Book Management System (java+SpringBoot+html+ThymeLeaf+Bootstrap+maven+mysql)

Get the source code: Download it from "Resources" on the homepage of the blog!

Project Introduction

The project is divided into two roles: administrator and reader. The main functions are:

1. Log in, log out, change password
2. The main functions of the administrator include: book management, reader management, borrowing and returning management. Add, delete, modify and check book information, check readers, check borrowing records, etc.;

3. Readers' query and query on book information, modify personal information, and check borrowing records

A total of 7 tables;

environmental needs

1. Operating environment: preferably java jdk 1.8, we are running on this platform. Other versions are also theoretically possible.
2. IDE environment: IDEA, Eclipse, Myeclipse can be used. IDEA is recommended;
3. Tomcat environment: Tomcat 7.x, 8.x, 9.x versions are available
4. Hardware environment: Windows 7/8/10 with more than 1G memory; or Mac OS;
5. Maven project: Yes; Check whether pom.xml is included in the source code directory; if so, it is a maven project, otherwise it is a non-maven project

6. Database: MySql version 8.0;

technology stack

Database: mysql5.7
Backend Framework: SpringBoot
HTML Template: ThymeLeaf
Persistence Layer: Mybatis
UI: Bootstrap

Login Authentication and User Permissions: SpringSecurity

Instructions for use

This project is managed by maven, and the detailed installation tutorial is Baidu
1. You need to download the mysql graphical management tool (such as Navicat), create a new database library, right-click the database --> run the library.sql script in the
project 2. Open the project (idea or Eclipse can be used, but you need to configure the maven environment), open src/main/resources/application.yml, and change the username and password of the database to your own mysql username and password
3. Find the BookmanagerApplication class and run the main method, open the browser server, enter localhost:8080 in the URL bar to access the system

4. If you don't want to open the project with IDE but want to run it directly, open cmd in the directory and type mvn package command, and then the corresponding jar package will be generated in the target/ directory, use "java -jar jar package name in cmd" ” to run

Precautions

1. Higher versions of mysql may report a null pointer error when logging in. If there is a problem, it is recommended to install and use mysql5.7 version

 

 

 

 

 

 

User management control layer:

/**
 * @Description 用户管理
 * @Author by yy
 */
@Api(tags = "用户管理")
@RestController
@RequestMapping("/user")
public class UsersController {

    @Autowired
    private UserService userService;

    @ApiOperation("用户列表")
    @PostMapping("/list")
    public R getUsers(@RequestBody PageIn pageIn) {
        if (pageIn == null) {
            return R.fail(CodeEnum.PARAM_ERROR);
        }
        // 封装分页出参对象
        PageInfo<Users> userList = userService.getUserList(pageIn);
        PageOut pageOut = new PageOut();
        pageOut.setCurrPage(userList.getPageNum());
        pageOut.setPageSize(userList.getPageSize());
        pageOut.setTotal((int) userList.getTotal());
        List<UserOut> outs = new ArrayList<>();
        for (Users users : userList.getList()) {
            UserOut out = new UserOut();
            BeanUtils.copyProperties(users,out);
            out.setIdent(ConvertUtil.identStr(users.getIdentity()));
            out.setBirth(DateUtil.format(users.getBirthday(),Constants.DATE_FORMAT));
            outs.add(out);
        }
        pageOut.setList(outs);
        return R.success(CodeEnum.SUCCESS,pageOut);
    }


    /**
     * 添加读者操作
     * @param users
     * @return
     */
    @ApiOperation("添加读者")
    @ResponseBody
    @PostMapping("/addReader")
    public R addReader(Users users) {
        if (users == null) {
            return R.fail(CodeEnum.PARAM_ERROR);
        }
        if(StringUtils.isEmpty(users.getAvatar())) {
            return R.fail(CodeEnum.USER_HEAD_PIC_ERROR);
        }
        if(StringUtils.isEmpty(users.getUsername())) {
            return R.fail(CodeEnum.USERNAME_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(users.getNickname())) {
            return R.fail(CodeEnum.NICKNAME_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(users.getTel())) {
            return R.fail(CodeEnum.USER_MOBILE_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(users.getEmail())) {
            return R.fail(CodeEnum.USER_EMAIL_NOT_EXIST_ERROR);
        }
        Users byUsername = userService.findByUsername(users.getUsername());
        if(byUsername!=null){
            return R.fail(CodeEnum.USER_NAME_IS_EXIST_ERROR);
        }
        // 读者默认是普通用户
        users.setIsAdmin(1);
        Users users1 = userService.addUser(users);
        if(users1==null){
            return R.fail(CodeEnum.USER_ADD_ERROR);
        }
        return R.success(CodeEnum.SUCCESS);
    }


    /**
     * 编辑用户操作
     * @param users
     * @return
     */
    @ApiOperation("编辑用户")
    @ResponseBody
    @PostMapping("/edit")
    public R modifyUsers(Users users) {
        if (users == null) {
            return R.fail(CodeEnum.PARAM_ERROR);
        }
        if(StringUtils.isEmpty(users.getAvatar())) {
            return R.fail(CodeEnum.USER_HEAD_PIC_ERROR);
        }
        if(StringUtils.isEmpty(users.getUsername())) {
            return R.fail(CodeEnum.USERNAME_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(users.getNickname())) {
            return R.fail(CodeEnum.NICKNAME_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(users.getTel())) {
            return R.fail(CodeEnum.USER_MOBILE_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(users.getEmail())) {
            return R.fail(CodeEnum.USER_EMAIL_NOT_EXIST_ERROR);
        }
        Users byUsername = userService.findByUsername(users.getUsername());
        if(byUsername!=null){
            if(!byUsername.getId().equals(users.getId())){
                return R.fail(CodeEnum.USER_NAME_IS_EXIST_ERROR);
            }
        }
        if(!userService.updateUser(users)){
            return R.fail(CodeEnum.USER_EDIT_ERROR);
        }
        return R.success(CodeEnum.SUCCESS);
    }


    @ApiOperation("用户详情")
    @GetMapping("/detail")
    public R userDetail(Integer id) {
        Users user = userService.findUserById(id);
        if (user!=null) {
            UserOut out = new UserOut();
            BeanUtils.copyProperties(user,out);
            out.setBirth(DateUtil.format(user.getBirthday(),Constants.DATE_FORMAT));
            out.setIdent(ConvertUtil.identStr(user.getIdentity()));
            return R.success(CodeEnum.SUCCESS,out);
        }

        return R.fail(CodeEnum.NOT_FOUND);
    }

    @ApiOperation("删除用户")
    @GetMapping("/delete")
    public R delUsers(Integer id) {
        userService.deleteUser(id);
        return R.success(CodeEnum.SUCCESS);
    }

    @ApiOperation("获取当前用户登陆信息")
    @GetMapping("/currUser")
    public R getCurrUser() {
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        if (principal!=null) {
            Map<String,Object> map = BeanUtil.beanToMap(principal);
            String username = (String) map.get("username");
            if (StrUtil.isNotBlank(username)) {
                Users users = userService.findByUsername(username);
                UserOut out = new UserOut();
                BeanUtils.copyProperties(users,out);
                out.setBirth(DateUtil.format(users.getBirthday(),Constants.DATE_FORMAT));
                Integer identity = users.getIdentity();
                String ident = "";
                if (identity == Constants.STUDENT) {
                    ident = Constants.STU_STR;
                }else if (identity == Constants.TEACHER) {
                    ident = Constants.TEA_STR;
                }else if (identity == Constants.OTHER) {
                    ident = Constants.OTHER_STR;
                }else if (identity == Constants.ADMIN) {
                    ident = Constants.ADMIN_STR;
                }
                out.setIdent(ident);
                return R.success(CodeEnum.SUCCESS,out);
            }
        }
        return R.fail(CodeEnum.USER_NOT_FOUND);
    }
}

Borrowing management control layer:

/**
 * @Description 借阅管理
 * @Author by yy
 */
@Api(tags = "借阅管理")
@RestController
@RequestMapping("/borrow")
public class BorrowController {

    @Autowired
    private BorrowService borrowService;

    @Autowired
    private BookService bookService;

    @ApiOperation("借阅列表")
    @GetMapping("/list")
    public R getBorrowList(Integer userId) {
        return R.success(CodeEnum.SUCCESS,borrowService.findAllBorrowByUserId(userId));
    }

    @ApiOperation("借阅图书")
    @PostMapping("/add")
    public R addBorrow(@RequestBody Borrow borrow) {
        Integer result = borrowService.addBorrow(borrow);
        if (result == Constants.BOOK_BORROWED) {
            return R.success(CodeEnum.BOOK_BORROWED);
        }else if (result == Constants.USER_SIZE_NOT_ENOUGH) {
            return R.success(CodeEnum.USER_NOT_ENOUGH);
        }else if (result == Constants.BOOK_SIZE_NOT_ENOUGH) {
            return R.success(CodeEnum.BOOK_NOT_ENOUGH);
        }
        return R.success(CodeEnum.SUCCESS,Constants.OK);
    }

    @ApiOperation("编辑借阅")
    @PostMapping("/update")
    public R modifyBorrow(@RequestBody Borrow borrow) {
        return R.success(CodeEnum.SUCCESS,borrowService.updateBorrow(borrow));
    }


    @ApiOperation("借阅详情")
    @GetMapping("/detail")
    public R borrowDetail(Integer id) {
        return R.success(CodeEnum.SUCCESS,borrowService.findById(id));
    }

    @ApiOperation("删除归还记录")
    @GetMapping("/delete")
    public R delBorrow(Integer id) {
        borrowService.deleteBorrow(id);
        return R.success(CodeEnum.SUCCESS);
    }


    @ApiOperation("已借阅列表")
    @GetMapping("/borrowed")
    public R borrowedList(Integer userId) {
        List<BackOut> outs = new ArrayList<>();
        if (userId!=null&&userId>0) {
            // 获取所有 已借阅 未归还书籍
            List<Borrow> borrows = borrowService.findBorrowsByUserIdAndRet(userId, Constants.NO);
            for (Borrow borrow : borrows) {
                BackOut backOut = new BackOut();
                BookOut out = bookService.findBookById(borrow.getBookId());
                BeanUtils.copyProperties(out,backOut);

                backOut.setBorrowTime(DateUtil.format(borrow.getCreateTime(),Constants.DATE_FORMAT));

                String endTimeStr = DateUtil.format(borrow.getEndTime(), Constants.DATE_FORMAT);
                backOut.setEndTime(endTimeStr);
                // 判断是否逾期
                String toDay = DateUtil.format(new Date(), Constants.DATE_FORMAT);
                int i = toDay.compareTo(endTimeStr);
                if (i>0) {
                    backOut.setLate(Constants.YES_STR);
                }else {
                    backOut.setLate(Constants.NO_STR);
                }

                outs.add(backOut);
            }
        }

        return R.success(CodeEnum.SUCCESS,outs);
    }

    @ApiOperation("归还书籍")
    @PostMapping("/ret")
    public R retBook(Integer userId, Integer bookId) {
        // 归还图书
        borrowService.retBook(userId,bookId);
        return R.success(CodeEnum.SUCCESS);
    }

}

Library management control layer:

/**
 * @Description 图书管理
 * @Author by yy
 */
@Api(tags = "图书管理")
@RestController
@RequestMapping("/book")
public class BookController {

    @Autowired
    private BookService bookService;

    @ApiOperation("图书搜索列表")
    @PostMapping("/list")
    public R getBookList(@RequestBody PageIn pageIn) {
        if (pageIn == null) {
            return R.fail(CodeEnum.PARAM_ERROR);
        }
        return R.success(CodeEnum.SUCCESS,bookService.getBookList(pageIn));
    }

    /**
     * 添加图片操作
     * @param book
     * @return
     */
    @ApiOperation("添加图书")
    @ResponseBody
    @PostMapping("/add")
    public R addBook(Book book) {
        if(StringUtils.isEmpty(book.getName())){
            return R.fail(CodeEnum.BOOK_NAME_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(book.getIsbn())){
            return R.fail(CodeEnum.BOOK_ISBN_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(book.getPic())){
            return R.fail(CodeEnum.BOOK_IMAGE_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(book.getAuthor())){
            return R.fail(CodeEnum.BOOK_AUTHOR_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(book.getType())){
            return R.fail(CodeEnum.BOOK_TYPE_NOT_EXIST_ERROR);
        }
        BookOut bookByIsbn = bookService.findBookByIsbn(book.getIsbn());
        if(bookByIsbn.getName()!=null){
            return R.fail(CodeEnum.BOOK_ISBN_EXIST_ERROR);
        }
        if(bookService.addBook(book)==null){
            return R.fail(CodeEnum.BOOK_ADD_ERROR);
        }
        return R.success(CodeEnum.SUCCESS);
    }

    /**
     * 编辑图书
     * @param book
     * @return
     */
    @ApiOperation("编辑图书")
    @ResponseBody
    @PostMapping("/edit")
    public R editBook(Book book) {
        if(StringUtils.isEmpty(book.getName())){
            return R.fail(CodeEnum.BOOK_NAME_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(book.getIsbn())){
            return R.fail(CodeEnum.BOOK_ISBN_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(book.getPic())){
            return R.fail(CodeEnum.BOOK_IMAGE_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(book.getAuthor())){
            return R.fail(CodeEnum.BOOK_AUTHOR_NOT_EXIST_ERROR);
        }
        if(StringUtils.isEmpty(book.getType())){
            return R.fail(CodeEnum.BOOK_TYPE_NOT_EXIST_ERROR);
        }
        BookOut bookByIsbn = bookService.findBookByIsbn(book.getIsbn());
        if(bookByIsbn.getName()!=null){
            if(!bookByIsbn.getId().equals(book.getId())){
                return R.fail(CodeEnum.BOOK_ISBN_EXIST_ERROR);
            }
        }
        if(!bookService.updateBook(book)){
            return R.fail(CodeEnum.BOOK_EDIT_ERROR);
        }
        return R.success(CodeEnum.SUCCESS);
    }


    @ApiOperation("图书详情")
    @GetMapping("/detail")
    public R bookDetail(Integer id) {
        return R.success(CodeEnum.SUCCESS,bookService.findBookById(id));
    }

    @ApiOperation("图书详情 根据ISBN获取")
    @GetMapping("/detailByIsbn")
    public R bookDetailByIsbn(String isbn) {
        BookOut bookByIsbn = bookService.findBookByIsbn(isbn);
        if(bookByIsbn.getId()==null){
            return R.fail(CodeEnum.BOOK_NOT_EXIST_ERROR);
        }
        return R.success(CodeEnum.SUCCESS,bookByIsbn);
    }

    @ApiOperation("删除图书")
    @GetMapping("/delete")
    public R delBook(Integer id) {
        bookService.deleteBook(id);
        return R.success(CodeEnum.SUCCESS);
    }

}

Get the source code: Download it from "Resources" on the homepage of the blog! 

Guess you like

Origin blog.csdn.net/yuyecsdn/article/details/124298644