SpringBoot集成thymeleaf增删改查示例

有小伙伴找我要个 thymeleaf 的 demo,说自己集成的总是报错,所以就有了这篇…

关于什么是 thymeleaf 我就不赘述了,相信搜到这篇的大部分是奔着如何集成来的。

本文源码先附上:https://gitee.com/niceyoo/springboot-thymeleaf-demo

懒得看下文的可直接跳转至源码。下面把一些主要的配置粘一下,不做额外赘述,大部分可以在上方源码中获取,尤其是前端部分。

1、本文环境

  • IDEA,2021.2
  • JDK,8
  • SpringBoot,2.4.4
  • MybatisPlus,3.1.1
  • Thymeleaf,2.4.4
  • layui,2.5.6

2、依赖环境(pom.xml)

直接用的 spring-boot-starter-parent,不了解的可以看下这篇文章: https://www.cnblogs.com/niceyoo/p/10960207.html

主要依赖有:druid连接池、mybatisplus、mysql驱动、thymeleaf依赖。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.4</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--新增durid监控--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.23</version></dependency><!--Mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.1.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version></dependency><!--thymeleaf--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

3、配置文件(application.yaml)

主要定义了 数据库、thymeleaf、mybatisplus配置。

server:port: 8089spring:datasource:url: jdbc:mysql://127.0.0.1:3306/thymeleaf-db?useUnicode=true&characterEncoding=UTF-8&useSSL=falseusername: rootpassword: 123456type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverthymeleaf:#模板的模式,支持 HTML, XML TEXT JAVASCRIPTmode: HTML5#编码 可不用配置encoding: UTF-8#内容类别,可不用配置content-type: text/html#开发配置为false,避免修改模板还要重启服务器cache: false#配置模板路径,默认是templates,可以不用配置prefix: classpath:/templatessuffix: .htmlmybatis-plus:typeAliasesPackage: com.thymeleaf.demo.com.thymeleaf.demo.entityconfiguration:map-underscore-to-camel-case: truecache-enabled: truelazyLoadingEnabled: truemultipleResultSetsEnabled: true#这个配置会将执行的sql打印出来,在开发或测试的时候可以用log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

用到的SQL:

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_name` varchar(32) DEFAULT NULL,`age` int(11) DEFAULT NULL,`nick_name` varchar(64) DEFAULT NULL,`create_time` datetime DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

4、MyBatisPlus配置类(可忽略)

mybatisplus配置类,设置扫描包、加入分页插件。在 mybatisplus 3.4版本之后 PaginationInterceptor 弃用了,改用 MybatisPlusInterceptor,不了解的可自行搜索。至于为什么要使用自定义分页插件可参考方法注释解释。

@EnableTransactionManagement
@Configuration
@MapperScan("com.thymeleaf.demo.dao")
public class MyBatisPlus {/*** myabtis 实现的分页为什么还要分页插件?* <p>* 1.mybatis实现得分页时逻辑分页或者叫做内存不是物理分页* 2.他是把符合条件的数据全部查询出来放到内存中,然后返回你需要的那部分* 3.表中数据不多时,可以使用,速度慢一些;当数据量大时,建议使用物理分页*/@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}}

5、控制层(UserController)

如下写了个增删改查的实例,没有按照代码规范来,大致看一下即可。

其中返回 ModelAndView 的方法是用来映射对应的前端页面的,返回 R 的方法是接口返回形式。其中 R 是 mybatisplus 中提供的一个返回给前端信息的工具类,为了方便直接拿来用了。

@RestController
@RequestMapping("user")
public class UserController extends ApiController {/*** 服务对象*/@Resourceprivate UserService userService;/*** 用户列表展示** @return* @throws NoSuchAlgorithmException*/@GetMapping("view")public ModelAndView view(){return new ModelAndView("/user").addObject("modelName","用户管理模块");}/*** 新增用户** @param user 用户实体* @return 新增结果*/@PostMapping("insert")public R insert(@RequestBody User user){Assert.notNull(user,"user不能为空");return success(userService.save(user));}/*** 修改用户** @param user 用户实体* @return 修改结果*/@PostMapping("update")public R update(@RequestBody User user){Assert.notNull(user,"user不能为空");return success(userService.saveOrUpdate(user));}/*** 删除用户** @param ids 用户ids* @return 删除结果*/@PostMapping("delete")public R delete(@RequestParam List<String> ids){Assert.notNull(ids,"ids不能为空");return success(userService.removeByIds(ids));}/*** 查询用户数据 - 分页** @param current 当前页* @param size 页码大小* @return 分页数据列表*/@GetMapping("selectAll")public R selectAll(@RequestParam Integer current, @RequestParam Integer size, @RequestParam(required = false) String userName){QueryWrapper<User> queryWrapper = new QueryWrapper<>();if(StringUtils.hasText(userName)){queryWrapper.like("user_name", userName);}Page<User> page = new Page<User>(current,size);IPage<User> result = userService.page(page, queryWrapper);return success(result);}
}

6、service服务层

服务层就比较简单了,直接用的 mybatisplus 的 IService,这个类中实现了大部分方法。直接拿来集成就好了,代码都不用写。

public interface UserService extends IService<User> {}@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {}

一个接口,一个实现,没写一点代码。

7、前端界面

前端界面用的 layui,全部代码就不粘贴了,说一下 Thymeleaf 吧,主要是头部需要声明,结构如下:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"><head><meta charset="UTF-8"><title>测试</title><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><link rel="stylesheet" type="text/css" th:href="@{/plugins/layui/css/layui.css}"/></head><body><div>测试</div></body>
</html>

本文源码:https://gitee.com/niceyoo/springboot-thymeleaf-demo

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

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

相关文章

转:基于TLS1.3的微信安全通信协议mmtls介绍

转自&#xff1a; https://mp.weixin.qq.com/s?__bizMzAwNDY1ODY2OQ&mid2649286266&idx1&snf5d049033e251cccc22e163532355ddf&scene0&keyb28b03434249256b2a5d4fdf323a185a798eaf972317ca3a47ef060d35c5cd8a4ae35715466d5bb5a558e424d20bef6c&ascene…

慧联A8最新检测使用教程V2.0.3

有小伙伴反馈旧版本 TWS106、TWSVerification 软件无法检测慧联A8&#xff0c;如下方截图所示&#xff1a; 由于之前版本确实太低 1.0.5 或者 2.0.2 都无法检测慧联A8&#xff0c;需要安装 2.0.3 版本APP才可以检测&#xff0c;如下为慧联A8检测截图 2.0.3 版本APP&#xff1a;…

工作307:uni-富文本的实现逻辑跳转

<template><view><jinEdit placeholder"请输入内容" editOk"editOk" uploadFileUrl"/#"></jinEdit></view> </template><script>import jinEdit from /components/jin-edit/jin-edit.vue;export defa…

非洛达芯片检测聚合教程NOT AIROHA CHIP

虽然发过如何使用mmi_ut检测耳机的文章了&#xff0c;但是仍有些小伙伴拿检测截图来问耳机啥版本&#xff0c;这次干脆直接把这段时间问的比较多的一些非洛达版本总结一下。顺道也给一些代理们看看&#xff0c;有些水平太差了。。。看固件都分不出啥版本来。。 注意&#xff1…

MyBatis:事务回滚

事务的隔离级别&#xff1a;DEFAULT、READ_UNCOMMITED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE 事务的传播行为&#xff1a;REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED 我们这里举一个小例子说明下&#xff0c;在一个service方法中执…

华强北耳机版本太多,不知道如何选购?

目前市面上太多版本华强北三代耳机了&#xff0c;细数的话不下7、8种&#xff0c;比如什么&#xff0c;豪锐原壳版本、公牛版本、悦虎版本、翼虎版本、慧联A6(106)版本、慧联A6pro、慧联A8等&#xff0c;当然还得加上什么佳和1562A、悦虎|艾创力1562F、1536U&#xff0c;亦或者…

verilog 除法器

verilog 除法器&#xff1a;利用二进制的除法翻译过来的硬件电路1.1 实现算法基于减法的除法器的算法&#xff1a; 对于32的无符号除法&#xff0c;被除数a除以除数b&#xff0c;他们的商和余数一定不会超过32位。首先将a转换成高32位为0&#xff0c;低32位为a的temp_a。…

华强北四代慧联A10|悦虎1562M怎么样?

1、什么是华强北四代耳机&#xff1f; 所谓的华强北四代&#xff0c;其实对标的是水果10.19新发布的半入耳的AirPods 3&#xff0c;在此之前 AirPods 2被称作二代&#xff0c;AirPods Pro 被称作 三代&#xff0c;由于发布的新版本叫 AirPods 3&#xff0c;所以为了加以区分&a…

selenium实现原理

selenium会调用各自浏览器API&#xff0c;会发出CommandExector指令。指令会以URl形式通过Http request 发送出去。开始时&#xff0c;初始化webdriver时会启用一个端口的web service。浏览器就是绑定此端口。就可以操作浏览器上的元素。并且浏览器会返回请求&#xff0c;就可以…

洛达芯片公牛方案适配APP使用参考

1、一点废话&#xff0c;检测相关 不容易&#xff0c;吵吵嚷嚷的大半年&#xff0c;公牛版三代终于出适配安卓的App了&#xff0c;此后&#xff0c;安卓阵营又多了一个可供纠结&#xff08;选择&#xff09;的版本了 &#xff0c;截图几张比较重要的功能。 纠结选择咱先不管…

悦虎四代洛达1562M固件下载升级更新

四代如何刷固件可以参考之前二代的&#xff0c;等后面有时间的话给大家录制个四代的升级视频&#xff1a; 二代刷机教程&#xff1a;http://www.71xun.com/index.php/archives/51 四代固件下载链接&#xff1a;http://nxw.so/6uddX 升级内容&#xff1a;适配悦虎APP flycc增…

华强北耳机为啥老是有人翻车?

我发现买华强北耳机的很多很多人&#xff0c;根本就不了解华强北耳机&#xff0c;估计在搜索耳机时&#xff0c;看到那些推送过来的「华强北耳机」链接就上车了&#xff0c;尤其是「评论区、买家秀」&#xff0c;男模、女模的模版式精彩评论&#xff0c;让你上头… 所以这篇文…

为什么只推荐入主流版本华强北耳机?

这篇是针对三代的&#xff0c;如下为正文。 现在华强北耳机系列里&#xff0c;洛达 1562A 都快吹上天了~ 热度越高&#xff0c;翻车的就越多。 经常有小伙伴在某宝、某多多上看到那种 140-170 左右的洛达 1562A&#xff0c;说卖家坚称说可以过我的黄色 logo 的检测软件&…

bootstrap简单使用

1.bootstrap实例&#xff1a; 1 <title>Bootstrap 实例 - 代码</title>2 <link href"https://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel"stylesheet">3 <script src"https://libs.baidu.com/jquery/2.0.0/jqu…

BFC与合并 浅析

BFC BFC 全称 Block Formatting Context。每个渲染区域用formatting context表示&#xff0c;它决定了其子元素将如何定位&#xff0c;以及和其他元素的关系和相互作用在正常流中的盒子要么属于块级格式化上下文&#xff0c;要么属于内联格式化上下文 BFC特性&创建条件 特性…

python3.6安装【scrapy】-最保守方法

系统:win10平台 python版本:3.6.1 1. 下载并安装 pywin32&#xff1a; 进入https://sourceforge.net/projects/pywin32/files/&#xff0c;按照下图目录点击pywin32&#xff0c;选择Build 221&#xff0c;找到自己对应版本的pywin32点击连接即可自己下载&#xff0c;安装按步…

java设置项目根目录 工作目录 working dictionary

改变java项目中&#xff0c;绝对路径的根目录 run->run configuration ->Arguments 更改 working dictioinary 转载于:https://www.cnblogs.com/YuQiao0303/p/9277669.html

Linux 混合编译opencv与opencv_contrib的android版本

一、该方法只能编译.a文件 使用该脚本&#xff1a;https://github.com/tzutalin/build-opencv-for-android 1 $ git clone https://github.com/tzutalin/build-opencv-for-android.git 2 $ cd build-opencv-for-android 3 $ ./setup.sh 3.3.1 而后配置android ndk的路径 export…

微信小程序 - 用户进入客服会话会在右下角显示可能要发送的小程序提示

起因&#xff0c;看到了抽奖小助手的操作&#xff0c;如下截图 我就想 我去 这个吊啊 很懵逼 因为之前没见过 以为是服务端的操作 看了半天服务端文档并没有相关介绍&#xff0c;在微信社区遨游了半天发现了 原来就是小程序「buttun」组件新增&#xff08;之前看的时候 明明没…

小程序真机测试「启动参数」解析出错问题

写小程序2年了 前两天才碰到的这个问题 以前没出错过 话不多说 直接上图 1、小程序 - 启动参数图例 2 2、微信开发者工具-模拟器输出参数-正常图例 这是没问题&#xff01; 3、真机测试-输出参数-错误图例 也不知道是什么原因 去看了一下文档 「启动参数」传参的规则并没有改…