Spring Boot學習筆記(三)——使用JPA查詢資料庫返回需要的資料
1.概述
在上一篇中,我們已經學會了如何建立執行一個Spring Boot程式,但是他還遠遠滿足不了一個網站的基本需求,完成這篇的學習後我們就能實現一個簡單的雛形。
2.目標
在本篇中,實現的簡單的資料庫訪問,讀取資料的功能。
3.詳細步驟
(1)在第二次的專案中的pom.xml檔案加入Jpa以及你所使用的資料庫所對應的依賴,Jpa是Spring Boot中對映資料庫所需的依賴,我使用的是mysql資料庫,所以匯入mysql資料庫依賴。
<dependency>
<groupId>org.springframework.boot</groupId >
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
(2)配置application.properties檔案,請結合自身的資料庫填寫這些配置項。
spring.datasource.url=***
spring.datasource.username=***
spring.datasource.password=***
spring.datasource.driver-class-name=***
這裡採用的方式是通過內建的配置文件覆蓋Spring Boot的自動配置。
(3)編寫我們的實體類
@Entity
@Table
public class User {
@Id
private String Id;
private String name;
public User() {
}
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"Id='" + Id + '\'' +
", name='" + name + '\'' +
'}';
}
}
@Entity註解是用來申明此類是一個實體類,@Table註解表名了此類與資料庫中表相對應,對此類進行操作就是對資料庫的表進行操作
(4)編寫dao/repository層
此層為對資料的基本處理層,用來編寫直接對資料庫進行操作的程式碼。
由於我們匯入了JPA依賴,很多通常的查詢,刪除,更新等操作可以不用在此編寫了,Spring Boot提供了一些介面。而且還可以在介面中宣告函式名稱就能達到想要的效果,無需去實現函式,這真的是太便利了不是嗎ヾ(゚∀゚ゞ)
@Repository
public interface UserRepository extends JpaRepository<User,String> {
}
@Repository註解是告訴Spring Boot這是一個倉庫類,會在啟動的時候幫你自動注入。JpaRepository裡面含有一般資料庫操作所需要的介面,我們會在service層中呼叫他們。
(5)編寫service層
service層主要用於處理邏輯,是業務邏輯層。在此處我們編寫了一個介面和一個實現類。介面的設計是為了滿足鬆耦合的需求。
介面UserService的程式碼:
public interface UserService {
List<User> getAll();
}
實現類UserServiceImpl的程式碼:
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserRepository userRepository;
@Override
public List<User> getAll() {
return userRepository.findAll();
}
}
@Service註解表名其是一個服務類,服務啟動時,Spring Boot會掃描到該類,並將其加入到容器中
@Autowired會自動將容器中的Bean注入其中。
(6)編寫Control層
此層主要進行對頁面的處理,包括跳轉或者傳參等等。
@Controller
public class UserControl {
@Autowired
private UserServiceImpl userService;
@RequestMapping("/")
public String toIndex(Model model){
List<User> userList=userService.getAll();
model.addAttribute("userList",userList);
return "index";
}
}
@Controller註解表明其為控制器類。
toIndex方法中多了一個Model引數,Model引數為頁面傳來的模型類,通過對模型類進行操作能夠完成對頁面進行傳參。
(7)頁面的編寫
index.html頁面程式碼如下:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<ul>
<li th:each="user : ${userList}">
<span th:text="${user.name}"></span>
</li>
</ul>
</body>
</html>
這個頁面中的 ‘th:’表名使用thymeleaf引擎去解析,這樣才能使靜態頁面動態化。想要了解更多的同學,可以自行百度thymeleaf的用法。
‘${*}’為Spring EL表示式,使用Spring EL表示式來獲取後臺傳來的各種資料。
(8)專案啟動後執行效果
資料庫中的資料:
頁面的展示效果: