赞
踩
以下是一个简单的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, Long> {
-
- User findByUsername(String username);
-
- }
3.2 TopicRepository:
- public interface TopicRepository extends JpaRepository<Topic, Long> {
- }
3.3 CommentRepository:
- public interface CommentRepository extends JpaRepository<Comment, Long> {
- }
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<Topic> 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<Comment> 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<Topic> 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<Comment> 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:
- <!DOCTYPE html>
- <html lang="en" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>论坛首页</title>
- </head>
- <body>
- <h1>论坛首页</h1>
- <div>
- <a href="/new-topic">发表新帖</a>
- </div>
- <ul>
- <li th:each="topic : ${topics}">
- <a th:href="@{'/topic/' + ${topic.id}}"><h3 th:text="${topic.title}"></h3></a>
- <p th:text="${topic.content}"></p>
- <p>
- <span th:text="${topic.user.username}"></span>
- <span th:text="${#dates.format(topic.createTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
- </p>
- </li>
- </ul>
- </body>
- </html>
6.2 topic.html:
- <!DOCTYPE html>
- <html lang="en" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>话题详情</title>
- </head>
- <body>
- <h1 th:text="${topic.title}"></h1>
- <p th:text="${topic.content}"></p>
- <p>
- <span th:text="${topic.user.username}"></span>
- <span th:text="${#dates.format(topic.createTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
- </p>
- <hr>
- <h2>评论</h2>
- <ul>
- <li th:each="comment : ${comments}">
- <p th:text="${comment.content}"></p>
- <p>
- <span th:text="${comment.user.username}"></span>
- <span th:text="${#dates.format(comment.createTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
- </p>
- </li>
- </ul>
- <hr>
- <form action="/new-comment" method="post">
- <input type="hidden" name="topic.id" th:value="${topic.id}">
- <textarea name="content"></textarea>
- <br>
- <button type="submit">提交评论</button>
- </form>
- </body>
- </html>
6.3 new-topic.html:
- <!DOCTYPE html>
- <html lang="en" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>发表新帖</title>
- </head>
- <body>
- <h1>发表新帖</h1>
- <form action="/new-topic" method="post">
- <input type="text" name="title">
- <br>
- <textarea name="content"></textarea>
- <br>
- <button type="submit">发布帖子</button>
- </form>
- </body>
- </html>
6.4 login.html:
- <!DOCTYPE html>
- <html lang="en" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>登录</title>
- </head>
- <body>
- <h1>登录</h1>
- <form action="/login" method="post">
- <input type="text" name="username">
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。