构建后台管理系统
https://www.yuque.com/docs/share/e426e9d5-4d64-4962-a4f9-9af6f06480f6?# 《SpringBoot》
链接有效期至 2022-05-20 14:28:05
1、项目创建
thymeleaf、web-starter、devtools、lombok
2、静态资源处理
自动配置好,我们只需要把所有静态资源放到 static 文件夹下
3、路径构建
th:action=“@{/login}”
4、模板抽取
th:insert/replace/include
5、登陆的页面跳转
@PostMapping("/login")
public String main(User user, HttpSession session, Model model){
if(StringUtils.hasLength(user.getUserName()) && "123456".equals(user.getPassword())){
//把登陆成功的用户保存起来
session.setAttribute("loginUser",user);
//登录成功重定向到main.html; 重定向防止表单重复提交
return "redirect:/main.html";
}else {
model.addAttribute("msg","账号密码错误");
//回到登录页面
return "login";
}
}
6、登录之后的拦截器
配置拦截器步骤:
● 1、编写一个拦截器 实现HandlerInterceptor 接口
● 2、拦截器注册到容器中 (实现WebMvcConfigurer 的 addInterceptor方法)
● 3、指定拦截器规则【如果拦截所有,静态资源也会被拦截】
1、LoginHandlerInterceptor
package com.baidu.admin.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 1、配置好拦截器要拦截什么请求
* 2、把这些配置放在容器中
*/
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
//目标方法执行前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//判断用户是否登录,session
HttpSession session = request.getSession();
Object loginUser = session.getAttribute("loginUser");
//有用户名,放行
if (loginUser != null){
return true;
}
//拦截
// session.setAttribute("msg","请先登录");
// response.sendRedirect("/");
request.setAttribute("msg","请先登录");
request.getRequestDispatcher("/").forward(request,response);
return false;
}
//目标方法执行完成后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
//页面渲染之后
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
2、注册到容器中
3、指定拦截规则
package com.baidu.admin.config;
import com.baidu.admin.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 1、编写一个拦截器 实现HandlerInterceptor 接口
* 2、拦截器注册到容器中 (实现WebMvcConfigurer 的 addInterceptor方法)
* 3、指定拦截器规则【如果拦截所有,静态资源也会被拦截】
*/
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**") //拦截所有的请求,静态资源所有请求也会被拦截。
.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**"); //放行请求
}
}
遍历数据,并返回前端
1、这里使用的使用的时自己重建的数据,也可以从数据库中查询。
// 查询到数据库的全部数据。
List<User> list = userService.list();
System.out.println("查询全部的数据==》"+list);
@GetMapping("/dynamic_table")
public String dynamic_table(Model model){
//表格内容的遍历
List<User> users = Arrays.asList(new User("zhangsan", "123456"),
new User("lisi", "123444"),
new User("haha", "aaaaa"),
new User("hehe ", "aaddd"));
model.addAttribute("users",users);
return "table/dynamic_table";
}
2、前端页面,解析数据
<div class="panel-body">
<div class="adv-table">
<table class="display table table-bordered" id="hidden-table-info">
<thead>
<tr>
<th>#</th>
<th>用户名</th>
<th>密码</th>
</tr>
</thead>
<tbody>
<tr class="gradeX" th:each="user,stats:${users}">
<td th:text="${stats.count}"></td>
<td th:text="${user.userName}"></td>
<td th:text="${user.password}"></td>
</tr>
</tbody>
</table>
</div>
</div>
分页操作
Springboot实现分页操作;
1、加入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
2、Mybatis-Plus工具类
@Configuration
public class MyBatisPageConfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
//这是分页拦截器
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setOverflow(true);
paginationInnerInterceptor.setMaxLimit(500L);
mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
return mybatisPlusInterceptor;
}
}
3、测试
mapper
UserMapper
package com.baidu.admin.mapper;
import com.baidu.admin.bean.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
这里用到userService;需要创建UserService接口和实现类
注意:由于是mybatis-plus需要继承 IService
package com.baidu.admin.service;
import com.baidu.admin.bean.User;
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
}
UserServiceImpl
package com.baidu.admin.service.impl;
import com.baidu.admin.bean.User;
import com.baidu