浪漫编码:手把手教你实现校园表白墙功能

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 浪漫编码:手把手教你实现校园表白墙功能

表白墙

前面的案例中,我们写了表白墙,但是⼀旦服务器重启,数据仍然会丢失.

要想数据不丢失,需要把数据存储在数据库中.接下来咱们借助MyBatis来实现数据的操作


数据准备

DROP TABLE IF EXISTS message_info;
  CREATE TABLE `message_info` (
  `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
  `from` VARCHAR ( 127 ) NOT NULL,
  `to` VARCHAR ( 127 ) NOT NULL,
  `message` VARCHAR ( 256 ) NOT NULL,
  `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
  `create_time` DATETIME DEFAULT now(),
  `update_time` DATETIME DEFAULT now() ON UPDATE now(),
  PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;

ONUPDATEnow():当数据发生更新操作时,自动把该列的值设置为now(),

now()可以替换成其他获取时间的标识符,⽐如:CURRENT_TIMESTAMP(),LOCALTIME()等MySQL<5.6.5

  1. 只有TIMESTAMP⽀持自动更新
  2. ⼀个表只能有⼀列设置自动更新
  3. 不允许同时存在两个列,其中⼀列设置了DEFAULTCURRENT_TIMESTAMP,]
  4. TIMESTAMP和DATETIME都⽀持自动更新,且可以有多列

引入MyBatis和MySQL驱动依赖

修改pom文件

<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>3.0.3</version>
</dependency>
<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <scope>runtime</scope>
</dependency>

或者使用插件EditStarters来引入依赖

配置MySQL账号密码

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  configuration: # 配置打印 MyBatis⽇志
    map-underscore-to-camel-case: true #配置驼峰自动转换

编写后端代码

import lombok.Data;
@Data
public class MessageInfo {
  private Integer id;
  private String from;
  private String to;
  private String message;
  private Integer deleteFlag;
  private Date createTime;
  private Date updateTime;
}

MessageInfoMapper

import com.example.demo.model.MessageInfo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface MessageInfoMapper {
  @Select("select `id`, `from`, `to`, `message` from message_info where delete_flag=0")
  List<MessageInfo> queryAll();
  
  @Insert("insert into message_info (`from`,`to`, `message`) values(#{from},#{to},#{message})")
  Integer addMessage(MessageInfo messageInfo);
}

MessageInfoService

import com.example.demo.mapper.MessageInfoMapper;
import com.example.demo.model.MessageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MessageInfoService {
  @Autowired
  private MessageInfoMapper messageInfoMapper;
  
  public List<MessageInfo> queryAll() {
    return messageInfoMapper.queryAll();
  }
  
  public Integer addMessage(MessageInfo messageInfo) {
    return messageInfoMapper.addMessage(messageInfo);
  }
}

MessageController

import com.example.demo.model.MessageInfo;
import com.example.demo.service.MessageInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RequestMapping("/message")
@RestController
public class MessageController {
    @Autowired
    private MessageInfoService messageInfoService;
    /**
     * 获取留言列表
     * @return
     */
    @RequestMapping("/getList")
    public List<MessageInfo> getList() {
        return messageInfoService.queryAll();
    }
    /**
     * 发表留言
     * @param messageInfo
     * @return
     */
    @RequestMapping("/publish")
    public boolean publish(MessageInfo messageInfo) {
        System.out.println(messageInfo);
        if (StringUtils.hasLength(messageInfo.getFrom())
                && StringUtils.hasLength(messageInfo.getTo())
                && StringUtils.hasLength(messageInfo.getMessage())) {
            messageInfoService.addMessage(messageInfo);
            return true;
        }
        return false;
    }
}


测试代码

部署程序,验证服务器是否能正确响应:http://127.0.0.1:8080/messagewall.html

输入留言信息,点击提交,发现页面列表显示新的数据,并且数据库中也添加了⼀条记录.

重启服务,页面显示不变.

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫
星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫
星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞
星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞
|
前端开发 JavaScript
中秋之美——html+css+js制作中秋网页
中秋之美——html+css+js制作中秋网页
701 0
|
7月前
|
Java
3D炫酷赛车游戏【附源码】设计实现
3D炫酷赛车游戏【附源码】设计实现
88 10
|
7月前
打地鼠【附源码】
打地鼠【附源码】
71 1
打地鼠【附源码】
|
7月前
|
应用服务中间件 Apache 数据库
校园表白墙源码LoveWall
LoveWall V2.0Pro是款社区型表白墙,提供点赞、评论、发弹幕、多校区支持及分享功能。环境需Centos7+/Windows Server 2008+、宝塔面板、Apache或Nginx、PHP7.1+及数据库5.6+。
145 0
|
7月前
|
Java
Java实现一个打飞机的小游戏【附源码】
Java实现一个打飞机的小游戏【附源码】
62 0
|
程序员
七夕,你们还在用传统的方式进行表白?
七夕,你们还在用传统的方式进行表白?
84 0
|
数据采集 Web App开发 XML
网页文本解析利器“美丽汤”
网页被抓取下来,通常就是str 字符串类型的对象,要从里面寻找信息,最直接的想法就是直接通过字符串的 find 方法和切片操作:
使用 bookdown 构建新年日记本
使用 bookdown 构建新年日记本
126 0

热门文章

最新文章