web应用开发一课一得(新手向)

前言

大部分是给自己留一个学习记录,如果有能帮到的,很可以。

大部分新手报错解决方法

前提,弄好了JDK的环境配置。
新手期,报错的时候只要弄好maven配置和pom.xml文件就能很好的解决大部分问题。下面是教程:

(maven配置)

在这里插入图片描述
在这里插入图片描述
在老师刚教的时候,老师都会给你们一个maven的安装包,把安装包保存到电脑文件夹里,建议存D盘,C盘东西太多会造成卡顿,如果C盘空间够,也可以存C盘,但你一定要记住你存在哪个位置,不然找不到文件,会很头疼。
在这里插入图片描述
打开电脑文件夹后,就找到你的maven包
在这里插入图片描述
注意:还没完哦,这只是配置了第一个maven而已,后面还有setting.xml和repository,但是步骤是一样的,找到他们的位置,然后配置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pom.xml文件

pom文件里有很多依赖包,你们可以找你的老师要,这些依赖包没弄好,打代码时就容易报错在这里插入图片描述
pom文件一般会报两种错(也会有其他的),第一种是springboot项目没有承认pom文件,第二种是加入新的依赖包,报红,更新不及时。

第一种报错表现形式:pom.xml文件变成橙色(手边没有素材,所以就没有图了)
解决方法:在pom.xml文件上右击鼠标,然后在弹出框中点击+ Add as Maven Project就解决了。

第二种报错表现形式:加入新依赖,新依赖爆红:(手边没有素材,所以就没有图了)
解决方法:加入新依赖后,右上角会有一个小的蓝色M,点击后,等他加载就好了。

springboot公式化框架

先来简单了解一下springboot项目的目录:
在这里插入图片描述

搞好环境后,就可以打代码啦,对着一片空白的代码,别慌,套公式吧!(以一个项目的用户管理为例)以下是不太专业的公式:
在有启动类的包里,包含

包名解释
entity实体类
service服务接口
serviceimpl服务接口的具体实现类
Mapper数据访问
Controller实现类

在这里插入图片描述
接下来,我会以一个项目的部分来展示代码,部分:如用户管理,汽车管理这样的小单元。
一个完整的项目,就是由这样一个一个小单元来组成,并成为一个项目,而这每个小单元就包含entity、service、serviceimpl、Mapper、controller、这五个包,而这里面要写什么呢?这就看你的项目需求是什么,那这里面就写什么。最基础的需求就是增删查改了。
接下来是分个演示。

数据库

在打项目之前,要有一个有数据的数据库,还有配置好application.yml文件

.yml文件
在这里插入图片描述
数据库
在这里插入图片描述

entity类

entity类,就是写实体的,实体就是一个事务(东西)的属性和行为(实体类可以看作是现实世界中对象的抽象表示),我们拿鸟来举例,
鸟有什么属性呢?比如鸟叫什么鸟?它是什么颜色?
鸟又由有什么行为呢?比如鸟它要吃饭,会唱歌
我们把他们抽象出来,即一个实体类叫鸟,里面有它的名字,它的颜色,它会吃饭,会唱歌,这样,一个实体类就写好了,再加上getting 和setting方法就完善了实体类。
我的项目是跟着老师一起打的,这个是一个有关于网址项目
下面是我的实体类:
在这里插入图片描述

package com.webgrd.weburl.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * <p>
 * 异常等级表
 * </p>
 *
 * @author author
 * @since 2023-04-10
 */
@TableName("err_level")
@ApiModel(value = "ErrLevel对象", description = "异常等级表")
public class ErrLevel implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("异常键")
//    @Column(name="err_key")
    private String errKey;

    @ApiModelProperty("异常值")
//    @Column(name="err_value")
    private String errValue;

    @ApiModelProperty("异常描述")
//    @Column(name="err_dec")
    private String errDec;



    public String getErrKey() {
        return errKey;
    }

    public void setErrKey(String errKey) {
        this.errKey = errKey;
    }

    public String getErrValue() {
        return errValue;
    }

    public void setErrValue(String errValue) {
        this.errValue = errValue;
    }

    public String getErrDec() {
        return errDec;
    }

    public void setErrDec(String errDec) {
        this.errDec = errDec;
    }

    @Override
    public String toString() {
        return "ErrLevel{" +
            "errKey = " + errKey +
            ", errValue = " + errValue +
            ", errDec = " + errDec +
        "}";
    }
}

controller

在这里面写增删查改(我这张图里的更改写错了,不过下面标题为改的,修正了)
在这里插入图片描述

    @PostMapping("/add")
    public Result<?>  addErrLevel(@RequestBody ErrLevel errLevel){
        errLevelService.addErrLevel(errLevel);
        return Result.success("添加成功");
    }

 @PostMapping("/del")
    public Result<Integer> delErrLvl(@RequestBody ErrLevel errLevel){
        int num = errLevelService.myDelErrlevel(errLevel);
        return Result.success(num,"删除成功");
    }

@GetMapping ("/qry")
    public Result<List<ErrLevel>> qryErrLvl( ErrLevel errLevel){
        List<ErrLevel> list = errLevelService.myQryErrlevel(errLevel);
        return Result.success(list,"查询成功");
    }

@PostMapping("/upd")
    public Result<Integer> updErrLvl(@RequestBody ErrLevel errLevel){
        Integer num = errLevelService.myUpdateErrlevel(errLevel);
        return Result.success(num,"更新成功");
    }

service

在软件开发中,服务接口和服务实现类被用来实现业务逻辑,以及提供访问数据库或其他资源的方法。

public interface IErrLevelService extends IService<ErrLevel> {
public void addErrLevel(ErrLevel errLevel);

    List<ErrLevel> myQryErrlevel(ErrLevel errLevel);

    int myDelErrlevel(ErrLevel errLevel);

    int myUpdateErrlevel(ErrLevel errLevel);
}

Mapper

在这里插入图片描述

public interface ErrLevelMapper extends BaseMapper<ErrLevel> {
    public void addErrLevel(ErrLevel errLevel);
    int updateErrlevel(ErrLevel errLevel);

    List<ErrLevel> qryErrLevel(ErrLevel errLevel);

    int delErrlevel(ErrLevel errLevel);
}

serviceimpl

serviceimpl一般放在service包下,serviceimpl一般为service的具体细节实现类。

@Service
public class ErrLevelServiceImpl extends ServiceImpl<ErrLevelMapper, ErrLevel> implements IErrLevelService {
@Resource
    ErrLevelMapper errLevelMapper;

    @Override
    public void addErrLevel(ErrLevel errLevel) {
        errLevelMapper.addErrLevel(errLevel);
    }



    @Override
    public List<ErrLevel> myQryErrlevel(ErrLevel errLevel) {
        return errLevelMapper.qryErrLevel(errLevel);
    }

    @Override
    public int myDelErrlevel(ErrLevel errLevel) {
        return errLevelMapper.delErrlevel(errLevel);
    }

    @Override
    public int myUpdateErrlevel(ErrLevel errLevel) {
        return errLevelMapper.updateErrlevel(errLevel);
    }

}

mapper.xml文件

一般不建议在Mapper里面写sql语句,所以,在resources下多建一个包,专门用来写sql语句
在这里插入图片描述
sql语句:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.webgrd.weburl.mapper.ErrLevelMapper">
    <insert id="addErrLevel" parameterType="ErrLevel">
        insert into err_level (errKey,errValue,errDec) values  (#{errKey},#{errValue},#{errDec})
        </insert>
    <update id="updateErrlevel" parameterType="ErrLevel">
        update err_level set errValue = #{errValue}, errDec = #{errDec}
        where errKey = #{errKey}
    </update>
    <select id="qryErrLevel" parameterType="ErrLevel" resultType="ErrLevel">
        select * from err_level where 1 = 1
        <if test="errKey != null">
            and errKey = #{errKey}
        </if>
        <if test="errValue != null">
            and errValue = #{errValue}
        </if>
    </select>
    <delete id="delErrlevel" parameterType="ErrLevel">
        delete from err_level where errKey = #{errKey}
    </delete>
</mapper>


写sql语句时,如果报错了,可以先在MySQL里把语句写好,并成功执行后,再把sql语句放到Mapper.xml里。

项目运行成功展示

项目成功演示

编写代码过程中遇到的问题(查询方法编写时,出错)

报错:Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.webgrd.common.Result<java.util.List<com.webgrd.weburl.entity.ErrLevel>> com.webgrd.weburl.controller.ErrLevelController.qryErrLvl(com.webgrd.weburl.entity.ErrLevel)]
报了这个错后,老师给我改了controller的请求方法,从Get改成了post
虽然上面的依然没有改成功,但是有一个新的报错(postman发送后报错)
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.webgrd.weburl.mapper.ErrLevelMapper.qryErrLevel] with root cause
提示我写sql语句的Mapper中有错,老师就检查了我的Mapper.java和我的Mapper.xml,就发现我的select id写错了
这是我的Mapper.java

 List<ErrLevel> qryErrLevel(ErrLevel errLevel);

这是我的sql语句

<select id="qryErrlevel" parameterType="ErrLevel" >
        select * from err_level where 1 = 1
        <if test="errKey != null">
            and errKey = #{errKey}
        </if>
        <if test="errValue != null">
            and errValue = #{errValue}
        </if>
    </select>

在这里插入图片描述
在这里插入图片描述
发现qryErrLevel,大小写错误,改正过来后就可以了
在这里插入图片描述

然后有一个新报错
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement ‘com.webgrd.weburl.mapper.ErrLevelMapper.qryErrLevel’. It’s likely that neither a Result Type nor a Result Map was specified.] with root cause
在这里插入图片描述

这个错误信息表示在执行MyBatis查询时出现了问题,具体地说,MyBatis无法找到与查询语句相对应的结果映射,需要加resultType=“ErrLevel”
在这里插入图片描述

resultType是MyBatis中的一个元素,用于指定查询语句的返回结果类型

最后,来解决这个问题
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.webgrd.common.Result<java.util.List<com.webgrd.weburl.entity.ErrLevel>> com.webgrd.weburl.controller.ErrLevelController.qryErrLvl(com.webgrd.weburl.entity.ErrLevel)]
提示controller有错,我们去controller中查看
在这里插入图片描述
@RequestBody
@RequestBody是Spring框架中的一个注解,用于将HTTP请求体中的JSON或XML数据绑定到Java对象。它通常用于处理POST或PUT请求,其中请求体包含要被映射到Java对象的数据。
用这个,写postman时,就得写JSON,由于我这个controller方法是用来查询的,所以把@RequestBody去掉,就可以正常运行了
在这里插入图片描述

查询成功
在这里插入图片描述

删除出错

Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘text/plain;charset=UTF-8’ not supported]
解决方法:type 'text/plain;charset=UTF-8’报错解决方法

总结

大家学习过程,代码出错不要害怕,去解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值