javascript
Spring Boot笔记-目前对Web后端开发的认识
目錄
?
?
基本概念
代碼與實(shí)例
?
基本概念
此篇博文記錄了本人目前對(duì)web后端開(kāi)發(fā)的認(rèn)識(shí)。
Web開(kāi)發(fā)一般的思路:
先dao再service最后controller
而dao又分為dataobject和repository!
而這個(gè)dataobject一般是數(shù)據(jù)庫(kù)的映射,比如MySQL數(shù)據(jù)庫(kù),如果用jpa,那么命名也是有講究的,但如果使用注解,就沒(méi)有這么多的講究了。
而這個(gè)repository,為接口,結(jié)構(gòu)接口extends JpaRepository,并且可以自己寫(xiě)一些方法。這里就可以通過(guò)jpa操作數(shù)據(jù)。
?
個(gè)人覺(jué)得Service層一般先搞一個(gè)接口,把需要的邏輯業(yè)務(wù)寫(xiě)到這個(gè)接口里面,在用一個(gè)類(lèi),繼承這個(gè)接口,然后通過(guò)調(diào)用repository,把那些數(shù)據(jù)給記錄進(jìn)去。這里可以看到一般Service中都有一個(gè)@Autowired,把Repository給注入進(jìn)去了。
?
對(duì)于Controller層目前還沒(méi)有什么深的體會(huì)。
?
對(duì)于dao,感覺(jué)是搞數(shù)據(jù)的,估計(jì)這個(gè)就叫做數(shù)據(jù)持久層,這個(gè)名字可真騷氣啊。
對(duì)于service,感覺(jué)是搞邏輯業(yè)務(wù)的,但邏輯業(yè)務(wù)不夠的時(shí)候,可以新增幾個(gè)函數(shù)到接口里面,繼承的類(lèi)去實(shí)例化。
?
還有個(gè)關(guān)鍵點(diǎn):個(gè)人覺(jué)得除非很熟悉這套模式可以不進(jìn)行g(shù)o to test,這個(gè)go to test還是很有用的,至少可以保證這部分代碼是可以跑的。
還有個(gè)關(guān)鍵的地方,就是少去用0,1,表示狀態(tài),java中的枚舉,感覺(jué)比C++的爽很多,感覺(jué)就和類(lèi),對(duì)象一樣。多使用枚舉去表示狀態(tài),增加可讀性
?
?
代碼與實(shí)例
如下的結(jié)構(gòu):
其中dataobject就是放基本數(shù)據(jù),與數(shù)據(jù)庫(kù)進(jìn)行映射的。
其中enums就是增加代碼可讀性,避免大量的狀態(tài)用0,1表示。
其中repository為存儲(chǔ)數(shù)據(jù)的,service就是操作這個(gè)的。
其中service中有接口,和實(shí)例,這個(gè)要分開(kāi),這樣才能使得結(jié)構(gòu)更加清晰,
下面給出一組的代碼(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 {@Idprivate String productId;//名字private String productName;//單價(jià)private BigDecimal productPrice;//庫(kù)存private Integer productStock;//描述private String productDescription;//小圖private String productIcon;//狀態(tài) 0 正常, 1 下架private Integer productStatus;//類(lèi)目編號(hào)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<ProductInfo, String> {//Dao層的東西主要在service中使用List<ProductInfo> 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);//查詢(xún)所有商品列表List<ProductInfo> findUpAll();Page<ProductInfo> 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 {@Autowiredprivate ProductInfoRepository repository;@Overridepublic ProductInfo findOne(String productId) {return repository.findOne(productId);}@Overridepublic List<ProductInfo> findUpAll() {return repository.findByProductStatus(ProductStatusEnum.UP.getCode());}@Overridepublic Page<ProductInfo> findAll(Pageable pageable) {return repository.findAll(pageable);}@Overridepublic ProductInfo save(ProductInfo productInfo) {return repository.save(productInfo);} }另外的那個(gè)枚舉
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;} }?
總結(jié)
以上是生活随笔為你收集整理的Spring Boot笔记-目前对Web后端开发的认识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HTTP之Last-Modified、E
- 下一篇: Java获取成员变量构造函数信息