Springboot+vue管理员后台公告模块原理+代码实现
时间: 2023-10-31 08:58:27 浏览: 262
Spring Boot 是一个非常流行的 Java Web 开发框架,而 Vue.js 则是一个非常流行的 JavaScript 前端框架。结合两者,可以实现一个完整的 Web 应用程序。以下是基于 Spring Boot 和 Vue.js 技术栈的管理员后台公告模块的原理和代码实现。
### 原理
此公告模块的基本原理是在后端使用 Spring Boot 框架创建 RESTful API,然后在前端使用 Vue.js 框架通过 AJAX 调用这些 API 来实现前后端的数据交互。
管理员可以添加、编辑和删除公告。当向后端发送请求时,后端会将其保存在数据库中。前端可以通过 AJAX 调用后端 API,获取所有公告的列表,并将其渲染到前端页面上。
### 代码实现
#### 后端代码实现
首先,需要创建一个 Spring Boot 项目,使用 Maven 构建工具来管理依赖项。在 pom.xml 文件中添加以下依赖项:
```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>
```
接下来,在 src/main/resources/application.properties 文件中添加以下配置:
```
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
```
这些配置将使用 H2 数据库作为后端数据库,并在内存中保存数据。
接下来,需要创建实体类和存储库接口。
```java
@Entity
@Table(name = "announcement")
public class Announcement {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String content;
@Column(nullable = false)
private Date createdTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
}
@Repository
public interface AnnouncementRepository extends JpaRepository<Announcement, Long> {
}
```
然后,需要创建一个控制器来处理 RESTful API 请求。
```java
@RestController
@RequestMapping("/api/announcements")
public class AnnouncementController {
@Autowired
private AnnouncementRepository announcementRepository;
@GetMapping
public List<Announcement> getAllAnnouncements() {
return announcementRepository.findAll();
}
@PostMapping
public Announcement createAnnouncement(@RequestBody Announcement announcement) {
announcement.setCreatedTime(new Date());
return announcementRepository.save(announcement);
}
@PutMapping("/{id}")
public Announcement updateAnnouncement(@PathVariable Long id, @RequestBody Announcement announcement) {
Optional<Announcement> existingAnnouncement = announcementRepository.findById(id);
if (!existingAnnouncement.isPresent()) {
throw new ResourceNotFoundException("Announcement with id " + id + " not found.");
}
announcement.setId(id);
announcement.setCreatedTime(existingAnnouncement.get().getCreatedTime());
return announcementRepository.save(announcement);
}
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteAnnouncement(@PathVariable Long id) {
Optional<Announcement> existingAnnouncement = announcementRepository.findById(id);
if (!existingAnnouncement.isPresent()) {
throw new ResourceNotFoundException("Announcement with id " + id + " not found.");
}
announcementRepository.delete(existingAnnouncement.get());
return ResponseEntity.ok().build();
}
}
```
在这个控制器中,使用 @RestController 和 @RequestMapping 注释来告诉 Spring Boot,这是一个处理 RESTful 端点的控制器。
使用 @Autowired 注释自动将 AnnouncementRepository 注入到控制器中,以便可以从数据库中检索和保存公告。
使用 @GetMapping 注释处理获取所有公告的请求,并使用 announcementRepository.findAll() 方法从数据库中检索所有公告。
使用 @PostMapping 注释处理创建新公告的请求,并使用 announcementRepository.save()方法将新公告保存到数据库中。
使用 @PutMapping 注释处理更新公告的请求,并使用 announcementRepository.save()方法将更新后的公告保存到数据库中。
使用 @DeleteMapping 注释处理删除公告的请求,并使用 announcementRepository.delete()方法从数据库中删除公告。
#### 前端代码实现
首先,需要在 Vue.js 中创建一个组件来渲染公告列表。
```vue
<template>
<div>
<h1>公告列表</h1>
<table>
<thead>
<tr>
<th>标题</th>
<th>内容</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="announcement in announcements" :key="announcement.id">
<td>{{ announcement.title }}</td>
<td>{{ announcement.content }}</td>
<td>{{ announcement.createdTime }}</td>
<td>
<button @click="editAnnouncement(announcement)">编辑</button>
<button @click="deleteAnnouncement(announcement)">删除</button>
</td>
</tr>
</tbody>
</table>
<button @click="addAnnouncement()">添加公告</button>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
announcements: []
};
},
methods: {
loadAnnouncements() {
axios.get('/api/announcements').then(response => {
this.announcements = response.data;
});
},
addAnnouncement() {
this.$router.push('/add-announcement');
},
editAnnouncement(announcement) {
this.$router.push('/edit-announcement/' + announcement.id);
},
deleteAnnouncement(announcement) {
axios.delete('/api/announcements/' + announcement.id).then(response => {
this.loadAnnouncements();
});
}
},
mounted() {
this.loadAnnouncements();
}
};
</script>
```
这个组件将从后端加载公告列表,并将其渲染为 HTML 表格。它还提供了添加、编辑和删除公告的按钮。
接下来,需要创建一个添加公告的组件。
```vue
<template>
<div>
<h1>添加公告</h1>
<form>
<label>标题</label>
<input type="text" v-model="announcement.title" />
<label>内容</label>
<textarea v-model="announcement.content"></textarea>
<button type="button" @click="submitAnnouncement()">添加</button>
</form>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
announcement: {}
};
},
methods: {
submitAnnouncement() {
axios.post('/api/announcements', this.announcement).then(response => {
this.$router.push('/');
});
}
}
};
</script>
```
这个组件将允许管理员输入新公告的标题和内容,并将其提交到后端以保存。
最后,需要创建一个编辑公告的组件。
```vue
<template>
<div>
<h1>编辑公告</h1>
<form>
<label>标题</label>
<input type="text" v-model="announcement.title" />
<label>内容</label>
<textarea v-model="announcement.content"></textarea>
<button type="button" @click="submitAnnouncement()">保存</button>
</form>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
announcement: {}
};
},
methods: {
loadAnnouncement(id) {
axios.get('/api/announcements/' + id).then(response => {
this.announcement = response.data;
});
},
submitAnnouncement() {
axios.put('/api/announcements/' + this.announcement.id, this.announcement).then(response => {
this.$router.push('/');
});
}
},
mounted() {
this.loadAnnouncement(this.$route.params.id);
}
};
</script>
```
这个组件将允许管理员编辑公告的标题和内容,并将其提交到后端以保存。
### 总结
以上是基于 Spring Boot 和 Vue.js 技术栈的管理员后台公告模块的原理和代码实现。通过 RESTful API 和 AJAX,可以实现前后端的数据交互,并在 Web 应用程序中实现功能强大的管理员后台公告模块。
阅读全文