天天看点

SpringBoot-补充1 thymeleaf中的onclick2 添加拦截器3 thymeleaf实现引用4 js中获取上下文5 分页查询6 mybatis-plus

1 thymeleaf中的onclick

如果需要使用th:onclick,这个时候我们需要把代码用||包裹起来,之后在||里面就可以添加表达式了如${},或者@{}。

1.1 获取地址参数、number或者boolean类型参数

th:οnclick="|xadmin.open('用户编辑','@{/user/edit(id=${item.id})}',650,650)|">
           

1.2 获取其他类型参数

thymeleaf为了防止js脚本注入,对于非number、bool类型的参数是不信任的,这里如果我们希望加载这类型的参数可以通过data-*来设置和获取

<!--
    data-* : 作用是为了设置标签上自定参数
	this触发点击事件的dom对象,this.getAttribute("data-title")
-->
<button id="addBtn" th:data-title="${title}" data-id="主键" class="layui-btn"
    th:onclick="|xadmin.open(this.dataset.title,'@{/user/add}',600,400)|"><i
	class="layui-icon"></i>添加
</button>
           

1.3 data-*

每个html标签上可以通过data-*设置标签自定义参数,如果我们希望给标签添加一个title指定参数,可以data-title=""进行设置

获取data-参数:

  1. dom对象 .dataset.参数名
  2. dom对象.getAttrbute(“data-参数名”)
  3. jquery对象.data(“参数名”)

2 添加拦截器

2.1 编写拦截器类

/**
 * @author cyrus
 */
public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // hanlder就是Controller和对应method
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        // true代表如果没有session就会创建一个session,false没有session就会返回null
        HttpSession session = request.getSession(true);
        User user = (User) session.getAttribute(CommonConstants.LOGIN_USER_SESSION_KEY);
        if (user == null) {
            // 代表没有登录
            response.sendRedirect(request.getContextPath() + "/login");
            // 终止后续请求
            return false;
        }
        return super.preHandle(request, response, handler);
    }
}
           

2.2 注册拦截器

@Configuration
public class WebAppConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册自己的拦截器并设置拦截的请求路径
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login");
    }
}
           

3 thymeleaf实现引用

3.1 定义待引用的模块

th:fragment="header"

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>包含</title>
</head>
<body>
    <div th:fragment="header">
        <div>头部</div>
    </div>
</body>
</html>
           

3.2 引用

<div th:replace="include::header"></div>
<div th:include="include::header"></div>
           

3.3 replace和include的区别

<span th:fragment="content">
    一行代码
</span>
           

replace

<div th:replace="include/include::content">
	13123
</div>
           

会用span标签替换掉当前的标签,最终渲染出来内容如下

<span>
    一行代码
</span>
           

include

<div th:include="include/include::content">
	13123
</div>
           

会把对应标签里面的内容,放在当前标签的内容里面,最终渲染出来

<div>
	一行代码
</div>
           

3.4 th:block

th:block是模板引擎提供的一个标签,这个标签本身没有任何含义,只是为了让我们写命令。最终渲染的时候会被删除掉

4 js中获取上下文

var ctx = [[${#httpServletRequest.getContextPath()}]];
/*<![CDATA[*/
	var ctx = /*[[@{/}]]*/ '';
/*]]>*/
           

5 分页查询

5.1 引入依赖

<!--pagehelper-->
<dependency>
	<groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>1.2.5</version>
</dependency>
           

5.2 添加配置文件

# 分页配置
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql
           

5.3 使用

@Test
    public void testList() throws IOException {
        SqlSession session = MybatisUtils.openSession();
        User condition = new User();
        // 插件里提供的分页工具,在要查询之前,执行一下PageHelper.startPage(当前页数,每页的容量), 当使用工具时候,会导致懒加载失败
        // 加了这个操作,插件就会在sql语句中拼接limit限制,并且还会统计总个数
        PageHelper.startPage(1,5);
        List<User> users = session.getMapper(IUserMapper.class).list(condition);
        // 拿到结果之后通过PageInfo.of() 的方法,获得pageInfo
        com.github.pagehelper.PageInfo<User> list = com.github.pagehelper.PageInfo.of(users);
        System.out.println(users);
    }
           

6 mybatis-plus

相关介绍可查看官方文档

6.1 引入依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.4.2</version>
</dependency>
           

6.2 集成BaseMapper

@Mapper
public interface UserDao extends BaseMapper<User> {
    List<User> list();

    List<JSONObject> countSex();

    User login(@Param("username") String username, @Param("password") String password);
}
           

6.3 配置mybatis-plus别名

mybatis-plus:
  type-aliases-package: com.tledu.springbootmybatis.domain
           

6.4 配置实体类

@Data
@TableName("t_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String username;
    private String password;
    private String sex;
}
           

6.5 使用mybatis-plus

@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisPlusTest {
    @Autowired
    private UserDao userDao;

    @Test
    public void save() {
        /**
         * 1. 别名不能用了
         * 2. 插入操作的时候,mybatis plus会生成一个唯一id,这个类型和表的类型不一致
         * 3. 查询操作的时候,生成的查询语句的表名是按照user生成的,并不是t_user
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("username", "admin");
        queryWrapper.lambda().eq(User::getPassword, "root");
        queryWrapper.select("username");
        List<User> list = userDao.selectList(queryWrapper);
        System.out.println(list);
    }
}