thymeleaf+mybatis(本文章用于期末考前10分钟速看)

期末速看

  • pom(了解)
  • application.properties
  • sql
  • 代码
    • Controller控制层
    • 视图
    • service: 服务层
    • mapper(dao):持久层
    • entity层(model层,domain层、 bean):对应数据库表,实体类
  • 效果

使用Spring Boot整合Mybatis,在浏览器中实现对评论数据的增删改查操作。thymeleaf+mybatis

链接:https://pan.baidu.com/s/12BQcCwJ_2fvTzf5YxexLgg?pwd=1024
提取码:1024
网盘里有我录的视频

pom(了解)

<version>2.7.0</version><java.version>1.8</java.version><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version>
</dependency>

在这里插入图片描述
在这里插入图片描述

application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/mydb2?useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

sql

use mydb2;
DROP TABLE IF EXISTS `t_comment`;
CREATE TABLE `t_comment` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '评论id',`article_id` int(11)  COMMENT '关联的文章id',`created` date  COMMENT '评论时间',`ip` varchar(200) DEFAULT NULL COMMENT '评论用户登录的ip地址',`content` text NOT NULL COMMENT '评论内容',`status` varchar(200)  DEFAULT 'approved' COMMENT '评论状态',`author` varchar(200) NOT NULL COMMENT '评论用户用户名',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `t_comment` VALUES ('1', '12', '2018-12-13', '0:0:0:0:0:0:0:1', '很不错,不过这文章排版不太好看啊', 'approved', '李四');
INSERT INTO `t_comment` VALUES ('2', '11', '2018-12-13', '0:0:0:0:0:0:0:1', '很不错的原理分析,受用了!', 'approved', '李四');
INSERT INTO `t_comment` VALUES ('3', '10', '2018-12-13', '0:0:0:0:0:0:0:1', '关于Docker虚拟容器的讲解挺好的额,学习中', 'approved', '李四');
INSERT INTO `t_comment` VALUES ('9', '1', '2018-12-13', '0:0:0:0:0:0:0:1', '非常不错,赞一个!', 'approved', '李四');
INSERT INTO `t_comment` VALUES ('10', '1', '2018-12-13', '0:0:0:0:0:0:0:1', '博主,这资料怎么弄的?有相关资源和教材推荐吗?', 'approved', '李四');
INSERT INTO `t_comment` VALUES ('11', '1', '2018-12-13', '0:0:0:0:0:0:0:1', '很详细,感谢...', 'approved', '东方不败');
INSERT INTO `t_comment` VALUES ('12', '1', '2018-12-13', '0:0:0:0:0:0:0:1', '很全,努力学习中...', 'approved', '东方不败');
INSERT INTO `t_comment` VALUES ('13', '1', '2018-12-13', '0:0:0:0:0:0:0:1', '好东西,先收藏起来,哈哈', 'approved', 'tom');
INSERT INTO `t_comment` VALUES ('14', '8', '2018-12-13', '0:0:0:0:0:0:0:1', 'very good blog', 'approved', 'tom');

代码

Controller控制层

@Controller
public class CommentController {@Autowiredprivate  CommentService commentService;@GetMapping("/index")public String index(Model model){List<Comment> comments = commentService.findAll();System.out.println(comments);model.addAttribute("comments",comments);return "index";}@GetMapping("/delete/{id}")public String delete(@PathVariable("id") int id, Model model){System.out.println("delete: "+id);commentService.deleteById(id);
//        return index(model);return "redirect:/index";}@PostMapping("/save")public String save(@RequestParam("content") String content,@RequestParam("author")  String author, Model model){Comment comment = new Comment(content, author);commentService.save(comment);return "redirect:/index";//        return this.index(model);}@GetMapping("update")public String updateHtml(@RequestParam("id") int id,Model model){Comment comment = commentService.findById(id);model.addAttribute("comment",comment);return "update";}@PostMapping("update")public String update(@RequestParam("id") int id,@RequestParam("content") String content,@RequestParam("author") String author,Model model){commentService.update(new Comment(id,content,author));return "redirect:/index";//        return this.index(model);}}

视图

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>首页</title>
</head>
<body>
<form  action="save" method="post">评论内容 :<input name="content" type="text">作者: <input name="author" type="text"><input type="submit" value="添加评论">
</form>
<table border="1"><tr><td>内容</td><td>作者</td><td>编辑</td><td>添加评论</td></tr><tr th:each="c:${comments}"><td th:text="${c.content}"></td><td th:text="${c.author}"></td><td ><a th:href="@{'/update?id=' + ${c.id}}">编辑</a></td><td ><a th:href="@{'/delete/' + ${c.id}}">删除</a></td></tr>
</table>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>编辑评论</title>
</head>
<body>
<form  action="/update" method="post"><input name="id" type="hidden" th:value="${comment.id}">评论内容 :<input name="content" type="text" th:value="${comment.content}">作者: <input name="author" type="text" th:value="${comment.author}"><input type="submit" value="修改评论">
</form>
</body>
</html>

service: 服务层

@Service
public class CommentService {@Autowiredprivate CommentMapper commentMapper;public List<Comment> findAll(){return  commentMapper.findAll();}public Comment findById(int id){return commentMapper.findById(id);}public int deleteById(int id){return commentMapper.deleteById(id);}public  int save(Comment comment){return commentMapper.save(comment);}public  int update(Comment comment){return commentMapper.update(comment);}}

mapper(dao):持久层

@Mapper
public interface CommentMapper {@Select("select * from t_comment")public List<Comment> findAll();@Select("select * from t_comment where id=#{id}")public Comment findById(int id);@Delete("delete from t_comment where id=#{id}")public int deleteById(int id);@Insert("INSERT INTO t_comment(content , author) VALUES (#{content},  #{author})")public  int save(Comment comment);@Update("update t_comment set  content= #{content},author=#{author} where id=#{id}")public  int update(Comment comment);
}

entity层(model层,domain层、 bean):对应数据库表,实体类

public class Comment {private int id;private int article_id;//关联的文章idprivate  String created;//评论时间private  String ip;//用户登录的ip地址private  String content;//评论内容private  String status;//评论状态private  String author;//评论 的用户名//构造方法、get、set
}

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈你对AQS的理解

AQS概述 AQS&#xff0c;全称为AbstractQueuedSynchronizer&#xff0c;是Java并发包&#xff08;java.util.concurrent&#xff09;中一个核心的框架&#xff0c;主要用于构建阻塞式锁和相关的同步器&#xff0c;也是构建锁或者其他同步组件的基础框架。AQS提供了一种基于FIF…

模拟城市5: 未来之城 全DLC for Mac 下载安装包

模拟城市5&#xff1a;未来之城&#xff08;SimCity BuildIt&#xff09;是一款由Maxis开发并由 Electronic Arts&#xff08;EA&#xff09;发行的城市建设和管理模拟游戏。这款游戏最初在2014年发布&#xff0c;适用于iOS、Android以及Windows Phone平台&#xff0c;随后在20…

力扣最新详解5道题:两数之和三数之和四数之和

目录 一、查找总价格为目标值的两个商品 题目 题解 方法一&#xff1a;暴力枚举 方法二&#xff1a;对撞指针 二、两数之和 题目 题解 方法一&#xff1a;暴力枚举 方法二&#xff1a;哈希表法 三、三数之和 题目 题解 方法一&#xff1a;排序暴力枚举set去重 …

数据资产治理的智能化探索:结合云计算、大数据、人工智能等先进技术,探讨数据资产治理的智能化方法,为企业提供可靠、高效的数据资产解决方案,助力企业提升竞争力

一、引言 在信息化时代&#xff0c;数据已成为企业最重要的资产之一。随着云计算、大数据、人工智能等先进技术的飞速发展&#xff0c;数据资产治理面临着前所未有的机遇与挑战。本文旨在探讨如何结合这些先进技术&#xff0c;实现数据资产治理的智能化&#xff0c;为企业提供…

【活动感想】筑梦之旅·AI共创工坊 workshop 会议回顾

目录 &#x1f30a;1. 会议详情 &#x1f30a;2. 会议回顾 &#x1f30d;2.1 主持人开场 &#x1f30d;2.2 元甲-小当家 AI 驱动的创意儿童营养早餐料理机&今天吃什么App &#x1f30d;2.3 Steven- A l 心理疗愈认知 &#x1f30d;2.4 伯棠-诸子百家(xExperts)-多智能…

C++ 文件读写

目录 一、XML文件读写 1、写入XML文件 2、读取XML文件 二、JSON文件读写 1、写入JSON文件 2、读取JSON文件 3、写入JSON文件 4、读取JSON文件 三、CSV文件读写 1、写入CSV文件 2、读取CSV文件 四、Excel文件读写 1、写入Excel文件 2、读取Excel文件 五、INI文件读…

转盘输入法-总

序 转盘输入法&#xff0c;给你的聊天加点新意。它不用常见的九宫格或全键盘&#xff0c;而是把字母摆在圆盘上&#xff0c;一滑一滑&#xff0c;字就出来了&#xff0c;新鲜又直接。 PC屏幕键盘的对比 鉴于屏幕键盘这一新颖界面的局限性&#xff0c;当用户在操作时&#xff…

015、HBase分布式数据库与传统数据库的深度对比

目录 HBase分布式数据库与传统数据库的深度对比 1. 数据模型 1.1 传统关系型数据库 1.2 HBase 2. 扩展性 2.1 传统关系型数据库 2.2 HBase 3. 查询语言 3.1 传统关系型数据库 3.2 HBase 4. 事务支持 4.1 传统关系型数据库 4.2 HBase 5. 数据一致性 5.1 传统关系型…

STM32 HAL库里 串口中断回调函数是在怎么被调用的?

跟着正点原子学习的HAL库写串口接收程序的时候一直有困惑&#xff0c;使用HAL_UART_Receive_IT开启接收中断后&#xff0c;为啥处理函数要写在HAL_UART_RxCpltCallback里&#xff0c;中断发生的时候是怎么到这个回调函数里去的&#xff1f; void MX_USART1_UART_Init(void) {h…

Elasticsearch环境搭建|ES单机|ES单节点模式启动|ES集群搭建|ES集群环境搭建

文章目录 版本选择单机ES安装与配置创建非root用户导入安装包安装包解压配置JDK环境变量配置single-node配置JVM参数后台启动|启动日志查看启动成功&#xff0c;访问终端访问浏览器访问 Kibana安装修改配置后台启动|启动日志查看浏览器访问 ES三节点集群搭建停止es服务域名配置…

C++面试题精选-2024/06/26

堆分配会比栈快吗 堆分配和栈分配在速度上并不直接可比,因为它们服务于不同的目的和场景,具有不同的特性和优势。以下是关于堆分配和栈分配速度方面的详细分析: 数据结构: 栈是一种线性数据结构,遵循先进后出(LIFO)的原则。堆则是一种树状的数据结构,允许随机插入和删…

【SGX系列教程】(二)第一个 SGX 程序: HelloWorld,linux下运行

文章目录 0. SGX基础原理分析一.准备工作1.1 前提条件1.2 SGX IDE1.3 基本原理 二.程序设计2.1 目录结构2.2 源码设计2.2.1 Encalve/Enclave.edl:Enclave Description Language2.2.2 Enclave/Enclave.lds: Enclave linker script2.2.3 Enclave/Enclave.config.xml: Enclave 配置…

Elasticsearch 管道聚合:组合多个聚合

在Elasticsearch中&#xff0c;聚合&#xff08;Aggregations&#xff09;是处理和分析大量数据的关键工具。通过聚合&#xff0c;我们可以从海量的数据中提取出有价值的统计信息&#xff0c;如最大值、最小值、平均值、总和等。然而&#xff0c;有时单一聚合无法满足我们复杂的…

C语言之字符串存储差异分析

C语言之字符串存储差异分析 字符串字符串字面量字符数组动态分配字符串 结语 字符串 在C语言中&#xff0c;可以使用多种方式来创建字符串。但是&#xff0c;不同创建方式之间的区别&#xff0c;你了解么&#xff1f;。 字符串字面量 C语言 -- 字符串字面量创建方式 char *s…

Games101学习笔记 Lecture 14: Ray Tracing 2 (Acceleration Radiometry)

Lecture 14: Ray Tracing 2 (Acceleration & Radiometry 一、加速光线追踪 AABB1.均匀网格 Uniform Spatial Partitions (Grids)①前处理-构建加速网格②射线与场景相交③网格分辨率④适用情况 2.空间划分KD-Tree①预处理②数据结构③遍历④问题 3.对象划分 & 包围盒层…

Lua: 轻量级多用途脚本语言

Lua 是一种高效而轻量级的脚本语言&#xff0c;具备强大的扩展性和灵活性&#xff0c;广泛应用于游戏开发、嵌入式系统、Web 应用等多个领域。本文将深入探讨 Lua 的特性、应用场景以及如何使用 Lua 进行开发。 1. Lua 的起源与发展 Lua 的发展始于上世纪90年代初&#xff0c;…

【微代码】Linux同步机制complete基本用法,以及如何封装一个内核态sleep的工具函数ksleep?

文章目录 背景基本代码和用法内核态sleep效果其他 背景 Linux提供了多种同步机制&#xff0c;其中complete就是一种。complete能够阻塞等待状态同步&#xff0c;并且等待对方释放中会调用schedule让出CPU。如果想在内核中等待一个固定时长继续执行他是一个非常不错的选择。有点…

为什么明明引入依赖了却总是爆红说不认识?

把maven中的依赖部分dependencies删掉&#xff0c;重新刷新一遍&#xff0c;再粘贴回去&#xff0c;重新刷新一遍就可以了

Spark SQL----分布式SQL引擎

Spark SQL----分布式SQL引擎 一、运行Thrift JDBC/ODBC服务器二、运行Spark SQL CLI2.1 Spark SQL命令行选项2.2 hiverc文件2.3 路径的说明2.4 支持的注释类型2.5 Spark SQL CLI交互式Shell命令2.6 例子 Spark SQL还可以使用JDBC/ODBC或命令行接口充当分布式查询引擎。在这种模…

mysql8一键安装脚本(linux) 拿走即用

创建一个shell文件,将下面的代码放里面去,然后放到linux服务器上运行就可以了 #!/bin/bash#---------------------* # * # 2021-10-08 * # install mysql-8 * # * #---------------------*route=/usr #包存放路径 mys…