javaWeb 增删改查基本操作

通过之前的文章可以快速的了解SpringBoot 项目,这是一个关于增删改查的案例,可以巩固之前学习到的知识。

        案例开始


准备工作

需求

  • 开发员工管理系统,提供增删改查功能。

环境搭建

  • 数据库(mysql)
    • emp、dept表导入

    • # create database testpeople;
      
      -- 导入员工表
      CREATE TABLE if not exists `emp` (
                                           `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
                                           `username` varchar(20) NOT NULL COMMENT '用户名',
                                           `password` varchar(32) DEFAULT '123456' COMMENT '密码',
                                           `name` varchar(10) NOT NULL COMMENT '姓名',
                                           `gender` tinyint unsigned NOT NULL COMMENT '性别, 说明: 1 男, 2 女',
                                           `image` varchar(300) DEFAULT NULL COMMENT '图像',
                                           `job` tinyint unsigned DEFAULT NULL COMMENT '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',
                                           `entrydate` date DEFAULT NULL COMMENT '入职时间',
                                           `dept_id` int unsigned DEFAULT NULL COMMENT '部门ID',
                                           `create_time` datetime NOT NULL COMMENT '创建时间',
                                           `update_time` datetime NOT NULL COMMENT '修改时间',
                                           PRIMARY KEY (`id`),
                                           UNIQUE KEY `username` (`username`)
      ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='员工表';
      
      
      INSERT INTO `emp` VALUES (1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,'2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `emp` VALUES (18,'Tom1','123456','汤姆1',1,'1.jpg',1,'2000-01-01',1,'2023-12-29 08:31:43','2023-12-29 09:03:51');
      INSERT INTO `emp` VALUES (19,'Tom2','123456','汤姆2',1,'1.jpg',1,'2000-01-01',1,'2023-12-29 08:35:50','2023-12-29 08:35:50');
      INSERT INTO `emp` VALUES (20,'Tom3','123456','汤姆3',1,'1.jpg',1,'2000-01-01',1,'2023-12-29 08:37:47','2023-12-29 08:37:47');
      
      
      -- 导入部门表
      CREATE TABLE if not exists `dept` (
                                            `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
                                            `name` varchar(10) NOT NULL COMMENT '部门名称',
                                            `create_time` datetime NOT NULL COMMENT '创建时间',
                                            `update_time` datetime NOT NULL COMMENT '修改时间',
                                            PRIMARY KEY (`id`),
                                            UNIQUE KEY `name` (`name`)
      ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='部门表';
      
      
      INSERT INTO `dept` VALUES (1,'学工部','2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `dept` VALUES (2,'教研部','2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `dept` VALUES (3,'咨询部','2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `dept` VALUES (4,'就业部','2023-12-28 20:23:44','2023-12-28 20:23:44');
      INSERT INTO `dept` VALUES (5,'人事部','2023-12-28 20:23:44','2023-12-28 20:23:44');
  • 后端 (springboot)

    •   依赖
      • web

      • mybatis

        • application.properties配置信息

        • 实现实体类

      • mysql驱动

      • lombok

    •   三层架构(准备接口)
      • controller

      • service

      • mapper(dao)

        效果

开发规范

  • 前后端分离开发

  • Restful

    • 表述性状态转换

    • 软件架构风格

流程

部门管理

  • Tips

    • Cotruller层优化

    • 请求页面相同得可以将方法注解公共部分注解到类上

页面展示

思路

开发方法
  • Cotroller层

  • //调用Service层
        @Autowired//依赖注入
        private DeptService deptService;
    
        //记录日志
    //    private static Logger log = LoggerFactory.getLogger(DeptController.class);
    
        //查询全部部门数据
    //    @RequestMapping(value = "/depts",method = RequestMethod.GET)//请求页面,指定为GET请求
        @GetMapping("/depts")//同上注解
        public Result list(){
            //记录日志
            log.info("查询全部数据");
    
            List<Dept> deptList = deptService.list();
    
            return Result.success(deptList);
    
        }
  • Service层

  • //Mapper接口注入
    @Autowired
    private DeptMapper deptMapper;
    
    
    /**
     * 实现查询所有数据
     */
    @Override
    public List<Dept> list() {
        //返回全部信息
        return deptMapper.list();
    }
  • Mapper层

  • /**
     * 查询所有部门数据
     * @return
     */
    @Select("select * from dept")
    List<Dept> list();
测试
  • postman

  • 前后端联调

  • Tips

    • 日志小技巧

  •     //记录日志
    //    private static Logger log = LoggerFactory.getLogger(DeptController.class);
    
    //可以使用
    @Slf4j //注解到类上

    删除功能

    思路

开发方法
  • Cotroller层

  • //调用Service层
    @Autowired//依赖注入
    private DeptService deptService;
    /**
     * 删除部门数据
     */
    @DeleteMapping("/depts/{id}")
    public Result delete(@PathVariable Integer id){
        //日志
        log.info("根据ID删除数据\n");
        log.info("删除部门id为{}",id);
        deptService.delete(id);
        return Result.success();
    }
  • Service层

  • //Mapper接口注入
    @Autowired
    private DeptMapper deptMapper;
    
    
    /**
     * 实现删除部门方法
     */
    @Override
    public void delete(Integer id) {
        deptMapper.deldete(id);
    }
  • Mapper层

  • /**
     * 根据ID 删除数据
     * @param id
     */
    @Delete("delete from dept where id = #{id}")
    void deldete(Integer id);
测试
  • postman

  • 前后端联调

修改功能

思路
  • 通过ID查找部门

  • 修改

开发方法
  • Cotroller层

  • //调用Service层
    @Autowired//依赖注入
    private DeptService deptService;
        
    //通过ID查找部门数据
    @GetMapping("/{id}")
    public Result findById(@PathVariable Integer id){
        //日志
        log.info("根据ID查询部门数据");
        Dept dept = deptService.findById(id);
        return Result.success(dept);
    }
    
    /**
     * 修改部门数据
     */
    @PutMapping
    public Result update(@RequestBody Dept dept){
        //日志
        log.info("修改部门数据");
        deptService.update(dept);
        return Result.success();
    }
    
  • Service层

  • //Mapper接口注入
    @Autowired
    private DeptMapper deptMapper;
    
    
    /**
     * 实现通过ID查询部门方法
     */
    @Override
    public Dept findById(Integer id) {
        Dept dept = deptMapper.findById(id);
        return dept;
    }
    
    /**
     * 实现更新部门方法
     */
    @Override
    public void update(Dept dept) {
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.update(dept);
    }
    }
  • Mapper层

  • /**
     * 通过id查询部门
     * @param id
     * @return
     */
    @Select("select * from dept where id = #{id}")
    Dept findById(Integer id);
    
    /**
     * 修改部门
     * @param dept
     */
    @Update("update dept set name = #{name},update_time = #{updateTime} where id = #{id}")
    void update(Dept dept);
测试
  • postman

    • 通过ID查找

  • 修改

  • 前端联调

    • 通过ID查找

  • 修改

添加功能

思路

开发方法
  • Cotroller层

  • //调用Service层
        @Autowired//依赖注入
        private DeptService deptService;
    
    /**
     * 添加部门数据
     */
    @PostMapping("/depts")
    public Result add(@RequestBody Dept dept){
        //日志
        log.info("添加部门名称为{}",dept);
        deptService.add(dept);
        return Result.success();
    }
  • Service层

  • //Mapper接口注入
    @Autowired
    private DeptMapper deptMapper;
    
    
    /**
     * 实现添加部门方法
     */
    @Override
    public void add(Dept dept) {
        //补充数据
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        log.info(dept.toString());
        deptMapper.add(dept);
    
    }
  • Mapper层

  • /**
     * 添加部门
     * @param dept
     */
    @Insert("insert into dept(name,create_time,update_time) values (#{name},#{createTime},#{updateTime});")
    void add(Dept dept);
测试
  • postman

  • 前后端联调


以上为部门管理,小编很快会更新员工管理和登录功能的,敬请期待。

项目地址

admin_web_project: 黑马程序员项目javaWebjavaWeb开发学习仓库,前后端分离项目前端Vue后端springboot数据库Mysql


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/803104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目标检测入门:4.目标检测中的一阶段模型和两阶段模型

在前面几章里&#xff0c;都只做了目标检测中的目标定位任务&#xff0c;并未做目标分类任务。目标检测作为计算机视觉领域的核心人物之一&#xff0c;旨在从图像中识别出所有感兴趣的目标&#xff0c;并确定它们的类别和位置。现在目标检测以一阶段模型和两阶段模型为代表的。…

网络安全——防御课实验二

在实验一的基础上&#xff0c;完成7-11题 拓扑图 7、办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 首先&#xff0c;按照之前的操作&#xff0c;创建新的安全区&#xff08;电信和移动&#xff09;分别表示两个外网…

个人和企业之间该怎么选择合适的SSL证书?

选择合适的SSL证书对于维护网站的安全性和提升用户信任至关重要。个人和企业在选择SSL证书时&#xff0c;应考虑网站类型、安全需求、预算限制以及用户对网站的信任度等因素。以下是一些具体的建议&#xff1a; 个人用户&#xff1a; 类型建议&#xff1a;对于个人网站、博客或…

base SAS programming学习笔记13(Array)

1.Array array-name{dimension} <elements> array-name&#xff1a;向量名称 dimension&#xff1a;向量长度&#xff0c;默认为1&#xff1b; elements:列出变量名&#xff0c;变量名要么全是数值变量或者全是字符变量 array-name和variable不能相同&#xff1b;也不能和…

飞睿智能UWB Tag蓝牙防丢器标签,宠物安全新升级,5cm精准定位测距不迷路

宠物早已成为许多家庭不可或缺的一员&#xff0c;它们用无条件的爱温暖着我们的心房&#xff0c;陪伴我们度过每一个平凡而温馨的日子。然而&#xff0c;随着宠物活动范围的扩大和外界环境的复杂多变&#xff0c;宠物走失的风险也随之增加。每一次出门遛弯&#xff0c;都像是心…

【Git的基本操作】版本回退 | 撤销修改的三种情况 | 删除文件

目录 5.版本回退 5.1选项hard&后悔药 5.2后悔药&commit id 5.3版本回退的原理 6.撤销修改 6.1情况一 6.2情况二 6.3情况三 ​7.删除文件 Git重要能力之一马&#xff0c;版本回退功能。Git是版本控制系统&#xff0c;能够管理文件历史版本。本篇以ReadMe文件为…

【CSS in Depth 2 精译_018】3.1.2 逻辑属性 + 3.1.3 用好逻辑属性的简写形式

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

Windows与Linux双机热备软件推荐

网络数据安全在如今信息化的时代越来越变得举足轻重&#xff0c;因此服务器维护和管理也成为企业健康稳定运营的一项重要工作。但实际情况是很多公司并没有配备专业的运维人员&#xff0c;一般都会通过一些管理软件维护或者主机托管给服务商。整理6款服务器的Windows与Linux双机…

django报错(三):No crontab program或got an unexpected keyword argument ‘user’

Crontab是linux系统上的定时管理模块&#xff0c;简单配置&#xff0c;灵活使用。但是要在windows使用必须借助Cygwin等虚拟工具&#xff0c;否则会报错“No crontab program”。如下图&#xff1a; python-crontab是其提供了python模块对crontab的访问&#xff0c;即可以通过p…

2024年公路水运工程施工企业安全生产管理人员证模拟考试题库及公路水运工程施工企业安全生产管理人员理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年公路水运工程施工企业安全生产管理人员证模拟考试题库及公路水运工程施工企业安全生产管理人员理论考试试题是由安全生产模拟考试一点通提供&#xff0c;公路水运工程施工企业安全生产管理人员证模拟考试题库是…

强化学习——多臂老虎机问题(MAB)【附python代码】

文章目录 一、问题描述1.1 问题定义1.2 形式化描述1.3 累积懊悔1.4 估计期望奖励 二、解决方法2.1 ϵ-贪婪算法2.2 上置信界算法2.3 汤普森采样算法2.4 小结 一、问题描述 1.1 问题定义 有一个用于 K 根拉杆的老虎机&#xff0c;每一根拉杆都对应一个关于奖励的概率分布 R 。每…

【JavaScript 算法】贪心算法:局部最优解的构建

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、贪心算法的基本概念贪心算法的适用场景 二、经典问题及其 JavaScript 实现1. 零钱兑换问题2. 活动选择问题3. 分配问题 三、贪心算法的应用四、总结 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种逐步构建解…

【前端6*】表格-表单2(弹窗在父组件)父子组件调用 vue element-ui

vue element-ui 中表单弹框的使用 写在最前面一、完整代码1、&#xff08;子组件&#xff09;E:\ui\参考代码\demo-new\src\components\detail.vue2、&#xff08;父组件&#xff09;E:\ui\参考代码\demo-new\src\views\Home.vue 二、小结 &#x1f308;你好呀&#xff01;我是…

Qt Style Sheets-入门

Qt 样式表是一种强大的机制&#xff0c;允许您自定义小部件的外观&#xff0c;这是在通过子类化QStyle已经可行的基础上的补充。Qt 样式表的概念、术语和语法在很大程度上受到 HTML级联样式表 (CSS)的启发&#xff0c;但适用于小部件的世界。 概述 样式表是文本规范&#xff0…

手机数据恢复技巧:适用于 Android 的恢复应用程序

发现自己意外删除了 Android 设备上的照片&#xff0c;这让人很痛苦。这些照片可能是值得纪念的文件&#xff0c;会让您想起一些难忘的回忆。删除它们后&#xff0c;您知道如何恢复它们。在这种情况下&#xff0c;您需要使用 Android 的照片恢复应用程序。 无论您需要直接从 A…

【Python基础教程】制作一个宿舍管理系统,数据库宿舍管理系统代码!(完整版,附源码)

今天我们一起学习一个新的小案例——宿舍管理系统。主要涉及列表、字典的初始化、增加、删除、修改和查询操作&#xff0c;以及函数的定义和调用。 一、需求&#xff1a; 有操作指引界面&#xff0c;显示操作号 能添加一个新的入住学生信息&#xff0c;包括学生姓名、宿舍号床…

蓝桥杯14小白月赛题解

直接输出pi/ti,for遍历 #include <iostream> using namespace std; #define int long long int a,b,c ; double t1.00; signed main() {cin>>a;int an0;for(int i1;i<a;i){cin>>b>>c;if(t>c*1.00/b){tc*1.00/b;ani;} }cout<<an<<e…

搭建hadoop+spark完全分布式集群环境

目录 一、集群规划 二、更改主机名 三、建立主机名和ip的映射 四、关闭防火墙(master,slave1,slave2) 五、配置ssh免密码登录 六、安装JDK 七、hadoop之hdfs安装与配置 1)解压Hadoop 2)修改hadoop-env.sh 3)修改 core-site.xml 4)修改hdfs-site.xml 5) 修改s…

使用GPT3.5,LangChain,FAISS和python构建一个本地知识库

引言 介绍本地知识库的概念和用途 在现代信息时代&#xff0c;我们面临着海量的数据和信息&#xff0c;如何有效地管理和利用这些信息成为一项重要的任务。本地知识库是一种基于本地存储的知识管理系统&#xff0c;旨在帮助用户收集、组织和检索大量的知识和信息。它允许用户…

深度学习驱动智能超材料设计与应用

在深度学习与超材料融合的背景下&#xff0c;不仅提高了设计的效率和质量&#xff0c;还为实现定制化和精准化的治疗提供了可能&#xff0c;展现了在材料科学领域的巨大潜力。深度学习可以帮助实现超材料结构参数的优化、电磁响应的预测、拓扑结构的自动设计、相位的预测及结构…