美文网首页
Spring Boot学习day89:Thymeleaf和Spr

Spring Boot学习day89:Thymeleaf和Spr

作者: 开源oo柒 | 来源:发表于2019-11-22 20:33 被阅读0次

一、Thymeleaf语法详解

1.变量输出和字符串操作:

  • th:text

在页面中输出值。

    <span th:text="hello"></span>
    <span th:text="${msg}"></span>
  • th:value

可以将一个值放入到 input 标签的 value 中。

    <input type="text" name="username" th:value="${msg}" />

2.Thymeleaf的内置对象:

Thymeleaf中有许多内置对象,可以在模板中实现各种功能。
语法:
(1)调用内置对象一定要用#;
(2)大部分的内置对象都以 s 结尾 strings、numbers、dates;

  • strings :
    (1)判断字符串是否为空,如果为空返回 true,否则返回 false;
${#strings.isEmpty(key)}

(2)判断字符串是否包含指定的子串,如果包含返回 true,否则返回 false

${#strings.contains(msg,'T')} 

(3)判断当前字符串是否以子串开头,如果是返回 true,否则返回 false

${#strings.startsWith(msg,'a')}

(4)判断当前字符串是否以子串结尾,如果是返回 true,否则返回 false

${#strings.endsWith(msg,'a')} 

(5)返回字符串的长度

${#strings.length(msg)}

(6)查找子串的位置,并返回该子串的下标,如果没找到则返回-1

${#strings.indexOf(msg,'h')}

(7)截取子串,用户与 jdkString 类下 SubString 方法相同

${#strings.substring(msg,13)} 
${#strings.substring(msg,13,15)} 

(8)字符串转大小写。

${#strings.toUpperCase(msg)}
${#strings.toLowerCase(msg)}
  • dates日期格式化:
    (1)格式化日期,默认的以浏览器默认语言为格式化标准
${#dates.format(key)}

(2)按照自定义的格式做日期转换

${#dates.format(key,'yyy/MM/dd')}

(3)取年、月、日:

${#dates.year(key)} 
${#dates.month(key)} 
${#dates.day(key)}
  • 测试:
<body>
    <span th:text="hello"></span>
    <span th:text="${msg}"></span>
    <hr />
    <input type="text" name="username" th:value="${msg}" />
    <hr />
    <span style="color: red">判断字符串是否为空:</span>
    <span th:text="${#strings.isEmpty(msg)}"></span>
    <hr />
    <span style="color: red">判断字符串是否包含指定的子串:</span>
    <span th:text="${#strings.contains(msg,'T')}"></span>
    <hr />
    <span style="color: red">判断当前字符串是否以子串开头:</span>
    <span th:text="${#strings.startsWith(msg,'a')}"></span>
    <br />
    <span style="color: red">判断当前字符串是否以子串结尾:</span>
    <span th:text="${#strings.endsWith(msg,'a')}"></span>
    <hr />
    <span style="color: red">返回字符串的长度:</span>
    <span th:text="${#strings.length(msg)}"></span>
    <hr />
    <span style="color: red">查找子串的位置,并返回该子串的下标:</span>
    <span th:text="${#strings.indexOf(msg,'a')}"></span>
    <hr />
    <span style="color: red">截取子串:</span>
    <span th:text="${#strings.substring(msg,7)}"></span>
    <span th:text="${#strings.substring(msg,7,9)}"></span>
    <hr />
    <span style="color: red">字符串转大小写:</span>
    <br />
    <span th:text="${#strings.toUpperCase(msg)}"></span>
    <br />
    <span th:text="${#strings.toLowerCase(msg)}"></span>
    <hr />
    <span style="color: red">格式化日期:</span>
    <span th:text="${#dates.format(key)}"></span>
    <hr />
    <span style="color: red">按照自定义的格式做日期转换:</span>
    <span th:text="${#dates.format(key,'yyyy/mm/dd')}"></span>
    <hr />
    <span style="color: red">取年,月,日</span>
    <span th:text="${#dates.year(key)}"></span>
    <span th:text="${#dates.month(key)}"></span>
    <span th:text="${#dates.day(key)}"></span>
</body>
示例

3.条件判断

  • th:if
<span th:if="${sex} == ' 男 '"> 性别:男 </span> 
<span th:if="${sex} == ' 女 '"> 性别:女 </span>
  • th:switch
<div th:switch="${id}"> 
<span th:case="1">ID 为 1</span> 
<span th:case="2">ID 为 2</span>
<span th:case="3">ID 为 3</span> 
</div>

4.迭代遍历:

  • th:each
    <table border="1px" align="center">
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>
        <tr th:each="u:${list}">
            <td th:text="${u.userid}"></td>
            <td th:text="${u.username}"></td>
            <td th:text="${u.userage}"></td>
        </tr>
    </table>
</body>
  • 状态变量:

(1)index:当前迭代器的索引 从 0 开始 ;
(2)count:当前迭代对象的计数 从 1 开始;
(3)size:被迭代对象的长度;
(4)even/odd:布尔值,当前循环是否是偶数/奇数 从 0 开始 ;
(5)first:布尔值,当前循环的是否是第一条,如果是返回 true 否则返回 false;
(6)last:布尔值,当前循环的是否是最后一条,如果是则返回 true 否则返回 false;

    <table border="1px" align="center">
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>索引</th>
            <th>计数</th>
            <th>长度</th>
            <th>偶数</th>
            <th>奇数</th>
            <th>第一条</th>
            <th>最后一条</th>
        </tr>


        <tr th:each="u,var:${list}">
            <td th:text="${u.userid}"></td>
            <td th:text="${u.username}"></td>
            <td th:text="${u.userage}"></td>
            <td th:text="${var.index}"></td>
            <td th:text="${var.count}"></td>
            <td th:text="${var.size}"></td>
            <td th:text="${var.even}"></td>
            <td th:text="${var.odd}"></td>
            <td th:text="${var.first}"></td>
            <td th:text="${var.last}"></td>
        </tr>
    </table>
示例
  • th:each迭代Map
    <table border="1px">
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>

        </tr>
        <tr th:each="map:${map}">
            <td  th:text="${map.value.userid}"></td>
            <td th:text="${map.value.username}"></td>
            <td th:text="${map.value.userage}"></td>
        </tr>
    </table>
示例

5.域对象:

  • HttpServletRequest:
th:text="${#httpServletRequest.getAttribute('req')}"
  • HttpSession:
 th:text="${session.sess}"
  • ServletContext:
th:text="${application.app}"

6.URL表达式:

基本语法:@{}

  • 绝对路径:
 th:href="@{http://www.baidu.com}"
  • 相对路径:
 th:href="@{路径}"
  • 在 url 中实现参数传递
th:href="@{/show(key=vlaue)

二、Spring Boot整合SpringMVC+MyBatis

1.需求:

通过使用 SpringBoot+SpringMVC+MyBatis 整合实现一 个对数据库中的 users 表的 CRUD 的操作。

2.搭建架构:

2.1修改POM文件:
    <properties>
        <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
        <thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version>
    </properties>
    <dependencies>
        <!-- springBoot 的启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency> <!-- web 启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency> <!-- Mybatis 启动器 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency> <!-- mysql 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency> <!-- druid 数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.9</version>
        </dependency>
    </dependencies>
2.2添加 application.properties 全局配置文件:
#配置数据源
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm
spring.datasource.username=root
spring.datasource.password=root
#配置数据库连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#配置MyBatis的包别名
mybatis.type-aliases-package=com.zlw.entity
2.3数据库:
CREATE TABLE `users` (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) DEFAULT NULL,
  `userage` int(5) DEFAULT NULL,
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
3.3项目结构:
示例

3.实现业务:

3.1创建实体类:
public class Users {
    private Integer userid;
    private String username;
    private Integer userage;
    public Integer getUserid() {
        return userid;
    }
    public void setUserid(Integer userid) {
        this.userid = userid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Integer getUserage() {
        return userage;
    }
    public void setUserage(Integer userage) {
        this.userage = userage;
    }
}
3.2实现业务
  • mapper接口和配置文件:
public interface UserMapper {
    //添加操作
    void insertUser(Users users);

    //查询所有
    List<Users> selectUser();
    
    //查询指定用户
    Users findById(int userid);
    
    //修改操作
    void updateUser(Users users);
    
    //删除操作
    void deleteUser(int userid);
}
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zlw.mapper.UserMapper">
    <insert id="insertUser" parameterType="Users">
        insert into users(username,userage) values(#{username},#{userage})
    </insert>
    <select id="selectUser" resultType="Users">
        select *from users
    </select>
    <select id="findById" resultType="Users">
        select *from users where userid=#{userid}
    </select>
    <update id="updateUser" parameterType="Users">
        update users set username=#{username},userage=#{userage} where userid=#{userid}
    </update>
    <delete id="deleteUser" parameterType="Users">
        delete from users where userid=#{userid}
    </delete>
</mapper>
  • Service业务层:
@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public void addUser(Users users) {
        userMapper.insertUser(users);
    }

    @Override
    public List<Users> findAll() {
        return userMapper.selectUser();
    }

    @Override
    public void updateUser(Users users) {
        userMapper.updateUser(users);
    }

    @Override
    public void deleteUser(int userid) {
        userMapper.deleteUser(userid);
    }

    @Override
    public Users findById(int userid) {
        Users users = userMapper.findById(userid);
        return users;
    }
}
  • Controller:
@Controller
public class ShowPage {
    @RequestMapping("/{page}")
    public String showPage(@PathVariable String page) {
        return page;
    }
}
@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/addUser")
    public String addUser(Users users) {
        userService.addUser(users);
        
        return "redirect:/user/findAll";
    }

    @RequestMapping("/findAll")
    public String findAll(Model model) {
        List<Users> list = userService.findAll();
        model.addAttribute("list", list);
        return "list";
    }

    @RequestMapping("/update")
    public String update(Users users) {
        System.out.println(users.getUsername());
        System.out.println(users.getUserage());
        userService.updateUser(users);
        return "redirect:/user/findAll";
    }

    @RequestMapping("/delete")
    public String delete(Integer id) {
        userService.deleteUser(id);
        return "redirect:/user/findAll";
    }

    @RequestMapping("findById")
    public String findById(Integer id,Model model) {
        Users user = userService.findById(id);
        model.addAttribute("user",user);
        return "update";
    }
}
  • 编写页面:
    (1)添加页面:
<body>
    <form th:action="@{/user/addUser}" method="post">
        <p>
            用户名:<input type="text" name="username" />
        </p>
        <p>
            年龄<input type="text" name="userage" />
        </p>
        <p>
            <input type="submit" name="" value="添加" />
        </p>
    </form>
</body>

(2)数据展示:

<body>
<table border="1px" align="center" width="600px">
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>操作</th>
    </tr>
    <tr th:each="user:${list}">
        <td th:text="${user.userid}"></td>
        <td th:text="${user.username}"></td>
        <td th:text="${user.userage}"></td>
        <td>
            <a th:href="@{/user/findById(id=${user.userid})}">修改</a>
            <a th:href="@{/user/delete(id=${user.userid})}">删除</a>
        </td>
    </tr>
</table>
</body>

(3)修改用户:

<body>
    <form th:action="@{/user/update}" method="post">
        <p>
            <input type="hidden" name="userid" th:value="${user.userid}" />
        </p>
        <p>
            用户名:<input type="text" name="username" th:value="${user.username}" />
        </p>
        <p>
            年龄<input type="text" name="userage" th:value="${user.userage}" />
        </p>
        <p>
            <input type="submit" value="修改" />
        </p>
    </form>
</body>
  • 实现效果:


    数据展示
    添加页面
    修改

相关文章

网友评论

      本文标题:Spring Boot学习day89:Thymeleaf和Spr

      本文链接:https://www.haomeiwen.com/subject/htnqwctx.html