美文网首页
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