# springboot-thymeleaf-demo **Repository Path**: niceyoo/springboot-thymeleaf-demo ## Basic Information - **Project Name**: springboot-thymeleaf-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2021-09-15 - **Last Updated**: 2023-08-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 有小伙伴找我要个 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 ![image-20210915165630898](https://gitee.com/niceyoo/blog/raw/master/img/image-20210915165630898.png) ### 2、依赖环境(pom.xml) 直接用的 spring-boot-starter-parent,不了解的可以看下这篇文章: https://www.cnblogs.com/niceyoo/p/10960207.html 主要依赖有:druid连接池、mybatisplus、mysql驱动、thymeleaf依赖。 ``` org.springframework.boot spring-boot-starter-parent 2.4.4 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web com.alibaba druid 1.1.23 com.baomidou mybatis-plus 3.1.1 com.baomidou mybatis-plus-boot-starter 3.1.1 mysql mysql-connector-java 8.0.22 org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-test test ``` ### 3、配置文件(application.yaml) 主要定义了 数据库、thymeleaf、mybatisplus配置。 ``` server: port: 8089 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/thymeleaf-db?useUnicode=true&characterEncoding=UTF-8&useSSL=false username: root password: 123456 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver thymeleaf: #模板的模式,支持 HTML, XML TEXT JAVASCRIPT mode: HTML5 #编码 可不用配置 encoding: UTF-8 #内容类别,可不用配置 content-type: text/html #开发配置为false,避免修改模板还要重启服务器 cache: false #配置模板路径,默认是templates,可以不用配置 prefix: classpath:/templates suffix: .html mybatis-plus: typeAliasesPackage: com.thymeleaf.demo.com.thymeleaf.demo.entity configuration: map-underscore-to-camel-case: true cache-enabled: true lazyLoadingEnabled: true multipleResultSetsEnabled: 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 实现的分页为什么还要分页插件? *

* 1.mybatis实现得分页时逻辑分页或者叫做内存不是物理分页 * 2.他是把符合条件的数据全部查询出来放到内存中,然后返回你需要的那部分 * 3.表中数据不多时,可以使用,速度慢一些;当数据量大时,建议使用物理分页 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } ``` ### 5、控制层(UserController) 如下写了个增删改查的实例,没有按照代码规范来,大致看一下即可。 其中返回 ModelAndView 的方法是用来映射对应的前端页面的,返回 R 的方法是接口返回形式。其中 R 是 mybatisplus 中提供的一个返回给前端信息的工具类,为了方便直接拿来用了。 ``` @RestController @RequestMapping("user") public class UserController extends ApiController { /** * 服务对象 */ @Resource private 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 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 queryWrapper = new QueryWrapper<>(); if(StringUtils.hasText(userName)){ queryWrapper.like("user_name", userName); } Page page = new Page(current,size); IPage result = userService.page(page, queryWrapper); return success(result); } } ``` ### 6、service服务层 服务层就比较简单了,直接用的 mybatisplus 的 IService,这个类中实现了大部分方法。直接拿来集成就好了,代码都不用写。 ``` public interface UserService extends IService {} @Service("userService") public class UserServiceImpl extends ServiceImpl implements UserService {} ``` 一个接口,一个实现,没写一点代码。 ### 7、前端界面 前端界面用的 layui,全部代码就不粘贴了,说一下 Thymeleaf 吧,主要是头部需要声明,结构如下: ``` 测试

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