一 效果如下,不同用户登陆看到的菜单不同。本文是在bootstrap布局(二)的基础上增加的功能。
管理员用户id是4, 地址栏输入:localhost:8090/sysmenu/4
普通用户id是6,地址栏输入:localhost:8090/sysmenu/6
平台搭建如下:
二 数据库设计
1. t_menu设计如下:
2.t_role_menu设计如下:
3.t_role_user设计如下:
4.t_user设计如下:
三 html 代码
1.mainPage.html 主框架页面,「核心功能」:单击左侧菜单,右侧显示相应的页面,并激活左侧菜单。
Dashboard Template for Bootstrap
欢迎使用Web系统
2.firstPage.html 登陆进去后的第一个页面
Title
欢迎来到首页
四 java代码
1.mainController.java
@Controller
public class MainController {
@Autowired
MenuService menuService;
@Autowired
UserMapper userMapper;
@GetMapping("/sysmenu/{userId}")
public String sysmenu(Model model, HttpSession session, @PathVariable("userId") Integer userId){
User user=userMapper.getUserById(userId);
List
2.UserController.java 和RoleController.java,MenuController.java类似,本处只举例User说明。
@Controller
public class UserController {
@Autowired
UserMapper userMapper;
/**
* 跳转到用户列表页面
*
* @param model 用户设值返回页面
* @return
*/
@GetMapping("users")
public String getAllUsers(Model model)
{
List userList=userMapper.getALLUsers();
model.addAttribute("userList", userList);
/** 往前端 Thymeleaf 模板引擎时,开头不要加 "/" ,因为它默认配置的前缀就是:
* spring.thymeleaf.prefix=classpath:/templates/
*/
System.out.println("findAllUsers");
return "user/userList";
}
\\.....其他代码未粘贴,可参考之前的增删改查
}
3.UserMapper.java和RoleMapper.java类似,本处只举例说明。
@Mapper
public interface UserMapper {
@Select("select * from t_user where id = #{id}")
public User getUserById(Integer id);
@Options(useGeneratedKeys = true,keyProperty = "id") //加入自增主键
@Insert("insert into t_user(username,password,employeeNum,departmentId) values(#{username},#{password},#{employeeNum},#{departmentId})")
public int insertUser(User user);
@Delete("delete from t_user where id=#{id}")
public int deleteById(Integer id);
@Update("update t_user set username=#{username},password=#{password} where id=#{id}")
public int updateUser(User user);
@Select("select * from t_user")
public List getALLUsers();
@Select("select u.*,r.rolename from t_user u left join t_role_user ru on u.id=ru.user_id left join t_role r on ru.role_id=r.id where username=#{username}")
public List findByUserName(String username);
}
4.MenuMapper.java,本例重点使用
@Mapper
public interface MenuMapper {
@Select("select t_menu.* from t_role_menu, t_menu,t_role_user where t_role_menu.menu_Id = t_menu.id and t_role_user.role_Id=t_role_menu.role_Id and t_role_user.user_Id=#{userId}")
public List
5.MenuService.java 为了简化,本例只有menu创建了serivce
@Service
public class MenuService {
@Autowired
MenuMapper menuMapper;
public List getMenusByHrId(Integer userId){
return menuMapper.listMenuByUserId(userId);
}
public List getAllMenus(){return menuMapper.getAllMenus();}
}
5.User.java
public class User {
private Integer id;
private String username;
private String password;
private String employeeNum;
private Integer departmentId;
//get,set函数省略
}
五.数据库配置,本例数据库名称是 mybatis
spring:
datasource:
username: root
password: 12345678
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
server:
port: 8090
mybatis:
configuration:
#开启驼峰命名转换
map-underscore-to-camel-case: true
六 重点
1. 菜单加载,loadPage的参数写法[[${firstMenu.href}]],另外不能给href设置真实地址。
2. 菜单激活
$(document).ready(function () {
$('#menulist> a').click(function (e) {
$('#menulist> a').removeClass('active');
$(this).addClass('active');
});
});