SpringBoot整合Thymeleaf
一个整合Thymeleaf与Mybatis的CRUD例子
一、添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
二、yml文件
spring:
thymeleaf:
#模板编码
mode: LEGACYHTML5
#是否缓存 别闹不缓存
cache: false
# 在构建URL时预先查看名称的前缀
prefix: classpath:/templates/
# 构建URL时附加查看名称的后缀.
suffix: .html
三、sql语句
CREATE TABLE `user` (
`id` INT(9) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(10) DEFAULT NULL,
`age` INT(3) DEFAULT NULL,
`birth_day` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO test.user (NAME,age,birth_day) VALUES ("xiaoming",18,NOW());
INSERT INTO test.user (NAME,age,birth_day) VALUES ("xiaohua",19,NOW());
四、静态html文件
1、index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
>
<head>
<meta charset="UTF-8">
<title>Thymeleaf in action</title>
</head>
<body>
<div th:replace="~{header::header}"></div>
<h3 th:text="${userModel.title}"></h3>
<div>
<a th:href="@{/user/form}">创建用户</a>
</div>
<table border="1">
<thead>
<tr>
<td>ID</td>
<td>age</td>
<td>Name</td>
<td>操作</td>
</tr>
</thead>
<tbody>
<tr th:if="${userModel.userList.size()} eq 0">
<td colspan="3">没有用户信息!</td>
</tr>
<tr th:each="user:${userModel.userList}">
<td th:text="${user.id}"></td>
<td th:text="${user.age}"></td>
<td >
<a th:href="@{'/user/info/'+${user.id}}" th:text="${user.name}"></a>
</td>
<td >
<a th:href="@{'/user/delete/'+${user.id}}">删除</a>
<a th:href="@{'/user/modify/'+${user.id}}">修改</a>
</td>
</tr>
</tbody>
</table>
<div th:replace="~{footer::footer}"></div>
</body>
</html>
2、add.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
>
<head>
<meta charset="UTF-8">
<title>Thymeleaf in action</title>
</head>
<body>
<div th:replace="~{header::header}"></div>
<h3 th:text="${userModel.title}"></h3>
<form action="/user/save" th:action="@{/user/save}" method="POST" th:object="${userModel.user}">
<input type="hidden" name="id" th:value="*{id}">
名称:<br>
<input type="text" name="name" th:value="*{name}">
<br>
年龄:<br>
<select id="age" name="age" th:value="*{age}">
<!--<option value="99" selected="true">请选择控制时间</option>-->
<option th:if="${'1'=='1' && '0'=='0'}" th:each="i:${#numbers.sequence(1,150)}" th:selected="${i+'' eq '18' }" th:value="${i}" th:text="${i}" ></option>
</select>
生日:<br>
<input type="text" name="birthDay" th:value="*{birthDay}">
<input type="submit" value="提交" >
</form>
<div th:replace="~{footer::footer}"></div> <script> </script>
</body>
</html>
3、info.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
>
<head>
<meta charset="UTF-8">
<title>Thymeleaf in action</title>
</head>
<body>
<div th:replace="~{header::header}"></div>
<h3 th:text="${userModel.title}"></h3>
<div>
<p><strong>ID:</strong><span th:text="${userModel.user.id}"></span></p>
<p><strong>Name:</strong><span th:text="${userModel.user.name}"></span></p>
<p><strong>age:</strong><span th:text="${userModel.user.age}"></span></p>
<p><strong>birthDay:</strong><span th:text="${userModel.user.birthDay}"></span></p>
</div>
<div th:replace="~{footer::footer}"></div>
</body>
</html>
4、modify.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
>
<head>
<meta charset="UTF-8">
<title>Thymeleaf in action</title>
</head>
<body>
<div th:replace="~{header::header}"></div>
<h3 th:text="${userModel.title}"></h3>
<form action="/user/update" th:action="@{/user/update}" method="POST" th:object="${userModel.user}">
<input type="hidden" name="id" th:value="*{id}">
名称:<br>
<input type="text" name="name" th:value="*{name}">
<br>
年龄:<br>
<select id="age" name="age" >
<!--<option value="99" selected="true">请选择控制时间</option>-->
<option th:if="${'1'=='1' && '0'=='0'}" th:each="i:${#numbers.sequence(1,150)}" th:selected="${i eq user.age }" th:value="${i}" th:text="${i}" ></option>
</select>
生日:<br>
<input type="text" name="birthDay" th:value="*{birthDay}">
<input type="submit" value="提交" >
</form>
<input type="hidden" name="iasdasdd" th:value="${userModel.user.age}">
<div th:replace="~{footer::footer}"></div>
</body>
</html>
5、footer.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
>
<head>
<meta charset="UTF-8">
<title>Thymeleaf in action</title>
</head>
<body>
<div th:fragment="footer">
<a href="http://www.baidu.com">百度一下</a>
</div>
</body>
</html>
6、header.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
>
<head>
<meta charset="UTF-8">
<title>Thymeleaf in action</title>
</head>
<body>
<div th:fragment="header">
<h1>Thymeleaf in action</h1>
<a href="/user/index" >首页</a>
</div>
</body>
</html>
五、java文件
1、UserController
package com.ydj.yboot.web.controller; import com.ydj.yboot.web.domain.User;
import com.ydj.yboot.web.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; /**
* @author yuduojia
* @date 2019/5/24 13:17
*/
@RestController
@RequestMapping("/user")
public class UserController { @Autowired
private UserService userService; @GetMapping("/index")
public ModelAndView list(Model model) {
model.addAttribute("userList",userService.getUserList());
model.addAttribute("title", "用户管理");
return new ModelAndView("user/index","userModel",model);
} @GetMapping("/form")
public ModelAndView createForm(Model model) {
model.addAttribute("user",new User());
model.addAttribute("title", "创建用户");
return new ModelAndView("user/add","userModel",model);
} @PostMapping("/save")
public ModelAndView saveOrUpdateUser( User user) {
int i = userService.saveUser(user);
return new ModelAndView("redirect:/user/index");//重定向到list页面
} @GetMapping("/delete/{id}")
public ModelAndView deleteUser(@PathVariable("id") Long id) {
userService.deleteUser(id);
return new ModelAndView("redirect:/user/index");//重定向到list页面
} @GetMapping("/info/{id}")
public ModelAndView view(@PathVariable("id") Long id,Model model) {
User user = userService.getUserById(id);
model.addAttribute("user",user);
model.addAttribute("title", "查看用户");
return new ModelAndView("user/info","userModel",model);
} @GetMapping("/modify/{id}")
public ModelAndView modifyUser(@PathVariable("id") Long id, Model model) {
model.addAttribute("user",userService.getUserById(id));
model.addAttribute("title", "修改用户");
return new ModelAndView("user/modify","userModel",model);
} @PostMapping("/update")
public ModelAndView updateUser(User user) {
int l = userService.updateUser(user);
return new ModelAndView("redirect:/user/index");//重定向到list页面
}
}
2、UserService
package com.ydj.yboot.web.service; import com.ydj.yboot.web.domain.User; import java.util.List; /**
* @author yuduojia
* @date 2019/5/24 13:20
*/
public interface UserService {
List<User> getUserList(); int saveUser(User user); void deleteUser(Long id); User getUserById(Long id); int updateUser(User user);
}
3、UserServiceImpl
package com.ydj.yboot.web.service.impl; import com.ydj.yboot.web.dao.UserDao;
import com.ydj.yboot.web.domain.User;
import com.ydj.yboot.web.service.UserService;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.util.List; /**
* @author yuduojia
* @date 2019/5/24 13:21
*/
@Service
public class UserServiceImpl implements UserService { @Resource
private UserDao userDao; @Override
public List<User> getUserList() {
return userDao.getUserList();
} @Override
public int saveUser(User user) {
return userDao.saveUser(user);
} @Override
public void deleteUser(Long id) {
userDao.deleteUser(id);
} @Override
public User getUserById(Long id) {
return userDao.getUserById(id);
} @Override
public int updateUser(User user) {
return userDao.updateUser(user);
} }
4、UserDao
package com.ydj.yboot.web.dao; import com.ydj.yboot.web.domain.User;
import org.apache.ibatis.annotations.Mapper; import java.util.List; /**
* @author yuduojia
* @date 2019/5/24 13:21
*/
@Mapper
public interface UserDao { List<User> getUserList(); int saveUser(User user); void deleteUser(Long id); User getUserById(Long id); int updateUser(User user);
}
5、user
package com.ydj.yboot.web.domain; import java.io.Serializable;
import java.util.Date; /**
* @author yuduojia
* @date 2019/5/24 13:14
*/
public class User implements Serializable { private int id;
private String name;
private int age;
private String birthDay;
// private Dept dept;
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getBirthDay() {
return birthDay;
} public void setBirthDay(String birthDay) {
this.birthDay = birthDay;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", birthDay=" + birthDay +
'}';
}
}
六、静态mapper.xml文件 UserMapper.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ydj.yboot.web.dao.UserDao"> <select id="getUserList" resultMap="getUserListResultMap">
select * from user
<where>
<if test="id != null and id != ''"> and id = #{id} </if>
<if test="name != null and name != ''"> and name = #{name} </if>
<if test="age != null and age != ''"> and age = #{age} </if>
<if test="birthDay != null and birthDay != ''"> and birth_day = #{birthDay} </if>
</where>
</select> <resultMap id="getUserListResultMap" type="com.ydj.yboot.web.domain.User">
<id column="id" property="id" jdbcType="INTEGER"></id>
<result column="name" property="name" jdbcType="VARCHAR"></result>
<result column="age" property="age" jdbcType="INTEGER"></result>
<result column="birthDay" property="birth_day" jdbcType="TIMESTAMP"></result>
<!--<association property="Dept" javaType="com.ydj.yboot.web.domain.Dept">
<result column="dept_name" property="deptName"></result>
</association>-->
</resultMap> <insert id="saveUser" parameterType="com.ydj.yboot.web.domain.User"
useGeneratedKeys="true" keyProperty="id">
insert into user
(
`name`,
`age`,
`birth_day`
)
values
(
#{name},
#{age},
#{birthDay}
)
</insert> <delete id="deleteUser" parameterType="long" >
delete from user where id = #{value}
</delete> <select id="getUserById" resultType="com.ydj.yboot.web.domain.User">
select * from user where id = #{value}
</select> <update id="updateUser" parameterType="com.ydj.yboot.web.domain.User">
update user
<set>
<if test="name != null">`name` = #{name}, </if>
<if test="age != null">`age` = #{age}, </if>
<if test="birthDay != null">`birth_day` = #{birthDay} </if>
</set>
where id = #{id}
</update> </mapper>
SpringBoot整合Thymeleaf的更多相关文章
- 【Springboot】Springboot整合Thymeleaf模板引擎
Thymeleaf Thymeleaf是跟Velocity.FreeMarker类似的模板引擎,它可以完全替代JSP,相较与其他的模板引擎,它主要有以下几个特点: 1. Thymeleaf在有网络和无 ...
- Springboot整合thymeleaf模板
Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用. Thymeleaf的主要目标在于提供一种可被浏览器正确显示的.格式良好的模板创建方式,因此也可以用作静态建 ...
- 三、SpringBoot整合Thymeleaf视图
目录 3.1 Thymeleaf视图介绍 3.2 创建SpringBoot项目 3.2 配置Thymeleaf 3.3 编写Demo 3.4 小结 3.1 Thymeleaf视图介绍 先看下官网的介绍 ...
- SpringBoot 整合 Thymeleaf & 如何使用后台模板快速搭建项目
如果你和我一样,是一名 Java 道路上的编程男孩,其实我不太建议你花时间学 Thymeleaf,当然他的思想还是值得借鉴的.但是他的本质在我看来就是 Jsp 技术的翻版(Jsp 现在用的真的很少很少 ...
- SpringBoot 整合thymeleaf
1.Thymeleaf介绍(官网推荐:https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html) Thymeleaf是跟Veloc ...
- springboot整合thymeleaf+tiles示例
网上关于此框架的配置实在不多,因此想记录下来以防忘记 因为公司框架基于上述(公司采用gradle构建项目,楼主采用的是maven),所以楼主能少走些弯路: 1.创建springboot-maven项目 ...
- SpringBoot:2.SpringBoot整合Thymeleaf模板引擎渲染web视图
在Web开发过程中,Spring Boot可以通过@RestController来返回json数据,那如何渲染Web页面?Spring Boot提供了多种默认渲染html的模板引擎,主要有以下几种: ...
- springboot整合Thymeleaf模板引擎
引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖. <dependency> <groupId>org.springframework.boot</ ...
- SpringBoot学习9:springboot整合thymeleaf
1.创建maven项目,添加项目所需依赖 <!--springboot项目依赖的父项目--> <parent> <groupId>org.springframewo ...
随机推荐
- 玲珑OJ1088【蜜汁尺取】
前言(膜法): 早上10点多开始膜的,然后到中午交了一发,感觉膜法不对啊!然后就兴起小窗了一发管理员,然后管理员给我发了in,out数据...可是太大并没有什么可取性... 还是自己试,然后发现自己搞 ...
- POJ1699【AC自动机+状压DP_感言】
萌新感言: 我的天呐! 因为是AC自动机的专题所以没有管别的...硬着头皮吃那份题解(代码)..[请戳简单美丽可爱的代码(没开玩笑)] 首先讲AC自动机: tag存的是以这个节点为后缀的字符串个数(已 ...
- lightoj 1125【背包·从n个选m个】
题意: 给你 n 个背包,然后给你两个数,D,M,问你从n个里面挑M个出来,有多少种方法能够整除D: 思路: 试想我先不挑M个出来的话,仅仅是构造一个D的倍数,其实就是构造一个数的话, 其实就是个递推 ...
- UnityEngine中Animator相关类的说明
---------------------------------------------------------------------- Animator 这个单独写,比较多 AnimationC ...
- 初识DetNet:确定性网络的前世今生
在刚刚落幕的2019中国 SDN/NFV/AI大会上,确定性网络(Deterministic Networking)成为了大家讨论的热点话题之一.随着工业物联网(IIoT)的兴起和工业4.0的提出,T ...
- shell学习(6)- curl
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具. 语法 cur ...
- shell学习(5)- sort
Linux sort命令用于将文本文件内容加以排序. sort可针对文本文件的内容,以行为单位来排序. 参数如下: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排 ...
- c/c++学习系列之内存对齐
1.C++内存对齐规则 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数).程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你 ...
- (转)Unity3D中常用的数据结构总结与分析
http://www.cnblogs.com/murongxiaopifu/p/4161648.html#array 1.几种常见的数据结构 常碰到的几种数据结构:Array,ArrayList, ...
- postman中添加cookie信息
日常测试中有部分接口请求需要有登录信息,否则调用报错,那如何在postman中添加用户的cookie呢,主要分2个步骤: 第一步: Charles抓包获取Headers信息,拷贝Headers中的Co ...