一个整合Thymeleaf与Mybatis的CRUD例子

整合Mybatis例子

一、添加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的更多相关文章

  1. 【Springboot】Springboot整合Thymeleaf模板引擎

    Thymeleaf Thymeleaf是跟Velocity.FreeMarker类似的模板引擎,它可以完全替代JSP,相较与其他的模板引擎,它主要有以下几个特点: 1. Thymeleaf在有网络和无 ...

  2. Springboot整合thymeleaf模板

    Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用. Thymeleaf的主要目标在于提供一种可被浏览器正确显示的.格式良好的模板创建方式,因此也可以用作静态建 ...

  3. 三、SpringBoot整合Thymeleaf视图

    目录 3.1 Thymeleaf视图介绍 3.2 创建SpringBoot项目 3.2 配置Thymeleaf 3.3 编写Demo 3.4 小结 3.1 Thymeleaf视图介绍 先看下官网的介绍 ...

  4. SpringBoot 整合 Thymeleaf & 如何使用后台模板快速搭建项目

    如果你和我一样,是一名 Java 道路上的编程男孩,其实我不太建议你花时间学 Thymeleaf,当然他的思想还是值得借鉴的.但是他的本质在我看来就是 Jsp 技术的翻版(Jsp 现在用的真的很少很少 ...

  5. SpringBoot 整合thymeleaf

    1.Thymeleaf介绍(官网推荐:https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html) Thymeleaf是跟Veloc ...

  6. springboot整合thymeleaf+tiles示例

    网上关于此框架的配置实在不多,因此想记录下来以防忘记 因为公司框架基于上述(公司采用gradle构建项目,楼主采用的是maven),所以楼主能少走些弯路: 1.创建springboot-maven项目 ...

  7. SpringBoot:2.SpringBoot整合Thymeleaf模板引擎渲染web视图

    在Web开发过程中,Spring Boot可以通过@RestController来返回json数据,那如何渲染Web页面?Spring Boot提供了多种默认渲染html的模板引擎,主要有以下几种: ...

  8. springboot整合Thymeleaf模板引擎

    引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖. <dependency> <groupId>org.springframework.boot</ ...

  9. SpringBoot学习9:springboot整合thymeleaf

    1.创建maven项目,添加项目所需依赖 <!--springboot项目依赖的父项目--> <parent> <groupId>org.springframewo ...

随机推荐

  1. 小白使用Web Deploy在vs2015中发布到iis遇到的问题及操作流程

    整体流程详细参照:http://www.cnblogs.com/potential/p/3751426.html 问题1.未能连接到远程计算机,请确保在远程计算机上安装了 Web Deploy 并启动 ...

  2. 如何将基于对话框的MFC工程改成基于BCG的

    1.stdafx.h 加入如下内容.BCGCBProInc.h间接导入了lib. 2.应用程序类的父类由CWinApp改成CBCGPWinApp.构造函数增加如下代码: 3.对话框的父类有CDialo ...

  3. Nginx 405 not allowed最简单快速解决办法

    Apache.IIS.Nginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误. server { list ...

  4. STP-4-每VLAN生成树和Trunk上的STP

    如果在有冗余链路且有多个VLAN的交换网络中只使用 STP实例,那么在稳定状态中,仍会有一些端口处于阻塞状态不被使用,冗余链路实际上变成了备份链路. PVST+特性能为每个VLAN创建一个STP实例. ...

  5. 洛谷 P1578 奶牛浴场

    https://www.luogu.org/problemnew/show/P1578 题解 另外这题有一些小坑,洛谷的题解里面有讲 #pragma GCC optimize("Ofast& ...

  6. Single-use Stones Codeforces - 965D

    https://codeforces.com/contest/965/problem/D 太神仙了...比E难啊.. 首先呢,根据题意,可以很容易的建出一个最大流模型 就是每个位置建一条边,容量限制为 ...

  7. 082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II

    给定一个有序的链表,删除所有有重复数字的节点,只保留原始列表中唯一的数字.例如:给定 1->2->3->3->4->4->5 ,则返回 1->2->5给 ...

  8. php __autoload函数 加载类文件

    面向对象的开发时,大家肯定都会遇到这样的问题,就是加载文件,一般都是加文件的头部inclue_once,require一大堆,看着很让人烦.当然你可以自己写程序来加载.php5以后引入了__autol ...

  9. 安卓,IOS真机调试

    移动端前端开发真机调试攻略 有线调试: 一.IOS 移动端 (Safari开发者工具) 手机端:设置 → Safari → 高级 → Web 检查器 → 开. mac端:Safari → 偏好设置 → ...

  10. 前端之CSS列表及背景类属性

    一.列表类属性: 1.列表符号样式: list-style-type:disc(实心圆)|circle(空心圆)|square(实心方块)|decimal(数字)|none(去掉列表符号样式); 2. ...