黑马程序员javaweb案例---初识管理系统(spring-boot)

下面介绍的都是部门管理模块的内容

所需软件

idea,postman,mysql,谷歌浏览器

开发流程

一,环境搭建

需要用到mybits,lombok,mysql,spring-boot,maven环境,具体可以自己去百度,

创建项目

启动项目查看是否有问题,如果有问题,大概率是jdk的问题,可以在设置中更改,也可以在编译配置中更改适合的jdk版本,我用的都是23

1,创建类似于图中的软件包格式(一定要按照要求创建,不然到时候插件扫描的时候会出错)

一开始我把serviceimpl包和service放在了一起,导致扫描失败,出现错误

2,将Result文件添加入程序中,可以去找黑马资料,也可以自己敲,要注意这里软件包的格式要换为自己的

java 复制代码
package com.example.demo.pojo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Data
@NoArgsConstructor
@ResponseBody
@AllArgsConstructor

public class Result {

    private Integer code; // 响应码,1 代表成功; 0 代表失败
    private String msg;   // 响应信息 描述字符串
    private Object data;  // 返回的数据
    // 定义带参数的构造器
    //这里不能用有参构造,否则返回的json中就没有data了
  /* @JsonIgnore
   public Result(int code, String msg,Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }*/
    // 增删改 成功响应
  //  @JsonIgnore
    public static Result success() {
        return  new Result(1, "success",null);
    }

    //  查询 成功响应
   // @JsonIgnore
    public static Result success(Object data) {
        return new Result(1, "success",data);
    }


    // 失败响应
 //   @JsonIgnore
    public static Result error(String msg) {
        return new Result(0, msg,null);
    }
}

3,在application中配置插件,记得要把url,password,passname改为自己的(我一开始就卡在这里,导致数据库一直连接不上)

java 复制代码
spring.application.name=demo6
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/user
spring.datasource.username=root
spring.datasource.password=root

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis.configuration.map-underscore-to-camel-case=true

4,添加注解,形成三层架构

至此,环境准备大致就搭配完成了

5,sql语句运行,创建表格,语句如下,直接复制运行就行了

java 复制代码
-- 部门管理
create table dept(
                     id int unsigned primary key auto_increment comment '主键ID',
                     name varchar(10) not null unique comment '部门名称',
                     create_time datetime not null comment '创建时间',
                     update_time datetime not null comment '修改时间'
) comment '部门表';

insert into dept (id, name, create_time, update_time) values(1,'学工部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()), (4,'就业部',now(),now()),(5,'人事部',now(),now());



-- 员工管理(带约束)
create table emp (
                     id int unsigned primary key auto_increment comment 'ID',
                     username varchar(20) not null unique comment '用户名',
                     password varchar(32) default '123456' comment '密码',
                     name varchar(10) not null comment '姓名',
                     gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
                     image varchar(300) comment '图像',
                     job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',
                     entrydate date comment '入职时间',
                     dept_id int unsigned comment '部门ID',
                     create_time datetime not null comment '创建时间',
                     update_time datetime not null comment '修改时间'
) comment '员工表';

INSERT INTO emp
(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES
                                                                                                    (1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),
                                                                                                    (2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),
                                                                                                    (3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),
                                                                                                    (4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),
                                                                                                    (5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),
                                                                                                    (6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),
                                                                                                    (7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),
                                                                                                    (8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),
                                                                                                    (9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),
                                                                                                    (10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),
                                                                                                    (11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),
                                                                                                    (12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),
                                                                                                    (13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),
                                                                                                    (14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),
                                                                                                    (15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),
                                                                                                    (16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2007-01-01',2,now(),now()),
                                                                                                    (17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());

可能遇到的问题:

1,Rest无法封装成json传递给postman,找了好几个文章,都没有找到这个答案,后面发现只需要从设置里面修改构造,注解处理器里面修改为从类路径中获取就可以了(@Sl4j的报错log也是因为这个)

2,数据库连接不上

肯定是url没处理好,将默认架构修改一下,url修改一下就可以了

二,接口文档的查看(以第一个操作为例)

请求格式

指定了请求路径为depts

请求方式为get

接口的作用

在查询操作中无请求参数

这里是前端发送给后端的数据,数据名字要统一

后端返回给前端的数据,指定相应码为1,返回成功,对应的数据

三,查询部门表中的内容

1,control中的内容

查看接口文档,服务端发起请求接口为depts.

log输出日志信息,可以采取两种方式创建,一个是注释@Sl4j,另一个是创建变量,一般使用第一种,用Result来返回后端json信息,如果返回失败因为Result的原因,查看环境搭建的注意事项

java 复制代码
 /*
    *查询所有部门信息
     */
    @GetMapping
    public Result List() {
        log.info("查询所有部门信息");
        //调用service查询部门数据
        List<Dept> deptList=deptService.list();
        return Result.success(deptList);
    }

创建service对象,后面其他操作也要用到这个,所以作用域要放类下

java 复制代码
@Autowired
    private DeptService deptService;

2,mapper中的内容

执行内容,查找所有用户信息

java 复制代码
 //查询全部部门数据
    @Select("select* from dept")
    List<Dept> list();

3,service中的内容

创建服务端接口,供control调用

java 复制代码
List<Dept> list();
    //查询全部部门数据

4,serviceimpl中的内容

实现接口,调用mapper,实现查询

java 复制代码
@Autowired
    private DeptMapper deptMapper;

    //查询全部部门数据
    public List<Dept> list() {
        return deptMapper.list();
    }

将内容封装在List集合中已json格输送给前端

四,以id查询删除内容,添加部门数据

这两个操作都比较简单,不过多介绍,直接给代码,结合接口文档理解就好了

control

java 复制代码
/*
    *删除dept表格中的部门信息
     */
    @DeleteMapping(value="/{id}")
    public Result delete(@PathVariable Integer id){
        log.info("根据id部门信息:{}",id);

        deptService.delete(id);
        return Result.success();
    }

    /*
    *新增部门信息
    */
    @PostMapping
    public Result add(@RequestBody Dept dept){
        log.info("新增部门信息:{}",dept);
        deptService.add(dept);
        return Result.success();
    }

mapper

java 复制代码
    //删除部门数据
    @Delete("delete from dept where id=#{id}")
    void deleteByid(Integer id);


    //新增部门数据
    @Insert("insert into dept(name,create_time,update_time) values(#{name},#{createTime},#{updateTime})")
    void add(Dept dept);

service

java 复制代码
void delete(Integer id);
    //删除部门数据

    void add(Dept dept);
    //新增部门数据

serviceimpl

java 复制代码
 //删除部门数据
    public void  delete(Integer id) {
        deptMapper.deleteByid(id);
    }

    //添加部门数据
    @Override
    public void add(Dept dept) {
        //设置当前时间
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.add(dept);
    }

五,修改部门信息

根据接口文档,要先创建一个根据id查询再创建一个修改信息模块

根据代码来进行介绍,能看懂接口文档就能写出来

control

java 复制代码
/*
    根据id查询部门信息
     */
    @GetMapping(value="/{id}")
    public Result get(@PathVariable Integer id){
        log.info("根据id查询部门信息:{}",id);
        Dept dept=deptService.getById(id);
        return Result.success(dept);
    }

    /*
    修改部门信息
     */
    @PutMapping
    public Result update(@RequestBody Dept dept){
        log.info("修改部门信息");
        deptService.update(dept);
        return Result.success();
    }

mapper

java 复制代码
//根据id查询部门信息
    @Select("select* from dept where id=#{id}")
    Dept get(Integer id);

    //修改部门信息
    @Update("update dept set name=#{name},update_time=#{updateTime} where id=#{id}")
    int update(Dept dept);

service

java 复制代码
Dept getById(Integer id);
    //根据id查询部门信息

    void update(Dept dept);
    //修改部门信息

serviceimpl

java 复制代码
 //根据id查询部门信息
    @Override
    public Dept getById(Integer id) {
        return deptMapper.get(id);
    }

    //修改部门信息
    @Override
    public void update(Dept dept) {

        dept.setUpdateTime(LocalDateTime.now());
        Dept k=deptMapper.get(dept.getId());
        if(k==null){
            log.error("部门不存在");
        }
        else {
            deptMapper.update(dept);
        }
    }

最基础的spring-boot使用,用于初次尝试创建后端项目,加深了对三层架构后后端开发的理解,对java基于注解开发有了更深刻的认识,将持续更新(因为太长了懒得想写了ORZ)

相关推荐
大溪地C几秒前
Spring Boot3整合Knife4j(4.5.0)
java·数据库·spring boot
Java&Develop几秒前
java项目springboot 项目启动不了解决方案
java·开发语言·spring boot
飞奔的马里奥1 小时前
30天学习Java第四天——JVM规范
java·jvm·学习
₁ ₀ ₂ ₄1 小时前
深入理解 Reactor Netty 线程配置及启动命令设置
java·开发语言
花千树-0101 小时前
J-LangChain - Agent - 编排一个 ReAct + Function Call 反应链
java·gpt·langchain·prompt·github·aigc·ai编程
m0_663234011 小时前
springboot3整合knife4j详细版,包会!(不带swagger2玩)
java
neo_Ggx232 小时前
Spring上下文工具类
java·后端·spring
圈圈编码2 小时前
SpringBoot 自动配置原理
java·spring boot·spring
武昌库里写JAVA2 小时前
微服务架构: SpringCloud实战经验总结
java·开发语言·spring boot·学习·课程设计
小安同学iter2 小时前
SpringMVC (一)基础
java·spring boot·spring·java-ee·tomcat·intellij-idea