SpringBoot使用(一)--- 構建簡單的應用
阿新 • • 發佈:2018-11-13
Spring Boot提供了一種新的程式設計正規化,能在最小的阻力下開發Spring應用程式。有了它,
你可以更加敏捷地開發Spring應用程式,專注於應用程式的功能,不用在Spring的配置上多花功
夫,甚至完全不用配置。實際上, Spring Boot的一項重要工作就是讓Spring不再成為你成功路上
的絆腳石。
Spring Boot將很多魔法帶入了Spring應用程式的開發之中,其中最重要的是以下四個核心。
- 自動配置:針對很多Spring應用程式常見的應用功能, Spring Boot能自動提供相關配置。
- 起步依賴:告訴Spring Boot需要什麼功能,它就能引入需要的庫。
- 命令列介面:這是Spring Boot的可選特性,藉此你只需寫程式碼就能完成完整的應用程式,
無需傳統專案構建。 - Actuator:讓你能夠深入執行中的Spring Boot應用程式,一探究竟。
使用Idea的spring 初始化器,勾選右邊的選項
專案結構如下
啟動類:
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
@SpringBootApplication開啟了Spring的元件掃描和Spring Boot的自動配置功能。實際上, @SpringBootApplication將三個有用的註解組合在了一起。
- Spring的@Configuration:標明該類使用Spring基於Java的配置。
- Spring的@ComponentScan:啟用元件掃描,這樣你寫的Web控制器類和其他元件才能被自動發現並註冊為Spring應用程式上下文裡的Bean。
- Spring Boot 的 @EnableAutoConfiguration : 這 個 不 起 眼 的 小 注 解 也 可 以 稱 為@Abracadabra,就是這一行配置開啟了Spring Boot自動配置的魔力,讓你不用再寫成篇的配置了。
application.properties用於寫spring boot專案的配置。
server.port=8000 //tomcat的埠
dao
繼承JpaRepository就可以,不需要自己實現實現類,jpa會幫助實現。
public interface ReadingListRepository extends JpaRepository<Book,Long> {
List<Book> findByReader(String reader);
}
實體類
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String reader;
private String isbn;
private String title;
private String author;
private String description;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getReader() {
return reader;
}
public void setReader(String reader) {
this.reader = reader;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
controller
@Controller
@RequestMapping("/read")
public class ReadingListController {
private ReadingListRepository readingListRepository;
@Autowired
ReadingListController(ReadingListRepository readingListRepository){
this.readingListRepository=readingListRepository;
}
@RequestMapping(value="/{reader}", method=RequestMethod.GET)
public String readersBooks(
@PathVariable("reader") String reader,
Model model) {
List<Book> readingList =
readingListRepository.findByReader(reader);
if (readingList != null) {
model.addAttribute("books", readingList);
}
return "readingList";
}
@RequestMapping(value="/{reader}", method= RequestMethod.POST)
public String addToReadingList(
@PathVariable("reader") String reader, Book book) {
book.setReader(reader);
readingListRepository.save(book);
return "redirect:/read/{reader}";
}
}
啟動類
@SpringBootApplication(scanBasePackages = "com.example")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
頁面:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" th:href="@{/style.css}"></link>
</head>
<body>
<h2>你的書籍列表</h2>
<div th:unless="${#lists.isEmpty(books)}">
<dl th:each="book : ${books}">
<dt class="bookHeadline">
<span th:text="${book.title}">Title</span>
<span th:text="${book.author}">Author</span>
(ISBN: <span th:text="${book.isbn}">ISBN</span>)
</dt>
<dd class="bookDescription">
<span th:if="${book.description}" th:text="${book.description}">Description</span>
<span th:if="${book.description eq null}">No description available</span>
</dd>
</dl>
</div>
<div th:if="${#lists.isEmpty(books)}">
<p>You have no books in your book list</p>
</div>
<h3>Add a book</h3>
<form method="POST">
<label for="title">Title:</label>
<input id="title" type="text" name="title" size="50"></input><br/>
<label for="author">Author:</label>
<input id="author" type="text" name="author" size="50"></input><br/>
<label for="isbn">ISBN:</label>
<input id="isbn" type="text" name="isbn" size="15"></input><br/>
<label for="description">Description:</label><br/>
<textarea id="description" name="description" cols="80" rows="5">
</textarea><br/>
<input type="submit"></input>
</form>
</body>
</html>
效果: