哪些專門做批發(fā)的網(wǎng)站公關(guān)公司是干嘛的
引言:歡迎各位點擊收看本篇博客,在歷經(jīng)很多的艱辛,我也是成功由小白淺淺進入了入門行列,也是收貨到很多的知識,每次看黑馬的JavaWeb課程視頻,才使一個小菜雞見識到了Java前后端是如何進行交互訪問的,話不多說,進入正題。
目錄
一.三層框架:
二.前后端交互過程:
?三.如何進行接口測試:
?四.三層架構(gòu)的設(shè)計模式:
五.正式入門三層框架:
1.首先要寫controller層:
2.service層的寫法:
3.dao層的寫法:
?
一.三層框架:
我們在進行程序開發(fā)時,應(yīng)該遵守單一職責原則,意思就是盡可能讓每個接口、類、方法的職責更單一,如果我們將整個后端代碼放在一個包一個類中,不僅僅是代碼的可閱讀性差,而且代碼冗雜,耦合度很高。
1. controller:控制層,負責接受前端發(fā)送來的請求,對請求進行處理,并相應(yīng)數(shù)據(jù)。
2. service:業(yè)務(wù)邏輯層,處理具體實現(xiàn)的業(yè)務(wù)邏輯。
3. dao:數(shù)據(jù)訪問層(持久層),負責數(shù)據(jù)訪問操作,包括數(shù)據(jù)的增刪改查。
二.前后端交互過程:
首先通過瀏覽器發(fā)起請求,經(jīng)過DispatcherServlet(稱為核心控制器或者前端控制器)將請求信息封裝到HttpServletRequest這個對象內(nèi),然后再將這個請求轉(zhuǎn)給后面的每個Controller程序,由Controller程序?qū)ζ溥M行處理(Controller程序通過調(diào)用Service程序,然后再Service程序中調(diào)用Mapper程序,最后Mapper程序處理完返回給Service然后再返回給Controller),隨后Controller程序?qū)⑻幚硗甑捻憫?yīng)信息返回給DispatcherServlet的HttpServletResponse對象中,然后DispatcherServlet再給瀏覽器響應(yīng)數(shù)據(jù)。這也就是BS架構(gòu),瀏覽器/服務(wù)器架構(gòu)模式。
?三.如何進行接口測試:
我們在寫完后端程序肯定需要進行測試來判斷代碼的準確性,但是如果我們沒有前端頁面進行測試,我們?nèi)绾芜M行接口測試呢?這個時候就需要使用Postman或者Apifox來進行接口測試。
?四.三層架構(gòu)的設(shè)計模式:
根據(jù)第一與第二點,我們初步理解了三層框架的進行順序,那么三層框架該是什么樣的創(chuàng)建形式呢?
根據(jù)上圖,我們可以看到這個是基于Springboot來開發(fā)的,在java.com.itheima包下創(chuàng)建了四個包以及運行類,而這四個包分別裝有其分別對應(yīng)的類與接口。?
我們都知道接口是Java程序?qū)︻惗x其規(guī)則,所以一般我們在開發(fā)的時候會現(xiàn)在接口內(nèi)寫入想要實現(xiàn)的方法名,然后再實現(xiàn)類中寫出實現(xiàn)方法。?
五.正式入門三層框架:
在學習三層框架,我們都知道三層框架有controller,service,dao三層,所以咱們在寫接口的過程要按照其實現(xiàn)順序依次寫入。
我們先在pom.xml導(dǎo)入依賴以及在application.properties中寫入MySQL的驅(qū)動以及配置文件的相關(guān)信息,,然后在tlias數(shù)據(jù)庫下創(chuàng)建一個Dept部門類和一個Emp員工類。
pom.xml文件導(dǎo)入依賴:1.Springboot 2.MySQL 3.Lombok 4.pagehelper(分頁插件)
application.properties配置文件寫法:
spring.application.name=tliasspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/tliasspring.datasource.username=rootspring.datasource.password=lxs15241690479mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImplmybatis.configuration.map-underscore-to-camel-case=true
1.首先要寫controller層:
我們在寫controller層之前要知道SpringBoot對注解的使用:
1. @ResponseBody:放在開頭代表每個方法的返回值都會作為響應(yīng)數(shù)據(jù),如果是對象或者集合會先轉(zhuǎn)為json格式然后再來響應(yīng)。
2. @Controller:控制器組件
3. @RestController:主要由ResponseBody+Controller兩個注解組成,也就會有這兩個注解的作用。
4. @RequestMapping("url"):一個用來處理請求地址映射的注解,可用于映射一個請求或一個方法,可以用在類或方法上。
5. @***Mapping:這***是代表其有很多的樣式,也就是要填入請求方式,如:Get,Post,Delete等。跟@RequestMapping差不多,但是使用這個注解就要跟隨該注解前的請求方式才能夠請求。
6. @RequestParam:
?用于將指定的請求參數(shù)賦值給方法中的形參。
有三個屬性:
(1)value:請求參數(shù)名(必須配置)(2)required:是否必需,默認為 true,即 請求中必須包含該參數(shù),如果沒有包含,將會拋出異常(可選配置)
(3)defaultValue:設(shè)置默認值,如果設(shè)置了該值,required 將自動設(shè)為 false,無論你是否配置了required,配置了什么值,都是 false(可選配置)
7.@PathVariable:
? ? @PathVariable是Rest風格衍生出的占位符,只支持一個屬性value,類型是為String,代表綁定的屬性名稱。默認不傳遞時,綁定為同名的形參。 用來便捷地提取URL中的動態(tài)參數(shù)。應(yīng)用時,在@RequestMapping請求路徑中,將需要傳遞的參數(shù)用花括號{}括起來,然后,通過@PathVariable("參數(shù)名稱")獲取URL中對應(yīng)的參數(shù)值。如果@PathVariable標明參數(shù)名稱,則參數(shù)名稱必須和URL中參數(shù)名稱一致。
8. @Autowired:自動注入,
上一篇Mybatis講過,這里不細說。有需要了解請?zhí)D(zhuǎn):Mybatis不明白?就這一篇帶你輕松入門_mapper 新建一張表在哪里配置-CSDN博客
下面將@RequestBody放在前面的目的是為了簡化寫法,因為下面的@***Mapping()內(nèi)都需要加上某url所以我們可以將/depts提前來簡化寫法,所以下面那個@GetMapping后面不是沒有接口地址而是因為簡化寫法省略。
@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {@Autowiredprivate DeptService deptService;@GetMappingpublic Result list(){log.info("查詢?nèi)坎块T數(shù)據(jù)");List<Dept> deptList = deptService.list();return Result.success(deptList);}@DeleteMapping("/{id}") //動態(tài)接收數(shù)據(jù)public Result delete(@PathVariable Integer id){log.info("根據(jù)id刪除部門:{}" + id);deptService.delete(id);return Result.success();}@PostMappingpublic Result add(@RequestBody Dept dept){//json格式使用實體類接受log.info("新增部門:{}" , dept);deptService.add(dept);return Result.success();}}
有時我們?yōu)榱私邮艽罅康臄?shù)據(jù)也會定義一個實體類然后使用@RequestBody注解進行接收。
然后我們在這些Controller程序的方法看見其內(nèi)部緊跟隨調(diào)用其對應(yīng)的Service方法來操作所接收的數(shù)據(jù),隨后return返回一個Result類success方法。下面的是Result類->
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {private Integer code;//響應(yīng)碼,1 代表成功; 0 代表失敗private String msg; //響應(yīng)信息 描述字符串private Object data; //返回的數(shù)據(jù)//增刪改 成功響應(yīng)public static Result success(){return new Result(1,"success",null);}//查詢 成功響應(yīng)public static Result success(Object data){return new Result(1,"success",data);}//失敗響應(yīng)public static Result error(String msg){return new Result(0,msg,null);}
}
上面的三個注解不懂的可以看我上篇文章,里面詳細寫出了Mybatis的相關(guān)內(nèi)容。
?既然我們會調(diào)用service進行操作,所以接下來我們就進行service的操作。
2.service層的寫法:
@Service:Spring Framework 中的一種注解,它標識了這個類是一個業(yè)務(wù)邏輯層的服務(wù) Bean。這意味著當 Spring 應(yīng)用啟動時,該 Bean 會被自動創(chuàng)建并加入到 Spring 應(yīng)用上下文中。簡而言之,@Service 注解是一種用于標記服務(wù)層 Bean 的注解,是在 Spring Boot 應(yīng)用中實現(xiàn)業(yè)務(wù)邏輯復(fù)用的重要方法之一。
業(yè)務(wù)邏輯層,處理具體實現(xiàn)的業(yè)務(wù)邏輯(處理數(shù)據(jù)),我們需要再其內(nèi)部加上很多的操作方法所以先寫接口后寫類。
接口內(nèi)寫入規(guī)則:
public interface DeptService {List<Dept> list();void delete(Integer id);void add(Dept dept);
}
然后創(chuàng)建其實體類:
@Service
public class DeptServiceImpl implements DeptService {@Autowiredprivate DeptMapper deptMapper;@Overridepublic List<Dept> list() {return deptMapper.list();}@Overridepublic void delete(Integer id) {deptMapper.deleteById(id);}@Overridepublic void add(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setUpdateTime(LocalDateTime.now());deptMapper.insert(dept);}
}
我們發(fā)現(xiàn)這層的方法體內(nèi)代碼非常的少,是不是可以直接與Mapper合并一層?
nonono,絕對不行的,這樣會破壞原本三層架構(gòu)的完整與獨立性,而且三層架構(gòu)低耦合,并且其注解的獨立使用也無法讓你變成兩層架構(gòu),其實這個只是當前的代碼不用寫很多代碼,如果咱們以后寫大程序就可以看出service層的重要,每一層都是不可缺少的。
3.dao層的寫法:
對于dao層,主要通過注解或者xml來操作數(shù)據(jù),這里需要用到Mybatis的基礎(chǔ),詳情請看下面鏈接,有我碼一萬四千多字的博客:Mybatis不明白?就這一篇帶你輕松入門_mapper 新建一張表在哪里配置-CSDN博客
@Mapper
public interface DeptMapper {@Select("select * from dept")List<Dept> list();@Delete("delete from dept where id = #{id}")void deleteById(Integer id);@Insert("insert into dept(name, create_time, update_time) value (#{name} , #{createTime} , #{updateTime})")void insert(Dept dept);
}
隨后我們點擊執(zhí)行類運行程序,然后使用Postman或者Apifox進行測試接口,同時也要注意請求方式的使用以及路徑的正確書寫,我們一般寫成localhost:8080/depts/......,剩下的就由你來完成了。
最后,我們可以看出三層框架很簡單,但是內(nèi)部用到了很多知識點,這就需要咱們多學多練多觀察,別忘了點個關(guān)注,多多支持,記得三連哈,有問題歡迎在評論區(qū)里留言。