首頁 > 軟體

渣本逆襲!擼了阿里P7大佬SpringBoot筆記,斬獲了25Koffer(下)

2021-05-22 09:30:40

前言:開頭就不多敘述了,接上篇繼續講《SpringBoot簡明教程(下)》。

5、常用註解

RequestMapping

public @interface RequestMapping {

String name() default "";

@AliasFor("path")

String[] value() default {};

@AliasFor("value")

String[] path() default {};

RequestMethod[] method() default {};

String[] params() default {};

String[] headers() default {};

String[] consumes() default {};

String[] produces() default {};

}

value: 指定請求的實際地址,指定的地址可以是具體地址、可以RestFul動態獲取、也可以使用正則設定method: 指定請求的method類型, 分為GET、POST、PUT、DELETE等consumes: 指定處理請求的提交內容類型(Content-Type),例如application/json, text/htmlproduces: 指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回params: 指定request中必須包含某些參數值是,才讓該方法處理headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求主要理解value及method,其餘參數一般不用。

三、Service層(demo2_service項目)

1、新建項目

新建項目過程與demo1_controller項目類似,不再贅述

2、Servie層處理前端請求並返回資料

1.環境準備

pom.xml檔案裡也要新增thymeleaf模組,指定thymeleaf版本,以及新增maven-compiler-plugin插件指定jdk版本,具體方法demo1_controller已經展示過

2.新建StudentController類

在src/main/java/com/example/demo2_service目錄下新建controller資料夾,並在controller資料夾下新建StudentController類,StudentController上註解@RestController

3.新建Service介面及ServiceImpl類

在src/main/java/com/example/demo2_service目錄下新建service資料夾,在service資料夾下新建StudentService介面impl資料夾,在impl資料夾下再新建StudentServiceImpl類並實現StudentService介面,在StudentServiceImpl類上用@Service註解表明這是一個Service類

4.在Service介面及ServiceImpl類中聲明及實現方法

在StudentService介面中聲明getFibonacciResult(Integer number)方法

/**

* 通過前端傳入資料計算斐波那契數列值

* @param number

* @return

*/

public Integer getFibonacciResult(Integer number);

在StduentServiceImpl類中實現getFibonacciResult(Integer number)方法

/**

* 通過前端傳入資料計算斐波那契數列值

* @param number

* @return

*/

@Override

public Integer getFibonacciResult(Integer number) {

if (number == 1 || number == 2) {

return 1;

} else {

return getFibonacciResult(number - 1) + getFibonacciResult(number - 2);

}

}

5.編寫controller類

使用@Autowired自動注入StudentService,並編寫getFibonacciResult(Integer number)方法

@Autowired

StudentService studentService;

/**

* 前端輸入初始值,返回斐波那契數列值

* @param number

* @return

*/

@RequestMapping("/getFibonacciResult")

public Integer getFibonacciResult(Integer number) {

12 return studentService.getFibonacciResult(number);

13 }

通過@Autowired自動注入StudentService,就可以從controller層使用service層的類物件,並呼叫其方法,物件的創建、銷燬等生命週期由SpringBoot管理,開發者不用考慮

6.配置SpringMVC

(此步驟非必要,一般是在springboot項目中,修改預設啟動頁(預設啟動頁是static/index.html),修改@ResponseBody返回json轉換方式,新增資源過濾,配置跨域,新增攔截器等操作需要配置mvc。)

在src/main/java/com/example/demo2_service目錄下新建config資料夾,並在config資料夾下新建MyMvcConfig類

MyMvcConfig類

package com.example.demo2_service.config;

import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration

public class MyMvcConfig implements WebMvcConfigurer {

/**

* 檢視控制器

* @param registry

*/

@Override

public void addViewControllers(ViewControllerRegistry registry) {

//初始頁面設定為"student"

//第一次參數為指定訪問路徑,第二個參數為指定訪問檢視名

registry.addViewController("/").setViewName("student");

}

20 }

7.新建並編寫Student.html檔案

在resources/templates目錄下新建Student.html檔案,並編寫一個input輸入框與button按鈕,用於前端向後端提交資料

1 <!DOCTYPE html>

2 <htmlxmlns:th="http://www.thymeleaf.org">

3 <head>

4 <meta charset="UTF-8">

5 <title>Title</title>

6 </head>

7 <body>

8 <div>

9 <form th:action="@{/getFibonacciResult}" method="post">

10 <input name="number">

11 <button type="submit" th:text="提交"></button>

12 </form>

13 </div>

14 </body>

15 </html>

8.業務流程

3、Service

層將Dao層的資料傳遞給前端

一般dao層是用於讀寫資料庫的層,此處使用程式碼中固定的資料來模擬資料庫讀寫,章節四中會連線資料庫,演示實際讀寫資料庫的操作。

1.新建StudentDao類

在src/main/java/com/example/demo2_service目錄下新建dao資料夾,並在dao資料夾下新建StudentDao類,StudentDao上註解@Repository表明這是一個Dao類

注意:正常SpringBoot項目開發中,Dao層一般設定為介面而非具體類

2.編寫StudentDao類

package com.example.demo2_service.dao;

import org.springframework.stereotype.Repository;

/**

* 資料訪問層

*/

@Repository

public class StudentDao {

String studentDaoString = new String("from StudentDao");

/**

* 得到Dao層資料

* @return

*/

public String getStudentDaoString() {

return studentDaoString;

}

}

此處getStudentDaoString()方法為返回一個字元串

3.編寫StudentService介面與StudentServiceImpl類

StduentService介面

package com.example.demo2_service.service;

/**

* 業務層

*/

public interface StudentService {

/**

* 通過前端傳入資料計算斐波那契數列值

* @param number

* @return

*/

public Integer getFibonacciResult(Integer number);

/**

* 得到Dao層資料

* @return

*/

public String getStudentDaoString();

}

StudentServiceImpl類

4.編寫StduentController類

5.業務流程

前端訪問http://localhost:8080/getStudentDaoString地址

四、Dao層(demo3_dao項目)

1、新建項目

新建項目過程與demo1_controller項目類似,不再贅述

2、環境準備

需要安裝

MySQL(建議安裝MySQL8版本)

Navicat for MySQL

1.pom.xml

jdbc模組、druid模組、log4j2模組、mysql驅動模組、mybatis模組

同樣使用maven-compiler-plugin插件指定項目源碼及編譯後的Jdk版本

1 <!-- maven-compiler-plugin插件 指定項目源碼及編譯後的Jdk版本 -->

2 <plugin>

3 <groupId>org.apache.maven.plugins</groupId>

4 <artifactId>maven-compiler-plugin</artifactId>

5 <version>3.8.1</version>

6 <configuration>

7 <source>1.8</source>

8 <target>1.8</target>

9 </configuration>

10 </plugin>

2.application.yaml

預設配置檔案為application.properties,我們採用yaml格式的配置檔案,在resources資料夾下新建application.yaml檔案,原有的application.properties可以刪除

配置檔案此處不進行詳細說明

3.Druid配置類

在src/main/java/com/example/demo3_dao目錄下新建config資料夾,並在config資料夾下新建DruidConfig類

4.log4j日誌

在resources目錄下新建log4j.properties檔案。

1 log4j.rootLogger=DEBUG, stdout

2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender

3 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

4 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

5.student.sql建表語句

在resources目錄下新建sql資料夾,將student.sql檔案匯入sql資料夾

SET NAMES utf8;

SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

-- Table structure for student

-- ----------------------------

CREATE TABLE IF NOT EXISTS `student` (

`id` int NOT NULL COMMENT '學號',

`name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',

`score` int NOT NULL COMMENT '成績',

`birthplace` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '籍貫',

`birthday` date NOT NULL COMMENT '生日',

PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

6.Student實體類

在src/main/java/com/example/demo3_dao目錄下新建domain資料夾,並在domain下新建Student

3、連線資料庫

此時可以在測試類中檢視資料來源

src/test/java/com/example/demo3_dao/Demo3DaoApplicationTests

package com.example.demo3_dao;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;

import java.sql.Connection;

import java.sql.SQLException;

@SpringBootTest

class Demo3DaoApplicationTests {

@Autowired

DataSource dataSource;

/**

* 測試檢視資料來源

* @throws SQLException

*/

@Test

void contextLoads() throws SQLException {

System.out.println(dataSource.getClass());

Connection connection = dataSource.getConnection();

System.out.println("資料來源:"+connection);

connection.close();

}

}

運行測試類的contextLoads()方法,可在控制檯看到druid資料來源

運行程式,控制檯可以發現數據庫建表語句

通過Navicat可以發現springboot下已經成功新建資料表

4、註解法進行CRUD

StduentDao

package com.example.demo3_dao.dao;

import com.example.demo3_dao.domain.Student;

import org.apache.ibatis.annotations.*;

import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper

@Repository

public interface StudentDao {

/**

* 新增學生資訊

* @param student

*/

@Insert("INSERT INTO student(id,name,score,birthplace,birthday) VALUES (#{id},#{name},#{score},#{birthplace},#{birthday})")

public void AddStudent(Student student);

/**

* 刪除學生資訊

* @param id

*/

@Delete("DELETE FROM student WHERE id=#{id}")

public void DeleteStudentById(Integer id);

/**

* 修改學生資訊

* @param student

*/

@Update("UPDATE student SET name=#{name},score=#{score},birthplace=#{birthplace},birthday=#{birthday} WHERE id=#{id}")

public void UpdateStudent(Student student);

/**

* 查詢某個學生資訊

* @param id

* @return

*/

@Select("SELECT * FROM student WHERE id=#{id}")

public Student FindStudentById(Integer id);

/**

* 查詢所有學生資訊

* @return

*/

@Select("SELECT * FROM student")

public List<Student> FindAllStudent();

}

本項目未編寫controller層、service層等,就不具體實現其功能,可以通過使用測試類(Demo3DaoApplicationTests)檢視是否成功進行資料互動

1.測試新增學生功能

新增學生測試方法

/**

* 測試新增學生

*/

@Test

public void AddStudent() {

//預設一個學生資訊

Student student = new Student();

student.setId(1);

student.setName("張三");

student.setScore(100);

student.setBirthplace("四川");

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

Date date = new Date();

try {

date = simpleDateFormat.parse("2020-02-02");

} catch (ParseException e) {

e.printStackTrace();

}

student.setBirthday(date);

//在控制檯輸出學生資訊

System.out.println("學生資訊:"+student);

//將學生資訊存入資料庫

studentDao.AddStudent(student);

}

運行測試方法

控制檯可以看到學生資訊

通過Navicat可以看到資料被寫入資料庫

2.測試查詢學生功能

通過Navicat在資料庫寫入幾條資料

查詢學生測試方法

/**

* 測試查詢學生

* @return

*/

@Test

public void FindStudentById() {

//從資料庫查詢學生

Student student = studentDao.FindStudentById(2);

//在控制檯輸出學生資訊

System.out.println("查詢的學生資訊:"+student);

}

運行測試方法

可在控制檯看到查詢學生的資訊

3.測試修改學生功能

修改學生測試方法

/**

* 測試修改學生

*/

@Test

public void UpdateStudent() {

//預設一個學生資訊

Student student = new Student();

//待修改學生的學號

student.setId(1);

//修改其他資訊

student.setName("張三");

student.setScore(60);

student.setBirthplace("新疆");

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

Date date = new Date();

try {

date = simpleDateFormat.parse("2020-01-01");

} catch (ParseException e) {

e.printStackTrace();

}

student.setBirthday(date);

//在控制檯輸出學生資訊

System.out.println("修改後的學生資訊:"+student);

//修改學生資訊

studentDao.UpdateStudent(student);

}

運行測試方法

可在控制檯看到修改後的學生的資訊

通過Navicat可以看到資料庫中的內容已經被修改

4.測試刪除學生功能

刪除學生測試方法

1 /**

2 * 測試刪除學生 */

3 @Test

4 public void DeleteStudentById() {

5 //刪除學號為2的學生

6 studentDao.DeleteStudentById(2);

7 }

運行測試方法

通過Navicat可以看到資料庫中的內容已經被修改

5、配置檔案法進行CRUD

1.新建並編寫StduentMapper.xml檔案

在resources目錄下新建mybatis資料夾,在mybatis資料夾下新建mapper資料夾,在mapper資料夾下新建StudentMapper.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.example.demo3_dao.dao.StudentDao">

<!-- 新增學生 -->

<insert id="AddStudent">

INSERT INTO student(id,name,score,birthplace,birthday) VALUES (#{id},#{name},#{score},#{birthplace},#{birthday})

</insert>

<!-- 刪除學生 -->

<delete id="DeleteStudentById">

DELETE FROM student WHERE id=#{id}

</delete>

<!-- 更新學生 -->

<update id="UpdateStudent">

UPDATE student SET name=#{name},score=#{score},birthplace=#{birthplace},birthday=#{birthday} WHERE id=#{id}

</update>

<!-- 查詢某個學生 -->

<select id="FindStudentById" resultType="com.example.demo.domain.Student">

SELECT * FROM student WHERE id=#{id}

</select>

<!-- 查詢所有學生 -->

<select id="FindAllStudent" resultType="com.example.demo.domain.Student">

SELECT * FROM student

</select>

</mapper>

2.在application.yaml檔案中配置mybatis資訊

1 #mybatis配置

2 mybatis:

3 #指定sql對映檔案路徑

4 mapper-locations: classpath:mybatis/mapper/*.xml

3.StudentDao.interface方法名與StduentMapper.xml中的id名要一一對應

如StduentDao.interface中新增學生

1 public void AddStudent(Student student);

StudentMapper.xml中新增學生

1 <!-- 新增學生 -->

2 <insert id="AddStudent">

3 INSERT INTO student(id,name,score,birthplace,birthday) VALUES (#{id},#{name},#{score},#{birthplace},#{birthday})

4 </insert>

此時StudentDao.interfeace內容為

package com.example.demo3_dao.dao;

import com.example.demo3_dao.domain.Student;

import org.apache.ibatis.annotations.*;

import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper

@Repository

public interface StudentDao {

/**

* 新增學生資訊

* @param student

*/

public void AddStudent(Student student);

/**

* 刪除學生資訊

* @param id

*/

public void DeleteStudentById(Integer id);

/**

* 修改學生資訊

* @param student

*/

public void UpdateStudent(Student student);

/**

* 查詢某個學生資訊

* @param id

* @return

*/

public Student FindStudentById(Integer id);

/**

* 查詢所有學生資訊

* @return

*/

public List<Student> FindAllStudent();

}

本項目未編寫controller層、service層等,就不具體實現其功能

可以從測試類中驗證CRUD操作,與註解法類似,此處不再演示

五、Demo項目(整合了前面全部功能的一個演示項目)

1、目錄結構

見 一、SpringBoot簡介->4、SpringBoot項目->1.SpringBoot項目常見目錄結構

2、層級簡介

src/main/java/com/example/demo目錄下

config是配置資料夾

controller是控制層資料夾

dao是資料訪問層資料夾

domain是資料表物件層資料夾

service是業務層資料夾

src/main/resources資料夾下

mybatis是mybatis相關資料夾

sql是Mysql語句資料夾

static是靜態資原始檔夾

templates是模板資料夾

src/test目錄下與測試相關

pom.xml與配置依賴相關

3、CRUD演示

1.新增學生

初始頁面

進入新增頁面並填寫資訊

點選新增按鈕回到學生列表頁面

2.查詢學生

此項目僅做了查詢所有學生資訊,點選「查詢所有學生資訊」按鈕即可在學生列表頁面看到所有學生資訊

3.修改學生

點選需要修改的學生資訊右側的修改按鈕,此處選擇修改2號學生,進入修改頁面

點選修改按鈕返回至學生列表頁面

4.刪除學生

點選需要刪除的學生資訊右側的刪除按鈕,此處選擇刪除4號學生,重新整理學生列表頁面

以上就是《《SpringBoot簡明教程(下)》》的分享。也歡迎大家交流探討,該文章若有不正確的地方,希望大家多多包涵。創作不易,你們的支援就是我最大的動力,如果對大家有幫忙給個贊哦~~~


IT145.com E-mail:sddin#qq.com