基于SpringBoot的增删改查Demo_springboot增删改查demo_沧横的博客-程序员宅基地

技术标签: spring boot  java  maven  mybatis  bootstrap  

基于SpringBoot的增删改查Demo

这是一个基于SpringBoot+mybatis的增删改查Demo,其功能是可以对书籍进行增删改查这些基本的操作。

一、技术介绍

开发工具:IDEA
核心技术:SpringBoot+mybatis;
前端:Bootstrap;
数据库:mysql;
数据库连接池:druid;
模板引擎:Thymeleaf;

二、前端页面

1、首页

在这里插入图片描述

2、登录页

用户进行书籍增删改查操作之前需要进行登录。
在这里插入图片描述

3、注册页面

在这里插入图片描述

4、密码找回页面

当用户忘记密码时,可以通过此功能找回密码。
在这里插入图片描述

5、书籍增删改查页面

在这里插入图片描述

三、功能实现

1、书籍添加

用户可以对书籍执行添加功能。
在这里插入图片描述

2、删除书籍

用户可以通过选中相应的书籍进行删除,同时,支持批量删除。
在这里插入图片描述

3、修改书籍

用户可以对书籍进行修改操作。
在这里插入图片描述

四、部分核心代码

@Controller
public class UserController {
    

    @Autowired
    UserService userService;

    /**
     * 用户名检查    不能注册相同用户名
     * @param username
     * @return
     */
    @RequestMapping("/checkName.do")
    @ResponseBody
    public String checkName(@RequestParam("username") String username) {
    
        User user = userService.getUserByName(username);
        if (user == null) {
    
            return "success";
        }
        return "false";
    }

    /**
     * 注册功能
     * @param username
     * @param password
     * @param email
     * @return
     */
    @RequestMapping("/addUser.do")
    @ResponseBody
    public int addUser(@RequestParam("userName") String username,
                          @RequestParam("password") String password,
                          @RequestParam("email") String email) {
    
        int result = userService.addUser(username, password, email);
        int flag = 0;
        if (result > 0) {
    
            flag = 1;
            return flag;
        }
        return flag;
    }

    /**
     * 密码找回功能
     * @param username
     * @param email
     * @return
     */
    @RequestMapping("/findPwd.do")
    @ResponseBody
    public int findPwd(@RequestParam("userName") String username,
                        @RequestParam("email") String email) {
    
        User user = userService.findPwd(username, email);
        Integer pwd = 0;
        if (user != null) {
    
     
@Controller
public class BookController {
    

    @Autowired
    private BookService bookService;

    /**
     * 获取全部书籍信息
     * @param pn
     * @return
     */
    @RequestMapping("/getAllBook")
    @ResponseBody
    public PageInfo<Book> getAllBook(@RequestParam(value = "pn", defaultValue = "1") Integer pn) {
    
        //在查询之前只需要调用,传入页码,以及每页的大小
        PageHelper.startPage(pn, 3);
        //startPage后面紧跟的这个查询就是一个分页查询
        List<Book> books = bookService.getAllBook();
        //使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了
        //封装了详细的分页信息,包括我们查询出来的数据,传入连续显示的页数
        return new PageInfo(books, 5);
    }

    /**
     * 添加书籍功能
     * @param bookPic
     * @param bookName
     * @param bookType
     * @param bookIntro
     * @param model
     * @return
     */
    @RequestMapping("/addBook")
    @ResponseBody
    public String addBook(@RequestPart("bookPic") MultipartFile bookPic,
                          @RequestParam("bookName") String bookName,
                          @RequestParam("bookType") Integer bookType,
                          @RequestParam("bookIntro") String bookIntro,
                          Model model) {
    
        Book book = new Book();
        try {
    
            //根据创建时间对文件进行重命名
            String fileName = System.currentTimeMillis() + bookPic.getOriginalFilename();
            //上传文件存储的位置
            String destFileName = "D://BookPic/images/" + File.separator + fileName;
            //防止改文件夹不存在,创建一个新文件夹
            File destFile = new File(destFileName);
            destFile.getParentFile().mkdirs();
            //将文件存储到该位置
            bookPic.transferTo(destFile);

            //传递文件
            model.addAttribute("fileName", fileName);
            //将文件名存储到数据库中,以便查询调用
            book.setBookPic(fileName);
            String pic = book.getBookPic();
            bookService.addBook(bookName, bookType, bookIntro, pic);
        } catch (FileNotFoundException e) {
    
            e.printStackTrace();
            return "上传失败," + e.getMessage();
        } catch (IOException e) {
    
            e.printStackTrace();
            return "上传失败," + e.getMessage();
        }
        return "success";
    }

    /**
     * 删除书籍功能
     * @param bookId
     * @return
     */
    @RequestMapping("/delBook")
    @ResponseBody
    public int delBook(@RequestParam(value = "bookId") Integer bookId) {
    
        int result = bookService.delBook(bookId);
        int flag = 0;
        if (result > 0) {
    
            flag = 1;
        }
        return flag;
    }

    /**
     * 根据id查询书籍信息
     * @param bookId
     * @return
     */
    @RequestMapping("/queryBookById")
    @ResponseBody
    public Book updateBook(@RequestParam(value = "bookId") Integer bookId) {
    
        return bookService.queryBookById(bookId);
    }

    /**
     * 批量删除书籍功能
     * @param ids
     * @return
     */
    @RequestMapping("/delAllBook")
    @ResponseBody
    public int delAllBook(@RequestParam(value = "ids") String ids) {
    
        int result = 0;
        //批量删除
        if(ids.contains("-")){
    
            List<Integer> del_ids = new ArrayList<>();
            String[] str_ids = ids.split("-");
            //组装id的集合
            for (String string : str_ids) {
    
                del_ids.add(Integer.parseInt(string));
            }
            result = bookService.deleteBatch(del_ids);
        } else{
    
            Integer id = Integer.parseInt(ids);
            result = bookService.delBook(id);
        }
        int flag = 0;
        if (result > 0) {
    
            flag = 1;
        }
        return flag;
    }

    /**
     * 修改书籍功能
     * @param book
     * @return
     */
    @RequestMapping("/updateBookById/{bookId}")
    @ResponseBody
    public int updateBookById(Book book) {
    
        int result = bookService.updateBookById(book);
        int flag = 0;
        if (result > 0) {
    
            flag = 1;
        }
        return flag;
    }

    /**
     * 根据输入信息查询书籍功能
     * @param pn
     * @param request
     * @return
     */
    @RequestMapping("/searchBook")
    @ResponseBody
    public PageInfo<Book> searchBook(@RequestParam(value = "pn", defaultValue = "1") Integer pn, HttpServletRequest request) {
    
        String searchBook = request.getParameter("searchBook");
        //在查询之前只需要调用,传入页码,以及每页的大小
        PageHelper.startPage(pn, 3);
        //startPage后面紧跟的这个查询就是一个分页查询
        List<Book> books = bookService.searchBook(searchBook);
        //使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了
        //封装了详细的分页信息,包括我们查询出来的数据,传入连续显示的页数
        return new PageInfo(books, 5);
    }

}
//拦截器
@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    
        registry.addResourceHandler("/pic/**").addResourceLocations("file:D://BookPic/images/");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")  //所有请求都被拦截,包括静态资源
                .excludePathPatterns("/", "/*.do", "/assets/**", "/bootstrap-3.4.1-dist/**", "/css/**", "/images/**", "/js/**", "/white/**", "/favicon.ico");  //放行的请求
    }
}

Demo之Gitee地址:基于SpringBoot+mybatis的增删改查Demo
Demo之GitHub地址:基于SpringBoot+mybatis的增删改查Demo


END!!!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46062119/article/details/121699972

智能推荐

国科大自动评教方法-小学生都会_国科大一键评估-程序员宅基地

自动填充教务系统课程评教和教师评教所有题,节省学子宝贵的学习时间!方法简单,适合年龄12周岁以上。_国科大一键评估

《疯狂的程序员》四格漫画和插图-程序员宅基地

今天网友给我传过来《疯狂的程序员》漫画,一幅四格漫画和一幅插图,觉得很有意思,不敢独享,赶紧拿出来和大家分享一下。两个风格不一样,不知道大家都喜欢哪种风格。我觉得还是比较喜欢漫画的,但是BOSS Liu他们说我欣赏水平有问题。唉。我想,如果大家都喜欢,就再央他们多画点,以后还能收到出版的书里面去。...

ZBrush Braid Brush 辫子笔刷——缎沫晗自制_zbrush麻花辫-程序员宅基地

文件:百度云:链接:https://pan.baidu.com/s/1RYjn4sqm73AZ2BxqDzOoMg提取码:2333网上连这种笔刷都拿来卖钱,真心是服啊!所以我利用Maya和ZB制作了一个笔刷。过程还是简单的,像风格化头发也是能够通过这种方法制作。如果想了解原理的话,B站有教程。如果可以的话,点个关注支持一下:https://space.bilibili.com/73749036..._zbrush麻花辫

【2022·深度强化学习课程】深度强化学习极简入门与Pytorch实战_深度强化学习实战_二向箔不会思考的博客-程序员宅基地

强化学习作为行为主义人工智能学派的典型代表,近几年与深度神经网络相结合形成的深度强化学习(DRL),达到了令人惊叹的智能水平:2015年DQN智能体玩视频游戏超越人类水平,2017年基于PPO算法的Open Five在《Dota》游戏中战胜人类顶尖职业玩家,2019年基于DRL的AlphaStar在《星际争霸II》游戏中战胜人类顶尖职业玩家。然而,深度强化学习理论较为抽象,学习曲线陡峭,需要大量的时间和精力才能入门,很多硕士和博士往往浪费了大量时间在入门阶段,耽误了学习和科研进度。_深度强化学习实战

c# winform 中 datagridview 中datapropertyname 中如如何显示对象属性-程序员宅基地

如下两个类 public class UserInfoRoleInfo { public int UserId { get; set; } public string UserNumber { get; set; } public string UserName { get; set; } public RoleInfo..._datapropertyname

KRPANO资源分析工具下载720THINK全景图-程序员宅基地

1.首先,在KRPano资源分析工具中,打开某个720think的全景网址:例如如下的网址:https://www.720think.com/t/306aus3d32.在左侧资源查看器搜索xml文件3.由于720think网站的xml已经被加密,我们可以使用批量解密替换功能进行解密4.打开解密后的XML文件进行查看,可以看到17765.xml_t150..._720think下载

随便推点

【优化求址】基于matlab遗传算法求解变电站选址优化问题【含Matlab源码 YC006期】_matlab中转站选址问题_海神之光的博客-程序员宅基地

1 VRP基本原理车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一。VRP关注有一个供货商与K个销售点的路径规划的情况,可以简述为:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等),力争实现一定的目标(如车辆空驶总里程最短,运输总费用最低,车辆按一定时间到达,使用的车辆数最小等)。2 问题属性与常见问题。_matlab中转站选址问题

Verlog——单周期8指令CPU实现_irverlog-程序员宅基地

Verlog——单周期8指令CPU实现_irverlog

C语言--指针--【程序38】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。_使用指针完成输入数组,最大的数与第一个元素交换,最小的数与最后一个元素交换,输-程序员宅基地

//【程序38】//题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。#include<stdio.h>int main(){ int a[20],i,*p,*max,*min,max_index,min_index,n,tmp; //不允许把一个数赋予指针变量,故下面的赋值是错误的: int *p; p=1000; scanf("%d..._使用指针完成输入数组,最大的数与第一个元素交换,最小的数与最后一个元素交换,输

python字符串内建函数_python字符串内建函数-程序员宅基地

Unicode 字符串Python 中定义一个 Unicode 字符串和定义一个普通字符串一样简单:引号前小写的"u"表示这里创建的是一个 Unicode 字符串。如果你想加入一个特殊字符,可以使用 Python 的 Unicode-Escape 编码。如下例所示:被替换的 \u0020 标识表示在给定位置插入编码值为 0x0020 的 Unicode 字符(空格符)。在Python2中,普通字符...

Cannot find firefox binary in PATH. Make sure firefox is installed.-程序员宅基地

使用selenium报找不到浏览器安装路径错误解决办法如下:1.重新安装firefox在默认路径下; OS Expected Location of Firefox Linux firefox (found using "which") Mac /Applications/Firefox.app/Contents/MacOS/firefox Windows...

vs添加boost报错main已经xxxx.obj中已定义_main在xx中已被定义-程序员宅基地

最近在使用darknet做目标检测,但是需求是在windos下配置好cuda,cudnn并且使用github上的darknet网络,因此菜了很多坑,但是目前已经将darknet的exe文件已经编译出来了。在编译darknet的过程中也有 一个错误也是说什么main已经在XXX中已定义,然后找到这个文件,将main函数注释掉。但是这个obj文件是不能打开的,因此很头疼。然后找了好多也解决不了..._main在xx中已被定义

推荐文章

热门文章

相关标签