以下是一个简单的Spring Boot论坛系统示例代码:
2.1 User实体类:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String username;
@Column
private String password;
@Column
private String email;
@Column(name = "create_time")
private Date createTime;
// getter/setter省略
}
2.2 Topic实体类:
@Entity
@Table(name = "topic")
public class Topic {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String title;
@Column
private String content;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@Column(name = "create_time")
private Date createTime;
// getter/setter省略
}
2.3 Comment实体类:
@Entity
@Table(name = "comment")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String content;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "topic_id")
private Topic topic;
@Column(name = "create_time")
private Date createTime;
// getter/setter省略
}
3.1 UserRepository:
public interface UserRepository extends JpaRepository {
User findByUsername(String username);
}
3.2 TopicRepository:
public interface TopicRepository extends JpaRepository {
}
3.3 CommentRepository:
public interface CommentRepository extends JpaRepository {
}
4.1 UserService:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public boolean checkUser(User user) {
User userInDb = userRepository.findByUsername(user.getUsername());
if (userInDb != null && userInDb.getPassword().equals(user.getPassword())) {
return true;
} else {
return false;
}
}
public void saveUser(User user) {
user.setCreateTime(new Date());
userRepository.save(user);
}
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
}
4.2 TopicService:
@Service
public class TopicService {
@Autowired
private TopicRepository topicRepository;
public List getAllTopics() {
return topicRepository.findAll();
}
public Topic getTopicById(Long id) {
return topicRepository.findById(id).orElse(null);
}
public void saveTopic(Topic topic) {
topic.setCreateTime(new Date());
topicRepository.save(topic);
}
}
4.3 CommentService:
@Service
public class CommentService {
@Autowired
private CommentRepository commentRepository;
public void saveComment(Comment comment) {
comment.setCreateTime(new Date());
commentRepository.save(comment);
}
public List getCommentsByTopicId(Long topicId) {
return commentRepository.findAllByTopicId(topicId);
}
}
5.1 UserController:
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String doLogin(User user, HttpSession session) {
boolean result = userService.checkUser(user);
if (result) {
session.setAttribute("user", user);
return "redirect:/";
} else {
return "login";
}
}
@GetMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("user");
return "redirect:/";
}
@GetMapping("/register")
public String register() {
return "register";
}
@PostMapping("/register")
public String doRegister(User user) {
userService.saveUser(user);
return "redirect:/login";
}
}
5.2 TopicController:
@Controller
public class TopicController {
@Autowired
private TopicService topicService;
@Autowired
private CommentService commentService;
@GetMapping("/")
public String index(Model model) {
List topics = topicService.getAllTopics();
model.addAttribute("topics", topics);
return "index";
}
@GetMapping("/topic/{id}")
public String topic(@PathVariable Long id, Model model) {
Topic topic = topicService.getTopicById(id);
List comments = commentService.getCommentsByTopicId(id);
model.addAttribute("topic", topic);
model.addAttribute("comments", comments);
return "topic";
}
@GetMapping("/new-topic")
public String newTopic() {
return "new-topic";
}
@PostMapping("/new-topic")
public String doNewTopic(Topic topic, HttpSession session) {
User user = (User) session.getAttribute("user");
topic.setUser(user);
topicService.saveTopic(topic);
return "redirect:/";
}
}
5.3 CommentController:
@Controller
public class CommentController {
@Autowired
private CommentService commentService;
@PostMapping("/new-comment")
public String doNewComment(Comment comment, HttpSession session) {
User user = (User) session.getAttribute("user");
comment.setUser(user);
commentService.saveComment(comment);
return "redirect:/topic/" + comment.getTopic().getId();
}
}
6.1 index.html:
论坛首页
论坛首页
6.2 topic.html:
话题详情
评论
-
6.3 new-topic.html:
发表新帖
发表新帖
6.4 login.html:
登录
登录