用Spring boot写完整的图书管理系统
时间: 2024-05-07 14:20:42 浏览: 9
好的,下面是一个简单的图书管理系统的Spring Boot实现,包含基本的CRUD操作和API接口:
1. 首先,我们需要创建一个Maven项目,并添加Spring Boot和JPA相关的依赖。
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
```
2. 接着,我们需要定义一个图书实体类Book和一个对应的JPA仓库BookRepository。
```java
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String author;
private String description;
private BigDecimal price;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
// getters and setters
}
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}
```
3. 然后,我们需要定义一个服务类BookService,用于实现业务逻辑,包括添加图书、获取图书列表、获取单个图书、更新图书和删除图书等操作。
```java
@Service
public class BookService {
private final BookRepository bookRepository;
public BookService(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
public List<Book> getAllBooks() {
return bookRepository.findAll();
}
public Optional<Book> getBookById(Long id) {
return bookRepository.findById(id);
}
public Book addBook(Book book) {
book.setCreatedAt(LocalDateTime.now());
book.setUpdatedAt(LocalDateTime.now());
return bookRepository.save(book);
}
public Book updateBook(Long id, Book book) {
Optional<Book> optionalBook = bookRepository.findById(id);
if (optionalBook.isPresent()) {
Book existingBook = optionalBook.get();
existingBook.setTitle(book.getTitle());
existingBook.setAuthor(book.getAuthor());
existingBook.setDescription(book.getDescription());
existingBook.setPrice(book.getPrice());
existingBook.setUpdatedAt(LocalDateTime.now());
return bookRepository.save(existingBook);
} else {
return null;
}
}
public void deleteBook(Long id) {
bookRepository.deleteById(id);
}
}
```
4. 接着,我们需要定义一个控制器BookController,用于处理API请求。
```java
@RestController
@RequestMapping("/api/v1/books")
public class BookController {
private final BookService bookService;
public BookController(BookService bookService) {
this.bookService = bookService;
}
@GetMapping
public List<Book> getAllBooks() {
return bookService.getAllBooks();
}
@GetMapping("/{id}")
public ResponseEntity<Book> getBookById(@PathVariable Long id) {
Optional<Book> optionalBook = bookService.getBookById(id);
return optionalBook.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}
@PostMapping
public ResponseEntity<Book> addBook(@RequestBody Book book) {
Book newBook = bookService.addBook(book);
return ResponseEntity.created(URI.create("/api/v1/books/" + newBook.getId())).body(newBook);
}
@PutMapping("/{id}")
public ResponseEntity<Book> updateBook(@PathVariable Long id, @RequestBody Book book) {
Book updatedBook = bookService.updateBook(id, book);
return updatedBook != null ? ResponseEntity.ok(updatedBook) : ResponseEntity.notFound().build();
}
@DeleteMapping("/{id}")
public void deleteBook(@PathVariable Long id) {
bookService.deleteBook(id);
}
}
```
5. 最后,在Spring Boot应用程序的主类中,我们需要添加@EnableJpaRepositories和@EntityScan注解,用于启用JPA和扫描实体类。
```java
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.example.demo.repository")
@EntityScan(basePackages = "com.example.demo.entity")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
```
这样,我们就完成了一个简单的图书管理系统的Spring Boot实现。你可以使用Postman或类似的工具测试API接口。