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-参数:
- dom对象 .dataset.参数名
- dom对象.getAttrbute(“data-参数名”)
- 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是模板引擎提供的一个标签,这个标签本身没有任何含义,只是为了让我们写命令。最终渲染的时候会被删除掉
<th:block th:include="include/include::header" />
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);
}
}