🧸欢迎来到dream_ready的博客,📜相信你对这篇博客也感兴趣o (ˉ▽ˉ;)
📜表白墙/留言墙初级Spring Boot项目(此篇博客的简略版,不带MyBatis数据库开发)
目录
1、项目前端页面及项目文件架构展示
1.1、项目前端页面展示:
1.2、项目文件架构展示:
2、首先,定义前后端交互接口
3、然后,创建Spring Boot项目,导入下列依赖
4、编写前端页面
5、配置并连接数据库(数据库相关工作)
5.1、数据库分析及建库建表语句
5.2、连接数据库(yml文件)并配置相关配置
6、编写后端代码
6.1、数据库实体类(Model)
6.2、Controller —— 控制层
方法publishMessage处理逻辑:
方法getMessageInfo处理逻辑:
6.3、Service —— 业务逻辑层
6.4、Dao(此处命名为Mapper) —— 持久层
方法insertMessage处理逻辑:
方法selectAllMessage处理逻辑:
7、全部代码(超级全,含建库建表语句)含搭建教程:
依赖
建表:
yml配置文件书写
实体类:
Controller:
Service:
Dao(此处是Mapper)
前端:
此处用到了后端极其常见的三层架构
详细信息请看下面这个博客,其实如果是初学者的话,先简单按着SpringMVC的理解来也行,但两者是有区别的:
什么是SpringMVC?简单好理解!什么是应用分层?SpringMVC与应用分层的关系? 什么是三层架构?SpringMVC与三层架构的关系?
讲解:
如何在idea中创建Springboot项目? 手把手带你创建Springboot项目,稳!
导入下列依赖
在resource目录下的static目录下创建表白墙的html页面,此处我将其命名为 messagewall.html
如图红框位置:
表白墙页面(messagewall.html):
留言板 留言板
输入后点击提交, 会将信息显示下方空白处
谁: 对谁: 说什么:
代码逻辑:
建库建表语句:
库在此处就不指定了,放你自己常用的库下或者新建都行
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;
数据库分析:
你也可以输入 desc userinfo; 命令来在你的客户端查看建表的各字段信息,和我上面这张图表达的意思一样
解析如下:
字符集采用utf8mb4,自增主键是id
默认为...即若不主动设置,则为默认值
你的application文件后缀大概率是 .properties ,将其后缀改为 .yml 即可
yml配置如下:
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/message?characterEncoding=utf8&useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: configuration: # 配置打印 MyBatis 日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true #配置驼峰⾃动转换 # 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件 classpath指的是resources mapper-locations: classpath:mapper/**Mapper.xml
mybatis下面不懂得还好,我都给注释了!如果是前几行不懂的话,那完蛋,你最好先稍微学习下mybatis,前六行的作用是连接数据库
第三行的ip地址、端口号、数据库库名以及第四行和第五行的信息根据自己实际情况修改!!!
yml配置在上面
为实现分层架构,定义Model层,其实Model层也算Dao层的一部分,然后将对应的实体类命名为MessageInfo
这其中的各个属性对应数据库中的各个字段
以下是全部代码:
import lombok.Data; import java.util.Date; @Data // 组合注解,集成了@Getter @Setter @ToString 等注解 public class MessageInfo { private Integer id; private String from; private String to; private String message; private Date createTime; private Date updateTime; }
注意,Controller层、Serbice层、Dao层密切相关,所以Controller代码里就行Service和Dao层的部分,不要慌,我的代码是绝对完整正确的!,跟着我的讲解走并且理解就行!
接收前端发送的请求,对请求进行处理,并响应数据
全部代码如下:
import com.example.messagewall_mybatis.model.MessageInfo; import com.example.messagewall_mybatis.service.MessageService; import lombok.extern.slf4j.Slf4j; 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; @Slf4j @RequestMapping("/message") @RestController public class MessageController { @Autowired private MessageService messageService; @RequestMapping("/publish") public Boolean publishMessage(MessageInfo messageInfo){ log.info("发表留言"); // 进行参数的校验 if(!StringUtils.hasLength(messageInfo.getFrom()) || !StringUtils.hasLength(messageInfo.getTo()) || !StringUtils.hasLength(messageInfo.getMessage())){ return false; } // 添加留言 messageService.addMessage(messageInfo); return true; } @RequestMapping("/getMessageInfo") public ListgetMessageInfo(){ return messageService.getMessageInfo(); } }
下面这个注入了MessageService,该类里面都是对数据库进行增删改查的方法!
处理具体的业务逻辑
全部代码如下:
import com.example.messagewall_mybatis.mapper.MessageMapper; import com.example.messagewall_mybatis.model.MessageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class MessageService { @Autowired private MessageMapper messageMapper; public void addMessage(MessageInfo messageInfo) { messageMapper.insertMessage(messageInfo); } public ListgetMessageInfo() { return messageMapper.selectAllMessage(); } }
下面这个注入了MessageService,该接口里面都是实现对数据库进行增删改查的具体操作!
两个方法的定义逻辑:
负责数据访问操作,包括数据的增、删、改、查
全部代码如下:
import com.example.messagewall_mybatis.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 MessageMapper { @Insert("insert into message_info(`from`,`to`,`message`) values (#{from},#{to},#{message})") public void insertMessage(MessageInfo messageInfo); @Select("select * from message_info where delete_flag=0") ListselectAllMessage(); }
此处因为SQL语句过于简单,所以我选择了使用注解,当然,你使用XML当然也可以,按你的写作风格就行,但若你是初学者又刚好了解注解,那么按着我的来更方便一些!
定义Insert注解,将messageInfo实体类中的from、to、message三个属性的值赋值给mossage_info表中对应的三个属性
定义Select注解,查询message_info表中未被逻辑删除的数据,并将其放到集合中
至此,本项目就讲解完成了!
前路漫漫,数年磨剑只求一朝天下知!希望本篇博客给您进了些绵薄之力,感谢您的阅读!
友情提示:若您是初学者,建议慢慢阅读博客,跟着步骤一步一步搭建项目,代码也是绝对正确的!
但同时也为时间紧迫者以及掌握了一些知识的人提供了快捷方案,直接把所有代码放在下面,并配上了简单的搭建教程(详细的在上面)
库自己指定就行
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;
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/message?characterEncoding=utf8&useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: configuration: # 配置打印 MyBatis 日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true #配置驼峰⾃动转换 # 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件 classpath指的是resources mapper-locations: classpath:mapper/**Mapper.xml
import lombok.Data; import java.util.Date; @Data // 组合注解,集成了@Getter @Setter @ToString 等注解 public class MessageInfo { private Integer id; private String from; private String to; private String message; private Date createTime; private Date updateTime; }
import com.example.messagewall_mybatis.model.MessageInfo; import com.example.messagewall_mybatis.service.MessageService; import lombok.extern.slf4j.Slf4j; 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; @Slf4j @RequestMapping("/message") @RestController public class MessageController { @Autowired private MessageService messageService; @RequestMapping("/publish") public Boolean publishMessage(MessageInfo messageInfo){ log.info("发表留言"); // 进行参数的校验 if(!StringUtils.hasLength(messageInfo.getFrom()) || !StringUtils.hasLength(messageInfo.getTo()) || !StringUtils.hasLength(messageInfo.getMessage())){ return false; } // 添加留言 messageService.addMessage(messageInfo); return true; } @RequestMapping("/getMessageInfo") public ListgetMessageInfo(){ return messageService.getMessageInfo(); } }
import com.example.messagewall_mybatis.mapper.MessageMapper; import com.example.messagewall_mybatis.model.MessageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class MessageService { @Autowired private MessageMapper messageMapper; public void addMessage(MessageInfo messageInfo) { messageMapper.insertMessage(messageInfo); } public ListgetMessageInfo() { return messageMapper.selectAllMessage(); } }
import com.example.messagewall_mybatis.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 MessageMapper { @Insert("insert into message_info(`from`,`to`,`message`) values (#{from},#{to},#{message})") public void insertMessage(MessageInfo messageInfo); @Select("select * from message_info where delete_flag=0") ListselectAllMessage(); }
留言板 留言板
输入后点击提交, 会将信息显示下方空白处
谁: 对谁: 说什么:
🧸欢迎您于百忙之中阅读这篇博客,📜希望这篇博客给您带来了一些帮助,祝您生活愉快!