javaWeb 增删改查基本操作

news/2024/8/27 7:02:02 标签: spring boot, java, spring, 个人开发, mybatis

通过之前的文章可以快速的了解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层

  • java">//调用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层

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

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

  • 前后端联调

  • Tips

    • 日志小技巧

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

    删除功能

    思路

开发方法
  • Cotroller层

  • java">//调用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层

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

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

  • 前后端联调

修改功能

思路
  • 通过ID查找部门

  • 修改

开发方法
  • Cotroller层

  • java">//调用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层

  • java">//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层

  • java">/**
     * 通过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层

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

  • java">//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层

  • java">/**
     * 添加部门
     * @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



http://www.niftyadmin.cn/n/5558721.html

相关文章

流程图怎么做?有三种制作方法

流程图怎么做&#xff1f;在日常生活和工作中&#xff0c;流程图作为一种直观展示步骤、流程或决策路径的工具&#xff0c;扮演着不可或缺的角色。它不仅能够帮助我们理清思路、规划任务&#xff0c;还能促进团队协作与沟通。那么&#xff0c;如何高效地绘制流程图呢&#xff1…

CSS 导航栏:设计、定制与优化

CSS 导航栏:设计、定制与优化 CSS(层叠样式表)是网页设计中不可或缺的一部分,它允许开发者通过定义样式来控制网页的布局和外观。在网页设计中,导航栏是一个关键元素,它帮助用户浏览网站并找到他们感兴趣的内容。本文将详细介绍如何使用 CSS 设计、定制和优化导航栏,以…

数电基础 - 脉冲波形

目录 ​​​​​​​ 一. 简介 二. 施密特触发器 三. 施密特触发器的实例应用 四. 单稳态触发器 五. 单稳态触发器实例应用 六. 集成单稳态触发器 七. 多携振荡器 八. 非对称式多携振荡器 九. 环形振荡器 一. 简介 脉冲波形是一种在时间上不连续、具有突变特点的电信…

【单目3D检测】smoke(1):模型解析

SMOKE是纵目科技在2020年提出的单目3D检测新方法&#xff0c;论文展示了一种新的3D目标检测方法&#xff0c;该方法通过将单个关键点估计与回归3D变量相结合来预测每个检测到的目标3D bounding box。SMOKE延续了centernet的key-point做法&#xff0c;认为2d检测模块是多余的&am…

ZStack Cloud 5.1.8正式发布

2024年7月5日&#xff0c;ZStack Cloud正式发布最新版本——ZStack Cloud 5.1.8&#xff0c;涵盖一系列重要功能&#xff0c;以下为您进行详细介绍。 亮点速览 GPU运维管理增强&#xff1a;新增GPU设备统一管理界面&#xff1b;支持GPU工作状态和实时负载监控报警三层网络运维…

Go语言---并发版爬虫

并发版爬虫 在上一篇中&#xff0c;简单版的百度贴吧爬虫&#xff0c;我们只能单个进行爬&#xff0c;速度缓慢&#xff0c;利用Go语言的并发特性&#xff0c;我们可以单开辟一个协程进行处理。 package mainimport ("fmt""net/http""os""…

未来4-12年,BTC的安全模型就要崩溃了吗?

原创 | 刘教链 今日BTC试图冲击64k&#xff0c;一度站上&#xff0c;又被击落。Mt.Gox的赔付马上就要开始了。市场依然还是对于潜在抛压惴惴不安。教链在过去半年多时间陆续写过多篇内参谈及Mt.Gox的事情&#xff0c;其中[2024.5.28内参&#xff1a;门头沟14万枚BTC异动&#x…

【Flutter】 webview_flutter避坑

webview_flutter webview_flutter没有SSL Error接口&#xff0c;也就是说等你的网页出现SSL 错误的时候这个插件无法捕捉处理&#xff0c;除非你改它的源码。 下面这段是webview_flutter官网的例子&#xff0c;它有onHttpError、onWebResourceError、但没有任何捕捉 SSL 错误…