SpringBoot日记本系统全程直播05:把日记新增功能搞出来撒~

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: SpringBoot日记本系统全程直播05:把日记新增功能搞出来撒~

首页已经安排好了,接下来搞日记新增。


1.png


这里是一个超链接,补上url


修改header.jsp


2.png

<li class="layui-nav-item"><a href="${basePath}/diary/add.html"><i class="layui-icon layui-icon-edit" style="color: #FFF;"></i>写日记</a></li>


PageController 增加路由 diary/add.html (假的,其实不是html啦,这个代码我写的比较随性,哈哈!)

@RequestMapping("diary/add.html")
public String addDiary(){
    return "diary/add";
}


指向的就是这个jsp


3.png


代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<c:set var="basePath" value="${pageContext.request.contextPath}"></c:set>
<html>
<head>
    <title>日记新增</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
    <script src="${basePath}/layui/layui.all.js" charset="utf-8"></script>
    <link rel="stylesheet" href="${basePath}/layui/css/layui.css" media="all">
    <style>
    </style>
</head>
<body>
<div class="layui-container">
    <div class="layui-row layui-col-space10">
        <div class="layui-row">
            <div class="layui-col-md12">
                <jsp:include page="../common/header.jsp"></jsp:include>
            </div>
            <div class="layui-col-md9">
                写日记
            </div>
            <div class="layui-col-md3" style="">
                <jsp:include page="../common/sider.jsp"></jsp:include>
            </div>
        </div>
    </div>
    <jsp:include page="../common/footer.jsp"></jsp:include>
</div>
<script>
</script>
</body>
</html>


直接访问: http://localhost/diary/add.html


4.png


有两个问题。


第一个问题,写日记的菜单没有被选中


5.png


这是因为我们没有记录当前的菜单,点击写日记的超链接导致页面跳转了 ,没有记录当前的页面。


设置菜单项高亮,只需要加上layui-this的class就行了。


别担心,有问题我们就解决问题。


我们可以用 window.location.pathname 获取当前的url后面的部分,比如:/diary/add.html


然后用case语句去判断,如果是/diary/add.html,就让当前这个菜单被选中。


为了方便,我们引入layUI内部的jquery

layui.use(['jquery', 'layer'], function(){
  let $ = layui.$;
  let pathName = window.location.pathname;
  switch (pathName) {
    case "/diary/add.html":
      $('.layui-nav-item').eq(2).addClass("layui-this").siblings().removeClass("layui-this")
          break;
  }
});


刷新一下页面,发现写日记变成高亮了。


6.png


标题和主页,我们希望点击后返回首页,用绝对路径 /


7.png


第二个问题,右侧的类别样式没有了:


8.png


467c99bb58ee4787a33ee3e26b58555a.png


这是因为,首页的css我们写在style标签块里面的,当访问add.jsp时,就没有样式了。


当然啦,你可以整一个css文件,每个jsp去引入一下。


但是我比较懒,就直接把这些样式放到header.jsp里面去了。


style标签并不是非得在head标签里面哦。


9.png


10.png


问题迎刃而解。


ok,要记日记,首先需要有一张日记表。

-- ----------------------------
-- Table structure for tbl_syn_blog
-- ----------------------------
DROP TABLE IF EXISTS `tbl_syn_blog`;
CREATE TABLE `tbl_syn_blog` (
  `id` int(11) NOT NULL,
  `title` varchar(30) DEFAULT NULL COMMENT '标题',
  `user_id` int(11) DEFAULT NULL COMMENT '用户ID',
  `blog_type` int(11) DEFAULT NULL COMMENT '类型',
  `content` text COMMENT '内容',
  `is_delete` varchar(1) DEFAULT '0',
  `create_date` varchar(20) DEFAULT NULL,
  `update_date` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


日记的ID,我们还是用redis来实现。

先把后台准备好吧。

实体类


11.png


package com.rabbit.diary.bean;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.springframework.stereotype.Service;
@TableName("tbl_syn_blog")
@Data
public class TblSynBlog {
    @TableId
    private Long id;
    private String title;
    private Long userId;
    private String blogType;
    private String content;
    private String isDelete;
    private String createDate;
    private String updateDate;
}


有了lombok确实清爽了好多!

Mapper文件


12.png


@Mapper
public interface BlogMapper extends BaseMapper<TblSynBlog> {
}


service接口和实现类


13.png


public interface BlogService {
    void save(TblSynBlog tblSynBlog);
}
@Service
public class BlogServiceImpl implements BlogService {
    @Autowired
    BlogMapper blogMapper;
    @Autowired
    RedisServiceImpl redisServiceImpl;
    /**
     * 保存
     * @param blog
     */
    @Override
    public void save(TblSynBlog blog) {
        blogMapper.insert(blog);
    }
}


最后是Controller


14.png


@RestController
@RequestMapping("/blog")
public class BlogController {
    @Autowired
    BlogService BlogService;
    @Autowired
    RedisServiceImpl redisServiceImpl;
    @RequestMapping("/add")
    @SaCheckLogin
    public Result register(@RequestBody TblSynBlog blog){
        //拼装BlogBean
        blog.setId(redisServiceImpl.getIncr("BlogId")); //redis自增ID
        blog.setCreateDate(DateUtil.now());
        blog.setUpdateDate(DateUtil.now());
        blog.setUserId(StpUtil.getLoginIdAsLong());
        BlogService.save(blog);
        return Result.success();
    }
}


日记的ID使用BlogId自增序列。

add.jsp

我们写一个layUI的form表单,页面效果如下


15.png


代码太多了,我就不贴了。挑一些重要的讲一下。

这边用了layedit富文本编辑器,不过我去掉了图片上传,暂时我们先不做那么复杂,就写写文本吧。

用法全部可以去layUI官网找,我也是一边查文档一边写的。

提交方法:

form.on('submit(demo1)', function(data){
    data = {...data.field ,...{content:layedit.getContent(editIndex)}}
    if(data.content.length < 10){
        layer.msg('内容至少10个字符!',{icon:2});
        return false;
    }
    var index = layer.load(1); //添加laoding,0-2两种方式
    axios.post('${basePath}/blog/add',data).then(r =>{
        layer.close(index);    //返回数据关闭loading
        if(r.data.code != '0000'){
            layer.msg(r.data.message,{icon:2});
            return;
        }
        layer.msg('日记记录成功!',{icon:1});
        setTimeout(()=>{location.href="/"},500)
    });
    return false;
});


会有一个加载的效果,提交成功后返回主页。

测试数据:


16.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
16天前
|
消息中间件 缓存 Java
手写模拟Spring Boot启动过程功能
【11月更文挑战第19天】Spring Boot自推出以来,因其简化了Spring应用的初始搭建和开发过程,迅速成为Java企业级应用开发的首选框架之一。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,帮助读者深入理解其工作机制。
31 3
|
16天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
37 0
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
104 62
|
26天前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
72 8
|
22天前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
74 1
|
28天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
53 2
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
36 1
|
2月前
|
存储 安全 Java
打造智能合同管理系统:SpringBoot与电子签章的完美融合
【10月更文挑战第7天】 在数字化转型的浪潮中,电子合同管理系统因其高效、环保和安全的特点,正逐渐成为企业合同管理的新宠。本文将分享如何利用SpringBoot框架实现一个集电子文件签字与合同管理于一体的智能系统,探索技术如何助力合同管理的现代化。
77 4
|
2月前
|
前端开发 Java Apache
SpringBoot实现电子文件签字+合同系统!
【10月更文挑战第15天】 在现代企业运营中,合同管理和电子文件签字成为了日常活动中不可或缺的一部分。随着技术的发展,电子合同系统因其高效性、安全性和环保性,逐渐取代了传统的纸质合同。本文将详细介绍如何使用SpringBoot框架实现一个电子文件签字和合同管理系统。
80 1