Spring Boot笔记-目前对Web后端开发的认识

目录

基本概念

此篇博文记录了本人目前对web后端开发的认识。

Web开发一般的思路:

先dao再service最后controller

而dao又分为dataobject和repository!

而这个dataobject一般是数据库的映射,比如MySQL数据库,如果用jpa,那么命名也是有讲究的,但如果使用注解,就没有这么多的讲究了。

而这个repository,为接口,结构接口extends JpaRepository,并且可以自己写一些方法。这里就可以通过jpa操作数据。

个人觉得Service层一般先搞一个接口,把需要的逻辑业务写到这个接口里面,在用一个类,继承这个接口,然后通过调用repository,把那些数据给记录进去。这里可以看到一般Service中都有一个@Autowired,把Repository给注入进去了。

对于Controller层目前还没有什么深的体会。

对于dao,感觉是搞数据的,估计这个就叫做数据持久层,这个名字可真骚气啊。

对于service,感觉是搞逻辑业务的,但逻辑业务不够的时候,可以新增几个函数到接口里面,继承的类去实例化。

还有个关键点:个人觉得除非很熟悉这套模式可以不进行go to test,这个go to test还是很有用的,至少可以保证这部分代码是可以跑的。

还有个关键的地方,就是少去用0,1,表示状态,java中的枚举,感觉比C++的爽很多,感觉就和类,对象一样。多使用枚举去表示状态,增加可读性

图片[1]-Spring Boot笔记-目前对Web后端开发的认识-JieYingAI捷鹰AI

代码与实例

如下的结构:

图片[2]-Spring Boot笔记-目前对Web后端开发的认识-JieYingAI捷鹰AI

其中dataobject就是放基本数据,与数据库进行映射的。

其中enums就是增加代码可读性,避免大量的状态用0,1表示。

其中repository为存储数据的,service就是操作这个的。

其中service中有接口,和实例,这个要分开,这样才能使得结构更加清晰,

下面给出一组的代码(ProductInfo的dao和service层代码)

ProductInfo.java

package selldemo.demo.dataobject;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.math.BigDecimal;
@Entity
@Data
public class ProductInfo {
    @Id
    private String productId;
    //名字
    private String productName;
    //单价
    private BigDecimal productPrice;
    //库存
    private Integer productStock;
    //描述
    private String productDescription;
    //小图
    private String productIcon;
    //状态 0 正常, 1 下架
    private Integer productStatus;
    //类目编号
    private Integer categoryType;
}

ProductInfoRepository.java

package selldemo.demo.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import selldemo.demo.dataobject.ProductInfo;
import java.util.List;
public interface ProductInfoRepository extends JpaRepository {
    //Dao层的东西主要在service中使用
    List findByProductStatus(Integer productStatus);
}

ProdctService.java

package selldemo.demo.service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import selldemo.demo.dataobject.ProductInfo;
import java.util.List;
//service层
public interface ProductService {
    ProductInfo findOne(String productId);
    //查询所有商品列表
    List findUpAll();
    Page findAll(Pageable pageable);
    ProductInfo save(ProductInfo productInfo);
}

ProductServiceImpl.java

package selldemo.demo.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import selldemo.demo.dataobject.ProductInfo;
import selldemo.demo.enums.ProductStatusEnum;
import selldemo.demo.repository.ProductInfoRepository;
import selldemo.demo.service.ProductService;
import java.util.List;
@Service
public class ProductServiceImpl implements ProductService {
    @Autowired
    private ProductInfoRepository repository;
    @Override
    public ProductInfo findOne(String productId) {
        return repository.findOne(productId);
    }
    @Override
    public List findUpAll() {
        return repository.findByProductStatus(ProductStatusEnum.UP.getCode());
    }
    @Override
    public Page findAll(Pageable pageable) {
        return repository.findAll(pageable);
    }
    @Override
    public ProductInfo save(ProductInfo productInfo) {
        return repository.save(productInfo);
    }
}

另外的那个枚举

ProductStatusEnum.java

package selldemo.demo.enums;
import lombok.Getter;
@Getter
public enum ProductStatusEnum {
    UP(0, "在架"),
    DOWN(1, "下架");
    private Integer code;
    private String message;
    ProductStatusEnum(Integer code, String message){
        this.code = code;
        this.message = message;
    }
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
来说点什么吧!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容