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>