• 留言板——增添功能(持久化存储数据,使用MyBatis)


    目录

    一、数据准备

    二、引入MyBatis 和 MySQL驱动依赖

    三、配置MySQL账号密码

    四、编写后端代码

    五、调整前端代码

    六、测试


        之前的代码:综合性练习(后端代码练习3)——留言板_在线留言板前后端交互-CSDN博客

    一、数据准备

            创建数据库表的SQL:

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

    ON UPDATE now()当数据发生更新操作时,自动把该列的值设置为now(),now() 可以替换成其他获取时间的标识符,比如:CURRENT_TIMESTAMP(),LOCALTIME()等。

    MySQL < 5.6.5时:

            1只有TIMESTAMP支持自动更新

            2一个表只能有一列设置自动更新

            3不允许同时存在两个列,其中一列设置了DEFAULT CURRENT_TIMESTAMP,另一个设置了ON UPADTE CURRENT_TIMESTAMP

    MySQL >= 5.6.5时:

            1TIMESTAMP 和 DATETIME都支持自动更新,且可以有多列


    二、引入MyBatis 和 MySQL驱动依赖

            修改pom.xml文件,添加内容如下:

    1. <dependency>
    2. <groupId>org.mybatis.spring.bootgroupId>
    3. <artifactId>mybatis-spring-boot-starterartifactId>
    4. <version>3.0.3version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.mysqlgroupId>
    8. <artifactId>mysql-connector-jartifactId>
    9. <scope>runtimescope>
    10. dependency>

            或者使用插件EditStarters,如图:


    三、配置MySQL账号密码

            application.yml配置信息如下:

    1. # 数据库配置
    2. spring:
    3. datasource:
    4. url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    5. username: root
    6. password: 1234
    7. driver-class-name: com.mysql.cj.jdbc.Driver
    8. mybatis:
    9. # 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
    10. mapper-locations: classpath:mybatis/**Mapper.xml
    11. configuration: # 配置打印 MyBatis日志
    12. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    13. map-underscore-to-camel-case: true #配置驼峰自动转换

    四、编写后端代码

            MessageInfo 实体类:

    1. @Data
    2. public class MessageInfo {
    3. private String from;
    4. private String to;
    5. private String message;
    6. private Integer deleteFlag;
    7. private Date createTime;
    8. private Date updateTime;
    9. }

            controller代码:

    1. @RestController
    2. @RequestMapping("/message")
    3. public class MessageController {
    4. // List messageInfos = new ArrayList<>();
    5. @Autowired
    6. MessageService messageService;
    7. /**
    8. * 发布留言
    9. */
    10. @RequestMapping("/publish")
    11. public Boolean publish(MessageInfo messageInfo) {
    12. //参数校验
    13. if(!StringUtils.hasLength(messageInfo.getFrom())
    14. || !StringUtils.hasLength(messageInfo.getTo())
    15. || !StringUtils.hasLength(messageInfo.getMessage())) {
    16. return false;
    17. }
    18. //存留言
    19. // messageInfos.add(messageInfo);
    20. Integer result = messageService.publishMessage(messageInfo);
    21. if(result > 0) {
    22. return true;
    23. }
    24. return false;
    25. }
    26. /**
    27. * 获取留言
    28. */
    29. @RequestMapping("/getList")
    30. public List getList() {
    31. return messageService.getMessageInfos();
    32. }
    33. }

            service代码:

    1. @Service
    2. public class MessageService {
    3. @Autowired
    4. MessageInfoMapper messageInfoMapper;
    5. public Integer publishMessage(MessageInfo messageInfo) {
    6. return messageInfoMapper.insertMessage(messageInfo);//插入信息
    7. }
    8. public List getMessageInfos() {
    9. return messageInfoMapper.selectAllList();//获取信息
    10. }
    11. }

            mapper代码:

    1. @Mapper
    2. public interface MessageInfoMapper {
    3. /**
    4. * 发布留言
    5. */
    6. @Insert("insert into message_info (`from`, `to`, `message`) values (#{from}, #{to}, #{message})")
    7. Integer insertMessage(MessageInfo messageInfo);
    8. /**
    9. * 获取列表
    10. */
    11. @Select("select * from message_info")
    12. List selectAllList();
    13. }

    五、调整前端代码

            messageWall.html代码如下:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>留言板title>
    7. <style>
    8. .container {
    9. width: 350px;
    10. height: 300px;
    11. margin: 0 auto;
    12. /* border: 1px black solid; */
    13. text-align: center;
    14. }
    15. .grey {
    16. color: grey;
    17. }
    18. .container .row {
    19. width: 350px;
    20. height: 40px;
    21. display: flex;
    22. justify-content: space-between;
    23. align-items: center;
    24. }
    25. .container .row input {
    26. width: 260px;
    27. height: 30px;
    28. }
    29. #submit {
    30. width: 350px;
    31. height: 40px;
    32. background-color: orange;
    33. color: white;
    34. border: none;
    35. margin: 10px;
    36. border-radius: 5px;
    37. font-size: 20px;
    38. }
    39. style>
    40. head>
    41. <body>
    42. <div class="container">
    43. <h1>留言板h1>
    44. <p class="grey">输入后点击提交, 会将信息显示下方空白处p>
    45. <div class="row">
    46. <span>谁:span> <input type="text" name="" id="from">
    47. div>
    48. <div class="row">
    49. <span>对谁:span> <input type="text" name="" id="to">
    50. div>
    51. <div class="row">
    52. <span>说什么:span> <input type="text" name="" id="say">
    53. div>
    54. <input type="button" value="提交" id="submit" onclick="submit()">
    55. div>
    56. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js">script>
    57. <script>
    58. $.ajax({
    59. url: "/message/getList",
    60. type: "get",
    61. success: function (messageInfos) {
    62. var finalHtml = "";
    63. for (var message of messageInfos) {
    64. finalHtml += '
      ' + message.from + ' 对 ' + message.to + ' 说: ' + message.message + '
      '
      ;
    65. }
    66. $(".container").append(finalHtml);
    67. }
    68. });
    69. function submit() {
    70. //1. 获取留言的内容
    71. var from = $('#from').val();
    72. var to = $('#to').val();
    73. var say = $('#say').val();
    74. //参数校验
    75. if (from == '' || to == '' || say == '') {
    76. return;
    77. }
    78. //发送ajax请求
    79. $.ajax({
    80. url: "/message/publish",
    81. type: "post",
    82. data: {
    83. //不好理解
    84. // from: from,
    85. // to: to,
    86. // say: say
    87. from: $('#from').val(),
    88. to: $('#to').val(),
    89. message:$('#say').val()
    90. },
    91. success: function (result) {
    92. if (result) {
    93. //2. 构造节点
    94. var divE = "
      " + from + "对" + to + "说:" + say + "
      "
      ;
    95. //3. 把节点添加到页面上
    96. $(".container").append(divE);
    97. //4. 清空输入框的值
    98. $('#from').val("");
    99. $('#to').val("");
    100. $('#say').val("");
    101. } else{
    102. alert("输入不合法");
    103. }
    104. }
    105. });
    106. }
    107. script>
    108. body>
    109. html>

    六、测试

            现在数据库的message_info表内容如下:

            浏览器访问:http://127.0.0.1:8080/messagewall.html,页面如下:

            

            往输入框填写内容,如图:

                    

            点击提交:

            

            重启服务器后,再次访问改页面,数据也不会丢失,因为我们把数据放进数据库里了,进行了持久化存储

  • 相关阅读:
    SQL Server数据库理论篇(进行时......)
    Springboot项目打jar包的两种方式 + 本地测试jar包是否可以启动
    go post 请求 --chatGPT
    高防服务器中的秒解服务器什么意思?
    Ambari安装部署—基础软件环境说明
    Lombok依赖
    maven-mvnd使用步骤,新版Maven,构建速度大幅提升
    MongoDB UPDATE使用$setOnInsert为新插入数据设置默认值
    JAVA毕设项目客服管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
    通过Shell脚本自动安装Hive&JDBC测试&提供CDH5网盘地址
  • 原文地址:https://blog.csdn.net/cool_tao6/article/details/139333752