Spring Boot 萌新常见项目结构、注解、实现方式,JSON格式。大佬勿进。

目录

Spring Boot创建项目常见的包结构:

一.Entity

一.Entity 实体类:

注解

二、Service(业务逻辑)和ServiceImpl(业务逻辑实现)     

  Service     

ServiceImpl

三、Mapper

四、Xml文件格式:

五、Controller

@RestController

JSON格式:

@RequestMapping("/weburl/errLevel")

@Resource

Result

@RequestBody

 Result.success(num,"新增成功"):


三.Mappe

四.Xml

五.Controller

一.Entity 实体类:

主要用于数据传递,对应于数据库中的一个表。

@Data
@TableName("err_level")
@ApiModel(value = "ErrLevel对象", description = "异常等级表")
public class ErrLevel implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("异常键")
    private String errKey;
    @ApiModelProperty("异常值")
    private String errValue;
    @ApiModelProperty("异常描述")
    private String errDec;

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

  • 注解


  1. @Data

    这是一个Lombok库的注解,它会自动为类生成getter、setter、equals、hashCode和toString方法。简化了这些方法的书写,提高了代码效率。

    例如

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

  2. @TableName("err_level")

           也是Lombok库的注解,用于指定该类对应的数据库表名为"err_level"。                                                
  3. @ApiModel                                                                                                      注解来描述ErrLevel类,并提供了"ErrLevel对象"的value和"异常等级表"的description。同时,我们还使用了@ApiModelProperty注解来描述每个属性,以便在生成API文档时提供更详细的信息。最后,我们还重写了toString()方法,以便在需要时方便地打印对象的信息。                                                                                                                                                             
  4.   @Override                                                                                                                                                                                                                                                                                   主要用于重写父类或接口中的方法。它是一种编译时检查机制,可以帮助开发人员在编写代码时避免错误。当一个子类重写父类的方法时,可以使用@Override注解,这表示该方法覆盖了父类中的方法。如果父类中不存在要重写的方法,使用@Override注解会导致编译错误。                                                                                                                                                      此外,使用@Override注解还有其他好处:                                                                                                                                                                                                                          提供注释功能:虽然不写@Override注解也可以重写方法,但加上它可以帮助其他开发人员更好地理解代码。防止重写过程出错:在重写、覆盖父类(超类)中的函数时,加入@Override可以防止重写过程出错,以减少失误。                                                                                                                                                 
  5.   @ Serializable                                                                                                    这是一个Java接口,任何实现这个接口的类都可以被序列化和反序列化, 这对于将对象存储到文件或发送到网络非常重要。
    public class ErrLevel implements Serializable{......}

二、Service(业务逻辑)和ServiceImpl(业务逻辑实现)     

         说白了就是写出一个方法,再实现这个方法,和Java的写法大同小异                 

  Service     

写出方法:

public interface IErrLevelService extends IService<ErrLevel> {
    int myAddErrLevel(ErrLevel errLevel);
    int myUpdateErrlevel(ErrLevel errLevel);
    List<ErrLevel> myQryErrlevel(ErrLevel errLevel);
    int myDelErrlevel(ErrLevel errLevel);

}

 

extends IService表示IService<ErrLevel> 是一个泛型接口,表示 这是一个操作ErrLevel对象的服务接口。IService接口中可能定义了一些通用的操作,如增加(add)、删除(delete)、更新(update)、查询(find等),当一个接口继承另一个接口时,它将会继承另一接口的所有方法

例如:

public interface IService<T> {

    /**
     * 默认批次提交数量
     */
    int DEFAULT_BATCH_SIZE = 1000;

    /**
     * 插入一条记录(选择字段,策略插入)
     *
     * @param entity 实体对象
     */
    default boolean save(T entity) {   
        return SqlHelper.retBool(getBaseMapper().insert(entity));
    }
}

ServiceImpl

实现方法:

@Service
public class ErrLevelServiceImpl extends ServiceImpl<ErrLevelMapper, ErrLevel> implements IErrLevelService {
    @Resource
    ErrLevelMapper errLevelMapper ;
    @Override
    public int myAddErrLevel(ErrLevel errLevel) {
        return errLevelMapper.addErrLevel(errLevel);
    }
    @Override
    public int myUpdateErrlevel(ErrLevel errLevel) {
        return errLevelMapper.updateErrlevel(errLevel);
    }
    @Override
    public List<ErrLevel> myQryErrlevel(ErrLevel errLevel) {
        return errLevelMapper.qryErrlevel(errLevel);
    }
    @Override
    public int myDelErrlevel(ErrLevel errLevel) {
        return errLevelMapper.delErrlevel(errLevel);
    }
}

:

需要加上左上角@Serive,标记这个类是用于编写业务逻辑,implements则是实现了业务逻辑层里面的方法

1.  继承自ServiceImpl这个已经实现的类,并且ServiceImpl类需要接收两个类型参数

2. ServiceImpl是Mybatis-Plus框架中为我们提供的一个便利的服务实现类,它接收两个泛型参数:

  1. ErrLevelMapper: 第一个参数代表的是Mapper层的类型。在Mybatis-Plus中,Mapper负责定义与数据库操作相关的方法,比如插入、删除、更新、查询等。

  2. ErrLevel: 第二个参数代表的是实体类型,它对应数据库中的ErrLevel的表。在这里,这个类型的实例将含有和ErrLevel表中一行数据相对应的数据

  3. public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {....}

    关于BaseMapper稍后再讲。

        

三、Mapper


public interface ErrLevelMapper extends BaseMapper<ErrLevel> {
    int addErrLevel(ErrLevel errLevel);
    int updateErrlevel(ErrLevel errLevel);
    List<ErrLevel> qryErrlevel(ErrLevel errLevel);
    int myDelErrlevel(ErrLevel errLevel);
    int delErrlevel(ErrLevel errLevel);
}

            

:继承的Base Mapper这个接口定义了很多关于数据库操作的方法,比如我们平常写的增删查改方法,这个给接口需要一个泛型参数,这个参数是被你操作的实体类里面的类型。但是并不会全部满足你的需求,因此这就需要XML文件和手写SQL语句。

例如:

public interface BaseMapper<T> extends Mapper<T> {

    /**
     * 插入一条记录
     *
     * @param entity 实体对象
     */
    int insert(T entity);
}

四、Xml文件格式:

<?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 values (#{errKey},#{errValue},#{errDec})
    </insert>

</mapper>

"com.webgrd.weburl.mapper.ErrLevelMapper":你的Mapper路径

五、Controller

@RestController
@RequestMapping("/weburl/errLevel")
public class ErrLevelController {
    @Resource
    IErrLevelService errLevelService ;
    @PostMapping("/add")
    public Result<Integer> addErrlvl(@RequestBody ErrLevel errLevel){
        int num = errLevelService.myAddErrLevel(errLevel);
        return Result.success(num,"新增成功");
    }

@RestController

是一个类注解,它告诉 Spring Boot 这是一个控制器类,且返回的数据默认是JSON格式。

JSON格式

JSON是独立于语言的文本格式,很多编程语言都支持JSON,

      数据被组织成键值对形式,每一个键值对可以表示一个属性。例如:

{ "name": "John", "age": 30, "city": "New York" }

也可以是一个数组

{ "names": ["John", "Anna", "Tom"] }

@RequestMapping("/weburl/errLevel")

@RequestMapping("/weburl/errLevel")就像在一座大楼里给一个房间贴上了门牌号。这样,当有人(在这里是一个网络请求)来找这个房间(也就是我们的代码)的时候,他们就知道该去哪里。

@Resource

自动把拥有该注解的属性所需要的资源(通常是一个对象)链接到属性上,也就是说注解之后就可以通过errLevelService随时调用IErrLevelService这个类上的方法

@Resource
IErrLevelService errLevelService ;

Result

处理后返回一个Result<Integer>类型的结果

更简单点来说,这句代码就是在告诉电脑:“你看到我给你定义的这个函数,叫做addErrlvl,你在网页上收到一笔新的信息(我们叫做errLevel这个包裹),你就用这个函数去处理它。待会儿完成后,你把处理结果打包(包装成Result<Integer>)回送给我。

有同学就问,为什么不直接返回结果呢,确实可以直接返回结果,

但是使用Result这样的包装类,有许多优点。

  1. 统一格式:使用Result可以使得你的所有API都返回一个统一的结构,这样前端在处理返回数据时就会更简单,因为它们可以预料到数据的具体格式。

  2. 包含额外信息Result类通常会包含一些额外的字段,如状态码、信息描述等,这样不仅可以告诉前端请求是否成功,还可以告诉它是由于什么原因失败。

  3. 提高可读性Result包装的结果更易于阅读和理解。当其他开发者或者你阅读这段代码时,可以清楚得知道这个函数返回什么样的数据。 

未打包


{
    "name": "张三",
    "age": 20,
    "gender": "male"
}

已打包

{
    "code": 200,
    "message": "操作成功",
    "data": {
        "name": "张三",
        "age": 20,
        "gender": "male"
    }
}

@RequestBody

你输入的数据会被自动转换成可以被系统识别的内容,并把数据放进ErrLevel后就可以直接使用。

 public Result<Integer> addErrlvl(@RequestBody ErrLevel errLevel)

 Result.success(num,"新增成功")的作用:

就像那个告诉你"购买成功"的对话框。它告诉你,你的操作已经成功了,而且"新增了几个(num就代表这个数量)"。整个操作的结果和详情,都包装在一个叫作 Result的盒子里,并且这个盒子被送回给你,这就完成了一整个操作通知的过程。

return Result.success(num,"新增成功");
public static <T> Result<T>success(T data,String message){
    return new Result<>(20000,message,data);
}

先讲到这里了,希望能帮到大家。 

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值