10分钟完成补充个人博客留言设计贴功能

简介: 10分钟完成补充个人博客留言设计贴功能

一、静态页面


静态页面和完整程序有需留言即可。

另外个人地址为:添加链接描述


1.1 留言表单

20210205115434335.png

1.2 留言贴列表


20210205115539216.png



1.3 分页

20210205115621911.png


二、程序设计【Springboot】


个人本户采用的是Springboot2+JPA完成设计的。

数据库会根据java实体类中的字段进行自动创建,不需要自己创建。


2.1 数据库实体设计


在数据库主要是对于留言贴这个对象的属性进行设计,比较简单,主要有ID,昵称字段,日期,留言贴内容,头像,性别等属性,这也是在表单中即将提交的内容。


2.2 Java实体类


省略构造,getter setter toString等方法。

@Entity
@Table(name = "t_message")
public class Message {
    @Id
    @GeneratedValue
    private Long id;
    // 留言昵称
    private String nickname;
    // 性别
    private String sex;
    // 留言内容
    private String content;
    // 留言头像
    private String avatar;
    // 留言时间
    @Temporal(TemporalType.TIMESTAMP)
    private Date createTime;
}

2.3 MessageService服务接口


接口功能:帖子存库,删除帖子【后台审核】,分页查询帖子数据封装到JPA中的Pageable中。

public interface MessageService {
    // 做留言贴存库
    void getMessage(Message message);
    // 分页查询
    public Page<Message> listMessage(Pageable pageable);
    // 删除留言
    void delete(Long id);
}

2.4 MessageServiceImpl实现类

@Service
public class MessageServiceImpl implements MessageService {
    @Autowired
    private MessageRepository messageRepository;
    @Transactional
    @Override
    public void getMessage(Message message) {
        message.setCreateTime(new Date());
        messageRepository.save(message);
    }
    //分页查询 jpa封装的
    @Override
    public Page<Message> listMessage(Pageable pageable) {
        return messageRepository.findAll(pageable);
    }
    @Override
    public void delete(Long id) {
        messageRepository.deleteById(id);
    }
}

2.5 DAO操作数据库


数据操作层,采用了JPA封装CRUD,只需要继承一个JpaRepository类即可。这也是和MybatisPlus如出一辙的想法。

public interface MessageRepository extends JpaRepository<Message, Long> {
}

2.6 Controller层实现


控制层只做了简单的跳转和判空操作,为了安全起见,应该将视图层,控制层还有数据层全部需要进行判空,这里不做了。

@Controller
public class MessageController {
    @Autowired
    MessageService messageService;
    // 带有分页的便利贴
    @RequestMapping("/message")
    public String message(@PageableDefault(size = 12, sort = {"createTime"}, direction = Sort.Direction.DESC) Pageable pageable, Model model){
        model.addAttribute("page", messageService.listMessage(pageable));
        return "message";
    }
    /**
     * 获取前台留言板信息
     */
    @PostMapping("/getMessage")
    public String getMessage(Message message,Model model){
        if (message.getAvatar()!=null && message.getContent()!=null && message.getNickname()!=null && message.getSex()!=null){
            // 插入数据库
            messageService.getMessage(message);
        }else{
        }
        return "redirect:/message";
    }
}

2.7 HTML数据渲染


数据渲染只展示出了留言贴的遍历和分页数据的简单使用。

提交表单:略
留言贴:
<div class="suiyan_list">
            <ul>
                <li th:each="message : ${page}"><a>
                    <p class="suiyan_time" style="color: deeppink" th:text="${message.nickname}+' && '+${#dates.format(message.createTime,'yyyy-MM-dd')}">你的昵称 & 2020-07-04</p>
                    <p class="suiyan_text" th:text="${message.content}">随着年龄的增长,人总会变得越来越宽容;所以很多事情到最后并不是真的解决了,而是,算了吧。</p>
                    <img style="padding-bottom: 1px;" height="40px" width="40px" th:src="@{${message.avatar}}">
                    <span style="font-size: 20px;color: deeppink" th:text="${message.sex}">女生</span>
                </a>
                </li>
            </ul>
        </div>
分页:
        <!--分页-->
        <div class="pagelist2" th:if="${page.totalPages}>1">
            <a th:href="@{/message/(page=0)}" th:classappend="${page.number==0} ? 'curPage'">首页</a>
            <a th:href="@{/message/(page=1)}" th:classappend="${page.number==1} ? 'curPage'">2</a>
            <a th:href="@{/message/(page=2)}" th:classappend="${page.number==2} ? 'curPage'">3</a>
            <a>...</a>
            <a th:href="@{/message/(page=${page.totalPages}-1)}" th:classappend="${page.number==page.totalPages-1} ? 'curPage'" >末页</a>
            <a th:href="@{/message/(page=${page.number}-1)}" th:unless="${page.first}">上一页</a>&nbsp;
            <a th:href="@{/message/(page=${page.number}+1)}" th:unless="${page.last}">下一页</a>
        </div>


目录
相关文章
|
9月前
|
前端开发 测试技术 数据库
网上订餐系统的设计与实现(论文+源码)_kaic
网上订餐系统的设计与实现(论文+源码)_kaic
30行代码实现微信朋友圈自动点赞
首先祝大家新年快乐,过年了,允许我水一篇博客。不知道大家都回老家了没,不过我是没有回去,晚上吃完年夜饭看到很多人发朋友圈,为了增进和大家的友谊,于是就想着给大家点个赞,无奈内容太多了,就搞个自动化脚本,原理和前两天我写的30行代码实现蚂蚁森林自动偷能量一样,这里不再赘述,直接上代码。
189 1
美多商城项目(十二)-功能补充
美多商城项目(十二)-功能补充
|
城市大脑 达摩院 大数据
每月动态 | 阿里云跟朋友们都在忙些什么?
每月动态 | 阿里云跟朋友们都在忙些什么?
357 0
|
存储 算法 搜索推荐
C++系列笔记(十一)
C++系列笔记(十一)
C++系列笔记(十一)
|
小程序 Android开发
关于视频号主页实现一键添加个人微信功能的思路
思路很简单,就是借助小程序来做跳板,在你开发好的小程序里面单拎一个页面出来,放置个人微信号二维码。
212 0
关于视频号主页实现一键添加个人微信功能的思路
|
前端开发 JavaScript
前端实现简易版发布留言
网页中留言和评论这个模块十分常见,今天我来写一个简易版的留言案例,为大家提供一点思路,很简单哦!
238 0
|
算法 Java 开发者
掌握数组,10节视频+源码解析一招搞定 | 开发者进阶站
我们的世界绚丽缤纷,而Java世界也应如此。有时我们会碰到成百上千的数据操作,简单的单个数据的操作模式显然是难以处理的。别急,带你批量处理数据将从此刻开始--数组来了!
|
UED
[博文推荐]设计的意义
本文来自丁宇的博客,分享了自己对于“设计的意义”的个人理解。 最近通过各种渠道和形式接触了几位设计师,他们来自不同的公司,做着迥异的产品,但当我问起类似于“设计的意义”这样的问题时,他们的回答均不能让人满意。
779 0

相关实验场景

更多