学于黑马程序员和传智播客联合做的教学项目 感谢

黑马程序员官网

传智播客官网

个人根据教程的每天的工作进度的代码和资料 密码:cti5

b站在线视频

微信搜索"艺术行者",关注并回复关键词"企业权限管理"获取视频和教程资料!

第四天

数据库准备

数据库准备

insert into permission(permissionname, url) values ('user findById', '/users/findById.do');
insert into permission(permissionname, url) values ('user findAll', '/users/findAll.do');
insert into role_permission values ('1BBAA2A1C19E4D26A49F5F78543802F8', '2222');
insert into role_permission values ('1BBAA2A1C19E4D26A49F5F78543802F8', '1111');
insert into role_permission values ('558DF6F59855436FBC3CAA68D656B738', '1111');

实现角色查询功能

  • 导入role-list.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <!-- 页面meta -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>数据 - AdminLTE2定制版</title>
    <meta name="description" content="AdminLTE2定制版">
    <meta name="keywords" content="AdminLTE2定制版"> <!-- Tell the browser to be responsive to screen width -->
    <meta
    content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
    name="viewport"> <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/ionicons/css/ionicons.min.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/iCheck/square/blue.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/morris/morris.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/datepicker/datepicker3.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.theme.default.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/select2/select2.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/adminLTE/css/AdminLTE.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/adminLTE/css/skins/_all-skins.min.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/css/style.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.skinNice.css">
    <link rel="stylesheet"
    href="${pageContext.request.contextPath}/plugins/bootstrap-slider/slider.css">
    </head> <body class="hold-transition skin-blue sidebar-mini"> <div class="wrapper"> <!-- 页面头部 -->
    <jsp:include page="header.jsp"></jsp:include>
    <!-- 页面头部 /--> <!-- 导航侧栏 -->
    <jsp:include page="aside.jsp"></jsp:include>
    <!-- 导航侧栏 /--> <!-- 内容区域 -->
    <div class="content-wrapper"> <!-- 内容头部 -->
    <section class="content-header">
    <h1>
    角色管理 <small>全部角色</small>
    </h1>
    <ol class="breadcrumb">
    <li><a href="${pageContext.request.contextPath}/index.jsp"><i
    class="fa fa-dashboard"></i> 首页</a></li>
    <li><a
    href="${pageContext.request.contextPath}/role/findAll.do">角色管理</a></li> <li class="active">全部角色</li>
    </ol>
    </section>
    <!-- 内容头部 /--> <!-- 正文区域 -->
    <section class="content"> <!-- .box-body -->
    <div class="box box-primary">
    <div class="box-header with-border">
    <h3 class="box-title">列表</h3>
    </div> <div class="box-body"> <!-- 数据表格 -->
    <div class="table-box"> <!--工具栏-->
    <div class="pull-left">
    <div class="form-group form-inline">
    <div class="btn-group">
    <button type="button" class="btn btn-default" title="新建" onclick="location.href='${pageContext.request.contextPath}/pages/role-add.jsp'">
    <i class="fa fa-file-o"></i> 新建
    </button> <button type="button" class="btn btn-default" title="刷新">
    <i class="fa fa-refresh"></i> 刷新
    </button>
    </div>
    </div>
    </div>
    <div class="box-tools pull-right">
    <div class="has-feedback">
    <input type="text" class="form-control input-sm"
    placeholder="搜索"> <span
    class="glyphicon glyphicon-search form-control-feedback"></span>
    </div>
    </div>
    <!--工具栏/--> <!--数据列表-->
    <table id="dataList"
    class="table table-bordered table-striped table-hover dataTable">
    <thead>
    <tr>
    <th class="" style="padding-right: 0px"><input
    id="selall" type="checkbox" class="icheckbox_square-blue">
    </th>
    <th class="sorting_asc">ID</th>
    <th class="sorting_desc">角色名称</th>
    <th class="sorting_asc sorting_asc_disabled">描述</th>
    <th class="text-center">操作</th>
    </tr>
    </thead>
    <tbody> <c:forEach items="${roleList}" var="role">
    <tr>
    <td><input name="ids" type="checkbox"></td>
    <td>${role.id }</td>
    <td>${role.roleName }</td>
    <td>${role.roleDesc }</td>
    <td class="text-center">
    <a href="${pageContext.request.contextPath}/role/findById.do?id=${role.id}" class="btn bg-olive btn-xs">详情</a>
    <a href="${pageContext.request.contextPath}/user/findUserByIdAndAllRole.do?id=${user.id}" class="btn bg-olive btn-xs">添加角色</a>
    </td>
    </tr>
    </c:forEach>
    </tbody>
    <!--
    <tfoot>
    <tr>
    <th>Rendering engine</th>
    <th>Browser</th>
    <th>Platform(s)</th>
    <th>Engine version</th>
    <th>CSS grade</th>
    </tr>
    </tfoot>-->
    </table>
    <!--数据列表/--> </div>
    <!-- 数据表格 /--> </div>
    <!-- /.box-body --> <!-- .box-footer-->
    <div class="box-footer">
    <div class="pull-left">
    <div class="form-group form-inline">
    总共2 页,共14 条数据。 每页 <select class="form-control">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    </select> 条
    </div>
    </div> <div class="box-tools pull-right">
    <ul class="pagination">
    <li><a href="#" aria-label="Previous">首页</a></li>
    <li><a href="#">上一页</a></li>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li><a href="#">下一页</a></li>
    <li><a href="#" aria-label="Next">尾页</a></li>
    </ul>
    </div> </div>
    <!-- /.box-footer--> </div> </section>
    <!-- 正文区域 /--> </div>
    <!-- @@close -->
    <!-- 内容区域 /--> <!-- 底部导航 -->
    <footer class="main-footer">
    <div class="pull-right hidden-xs">
    <b>Version</b> 1.0.8
    </div>
    <strong>Copyright &copy; 2014-2017 <a
    href="#">项目练习</a>.
    </strong> All rights reserved. </footer>
    <!-- 底部导航 /--> </div> <script src="../plugins/jQuery/jquery-2.2.3.min.js"></script>
    <script src="../plugins/jQueryUI/jquery-ui.min.js"></script>
    <script>
    $.widget.bridge('uibutton', $.ui.button);
    </script>
    <script src="../plugins/bootstrap/js/bootstrap.min.js"></script>
    <script src="../plugins/raphael/raphael-min.js"></script>
    <script src="../plugins/morris/morris.min.js"></script>
    <script src="../plugins/sparkline/jquery.sparkline.min.js"></script>
    <script src="../plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
    <script src="../plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
    <script src="../plugins/knob/jquery.knob.js"></script>
    <script src="../plugins/daterangepicker/moment.min.js"></script>
    <script src="../plugins/daterangepicker/daterangepicker.js"></script>
    <script src="../plugins/daterangepicker/daterangepicker.zh-CN.js"></script>
    <script src="../plugins/datepicker/bootstrap-datepicker.js"></script>
    <script
    src="../plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script>
    <script
    src="../plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"></script>
    <script src="../plugins/slimScroll/jquery.slimscroll.min.js"></script>
    <script src="../plugins/fastclick/fastclick.js"></script>
    <script src="../plugins/iCheck/icheck.min.js"></script>
    <script src="../plugins/adminLTE/js/app.min.js"></script>
    <script src="../plugins/treeTable/jquery.treetable.js"></script>
    <script src="../plugins/select2/select2.full.min.js"></script>
    <script src="../plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
    <script
    src="../plugins/bootstrap-wysihtml5/bootstrap-wysihtml5.zh-CN.js"></script>
    <script src="../plugins/bootstrap-markdown/js/bootstrap-markdown.js"></script>
    <script
    src="../plugins/bootstrap-markdown/locale/bootstrap-markdown.zh.js"></script>
    <script src="../plugins/bootstrap-markdown/js/markdown.js"></script>
    <script src="../plugins/bootstrap-markdown/js/to-markdown.js"></script>
    <script src="../plugins/ckeditor/ckeditor.js"></script>
    <script src="../plugins/input-mask/jquery.inputmask.js"></script>
    <script
    src="../plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
    <script src="../plugins/input-mask/jquery.inputmask.extensions.js"></script>
    <script src="../plugins/datatables/jquery.dataTables.min.js"></script>
    <script src="../plugins/datatables/dataTables.bootstrap.min.js"></script>
    <script src="../plugins/chartjs/Chart.min.js"></script>
    <script src="../plugins/flot/jquery.flot.min.js"></script>
    <script src="../plugins/flot/jquery.flot.resize.min.js"></script>
    <script src="../plugins/flot/jquery.flot.pie.min.js"></script>
    <script src="../plugins/flot/jquery.flot.categories.min.js"></script>
    <script src="../plugins/ionslider/ion.rangeSlider.min.js"></script>
    <script src="../plugins/bootstrap-slider/bootstrap-slider.js"></script>
    <script>
    $(document).ready(function() {
    // 选择框
    $(".select2").select2(); // WYSIHTML5编辑器
    $(".textarea").wysihtml5({
    locale : 'zh-CN'
    });
    }); // 设置激活菜单
    function setSidebarActive(tagUri) {
    var liObj = $("#" + tagUri);
    if (liObj.length > 0) {
    liObj.parent().parent().addClass("active");
    liObj.addClass("active");
    }
    } $(document)
    .ready(
    function() { // 激活导航位置
    setSidebarActive("admin-datalist"); // 列表按钮
    $("#dataList td input[type='checkbox']")
    .iCheck(
    {
    checkboxClass : 'icheckbox_square-blue',
    increaseArea : '20%'
    });
    // 全选操作
    $("#selall")
    .click(
    function() {
    var clicks = $(this).is(
    ':checked');
    if (!clicks) {
    $(
    "#dataList td input[type='checkbox']")
    .iCheck(
    "uncheck");
    } else {
    $(
    "#dataList td input[type='checkbox']")
    .iCheck("check");
    }
    $(this).data("clicks",
    !clicks);
    });
    });
    </script>
    </body> </html>
  • 编写controller模块代码

    • package org.hacker.ssm.controller;
      
      import org.hacker.ssm.domain.Role;
      import org.hacker.ssm.service.IRoleService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.servlet.ModelAndView; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-27 00:28
      */
      @Controller
      @RequestMapping("/role")
      public class RoleController {
      @Autowired
      private IRoleService roleService; @RequestMapping("/findAll.do")
      public ModelAndView findAll() {
      ModelAndView mv = new ModelAndView();
      List<Role> roleList = roleService.findAll();
      mv.addObject("roleList", roleList);
      mv.setViewName("role-list");
      return mv;
      }
      }
  • 编写service模块代码

    • 接口

      package org.hacker.ssm.service;
      
      import org.hacker.ssm.domain.Role;
      
      import java.util.List;
      
      /**
      * @author HackerStar
      * @create 2020-04-27 00:32
      */
      public interface IRoleService {
      public List<Role> findAll();
      }
    • 实现类

      package org.hacker.ssm.service.impl;
      
      import org.hacker.ssm.dao.IRoleDao;
      import org.hacker.ssm.domain.Role;
      import org.hacker.ssm.service.IRoleService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      import org.springframework.transaction.annotation.Transactional; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-27 00:33
      */
      @Service
      @Transactional
      public class RoleServiceImpl implements IRoleService {
      @Autowired
      private IRoleDao roleDao; @Override
      public List<Role> findAll() {
      return roleDao.findAll();
      }
      }
  • 编写dao模块代码

    • package org.hacker.ssm.dao;
      
      import org.apache.ibatis.annotations.Select;
      import org.hacker.ssm.domain.Role; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-24 11:43
      */
      public interface IRoleDao {
      //根据用户id查询出所有对应的角色
      @Select("select * from role where id in (select roleId from users_role where userId=#{userId})")
      public List<Role> findRoleByUserId(String userId) throws Exception; @Select("select * from role")
      List<Role> findAll();
      }
  • 结果

  • 导入role-add.jsp

    • <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <!-- 页面meta -->
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>数据 - AdminLTE2定制版</title>
      <meta name="description" content="AdminLTE2定制版">
      <meta name="keywords" content="AdminLTE2定制版"> <!-- Tell the browser to be responsive to screen width -->
      <meta
      content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
      name="viewport"> <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap/css/bootstrap.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/font-awesome/css/font-awesome.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionicons/css/ionicons.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/iCheck/square/blue.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/morris/morris.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/datepicker/datepicker3.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.theme.default.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/select2/select2.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/adminLTE/css/AdminLTE.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/adminLTE/css/skins/_all-skins.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/css/style.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.skinNice.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-slider/slider.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.css">
      </head> <body class="hold-transition skin-purple sidebar-mini"> <div class="wrapper"> <!-- 页面头部 -->
      <jsp:include page="header.jsp"></jsp:include>
      <!-- 页面头部 /-->
      <!-- 导航侧栏 -->
      <jsp:include page="aside.jsp"></jsp:include>
      <!-- 导航侧栏 /--> <!-- 内容区域 -->
      <div class="content-wrapper"> <!-- 内容头部 -->
      <section class="content-header">
      <h1>
      角色管理 <small>角色表单</small>
      </h1>
      <ol class="breadcrumb">
      <li><a href="${pageContext.request.contextPath}/index.jsp"><i
      class="fa fa-dashboard"></i> 首页</a></li>
      <li><a href="${pageContext.request.contextPath}/role/findAll.do">角色管理</a></li>
      <li class="active">角色表单</li>
      </ol>
      </section>
      <!-- 内容头部 /--> <form action="${pageContext.request.contextPath}/role/save.do"
      method="post">
      <!-- 正文区域 -->
      <section class="content"> <!--产品信息--> <div class="panel panel-default">
      <div class="panel-heading">角色信息</div>
      <div class="row data-type"> <div class="col-md-2 title">角色名称</div>
      <div class="col-md-4 data">
      <input type="text" class="form-control" name="roleName"
      placeholder="角色名称" value="">
      </div>
      <div class="col-md-2 title">角色描述</div>
      <div class="col-md-4 data">
      <input type="text" class="form-control" name="roleDesc"
      placeholder="角色描述" value="">
      </div> </div>
      </div>
      <!--订单信息/--> <!--工具栏-->
      <div class="box-tools text-center">
      <button type="submit" class="btn bg-maroon">保存</button>
      <button type="button" class="btn bg-default"
      onclick="history.back(-1);">返回</button>
      </div>
      <!--工具栏/--> </section>
      <!-- 正文区域 /-->
      </form>
      </div>
      <!-- 内容区域 /--> <!-- 底部导航 -->
      <footer class="main-footer">
      <div class="pull-right hidden-xs">
      <b>Version</b> 1.0.8
      </div>
      <strong>Copyright &copy; 2014-2017 <a
      href="#">项目练习</a>.
      </strong> All rights reserved. </footer>
      <!-- 底部导航 /--> </div> <script
      src="${pageContext.request.contextPath}/plugins/jQuery/jquery-2.2.3.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/jQueryUI/jquery-ui.min.js"></script>
      <script>
      $.widget.bridge('uibutton', $.ui.button);
      </script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap/js/bootstrap.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/raphael/raphael-min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/morris/morris.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/sparkline/jquery.sparkline.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/knob/jquery.knob.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/daterangepicker/moment.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.zh-CN.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/datepicker/bootstrap-datepicker.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/slimScroll/jquery.slimscroll.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/fastclick/fastclick.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/iCheck/icheck.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/adminLTE/js/app.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/select2/select2.full.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap-wysihtml5.zh-CN.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/bootstrap-markdown.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-markdown/locale/bootstrap-markdown.zh.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/markdown.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/to-markdown.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/ckeditor/ckeditor.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.extensions.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/datatables/jquery.dataTables.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/chartjs/Chart.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/flot/jquery.flot.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/flot/jquery.flot.resize.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/flot/jquery.flot.pie.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/flot/jquery.flot.categories.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-slider/bootstrap-slider.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js"></script> <script>
      $(document).ready(function() {
      // 选择框
      $(".select2").select2(); // WYSIHTML5编辑器
      $(".textarea").wysihtml5({
      locale : 'zh-CN'
      });
      }); // 设置激活菜单
      function setSidebarActive(tagUri) {
      var liObj = $("#" + tagUri);
      if (liObj.length > 0) {
      liObj.parent().parent().addClass("active");
      liObj.addClass("active");
      }
      } </script> </body> </html>
  • 编写controller模块代码

    • package org.hacker.ssm.controller;
      
      import org.hacker.ssm.domain.Role;
      import org.hacker.ssm.service.IRoleService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.servlet.ModelAndView; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-27 00:28
      */
      @Controller
      @RequestMapping("/role")
      public class RoleController {
      @Autowired
      private IRoleService roleService; @RequestMapping("/findAll.do")
      public ModelAndView findAll() {
      ModelAndView mv = new ModelAndView();
      List<Role> roleList = roleService.findAll();
      mv.addObject("roleList", roleList);
      mv.setViewName("role-list");
      return mv;
      } @RequestMapping("/save.do")
      public String save(Role role) {
      roleService.save(role);
      return "redirect:findAll.do"; }
      }
  • 编写service模块代码

    • 接口

      • package org.hacker.ssm.service;
        
        import org.hacker.ssm.domain.Role;
        
        import java.util.List;
        
        /**
        * @author HackerStar
        * @create 2020-04-27 00:32
        */
        public interface IRoleService {
        public List<Role> findAll(); void save(Role role);
        }
    • 实现类

      • package org.hacker.ssm.service.impl;
        
        import org.hacker.ssm.dao.IRoleDao;
        import org.hacker.ssm.domain.Role;
        import org.hacker.ssm.service.IRoleService;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.stereotype.Service;
        import org.springframework.transaction.annotation.Transactional; import java.util.List; /**
        * @author HackerStar
        * @create 2020-04-27 00:33
        */
        @Service
        @Transactional
        public class RoleServiceImpl implements IRoleService {
        @Autowired
        private IRoleDao roleDao; @Override
        public List<Role> findAll() {
        return roleDao.findAll();
        } @Override
        public void save(Role role) {
        roleDao.sava(role);
        }
        }
  • 编写dao模块代码

    • package org.hacker.ssm.dao;
      
      import org.apache.ibatis.annotations.Insert;
      import org.apache.ibatis.annotations.Select;
      import org.hacker.ssm.domain.Role; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-24 11:43
      */
      public interface IRoleDao {
      //根据用户id查询出所有对应的角色
      @Select("select * from role where id in (select roleId from users_role where userId=#{userId})")
      public List<Role> findRoleByUserId(String userId) throws Exception; @Select("select * from role")
      List<Role> findAll(); @Insert("insert into role(roleName, roleDesc) values (#{roleName},#{roleDesc})")
      void sava(Role role);
      }
  • 结果

实现资源权限管理

  • 复制role-list.jsp到pages目录下,修改部分代码,成为permisssion-list.jsp

    • <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
      <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <!-- 页面meta -->
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>数据 - AdminLTE2定制版</title>
      <meta name="description" content="AdminLTE2定制版">
      <meta name="keywords" content="AdminLTE2定制版"> <!-- Tell the browser to be responsive to screen width -->
      <meta
      content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
      name="viewport"> <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap/css/bootstrap.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/font-awesome/css/font-awesome.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionicons/css/ionicons.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/iCheck/square/blue.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/morris/morris.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/datepicker/datepicker3.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.theme.default.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/select2/select2.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/adminLTE/css/AdminLTE.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/adminLTE/css/skins/_all-skins.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/css/style.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.skinNice.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-slider/slider.css">
      </head> <body class="hold-transition skin-blue sidebar-mini"> <div class="wrapper"> <!-- 页面头部 -->
      <jsp:include page="header.jsp"></jsp:include>
      <!-- 页面头部 /--> <!-- 导航侧栏 -->
      <jsp:include page="aside.jsp"></jsp:include>
      <!-- 导航侧栏 /--> <!-- 内容区域 -->
      <div class="content-wrapper"> <!-- 内容头部 -->
      <section class="content-header">
      <h1>
      角色管理 <small>全部角色</small>
      </h1>
      <ol class="breadcrumb">
      <li><a href="${pageContext.request.contextPath}/index.jsp"><i
      class="fa fa-dashboard"></i> 首页</a></li>
      <li><a
      href="${pageContext.request.contextPath}/role/findAll.do">角色管理</a></li> <li class="active">全部角色</li>
      </ol>
      </section>
      <!-- 内容头部 /--> <!-- 正文区域 -->
      <section class="content"> <!-- .box-body -->
      <div class="box box-primary">
      <div class="box-header with-border">
      <h3 class="box-title">列表</h3>
      </div> <div class="box-body"> <!-- 数据表格 -->
      <div class="table-box"> <!--工具栏-->
      <div class="pull-left">
      <div class="form-group form-inline">
      <div class="btn-group">
      <button type="button" class="btn btn-default" title="新建" onclick="location.href='${pageContext.request.contextPath}/pages/role-add.jsp'">
      <i class="fa fa-file-o"></i> 新建
      </button> <button type="button" class="btn btn-default" title="刷新">
      <i class="fa fa-refresh"></i> 刷新
      </button>
      </div>
      </div>
      </div>
      <div class="box-tools pull-right">
      <div class="has-feedback">
      <input type="text" class="form-control input-sm"
      placeholder="搜索"> <span
      class="glyphicon glyphicon-search form-control-feedback"></span>
      </div>
      </div>
      <!--工具栏/--> <!--数据列表-->
      <table id="dataList"
      class="table table-bordered table-striped table-hover dataTable">
      <thead>
      <tr>
      <th class="" style="padding-right: 0px"><input
      id="selall" type="checkbox" class="icheckbox_square-blue">
      </th>
      <th class="sorting_asc">ID</th>
      <th class="sorting_desc">权限名称</th>
      <th class="sorting_asc sorting_asc_disabled">url</th>
      <%-- <th class="text-center">操作</th>--%>
      </tr>
      </thead>
      <tbody> <c:forEach items="${permissionList}" var="permission">
      <tr>
      <td><input name="ids" type="checkbox"></td>
      <td>${permission.id }</td>
      <td>${permission.permissionName }</td>
      <td>${permission.url }</td>
      <%-- <td class="text-center">--%>
      <%-- <a href="${pageContext.request.contextPath}/permission/findById.do?id=${role.id}" class="btn bg-olive btn-xs">详情</a>--%>
      <%-- <a href="${pageContext.request.contextPath}/permission/findUserByIdAndAllRole.do?id=${user.id}" class="btn bg-olive btn-xs">添加角色</a>--%>
      <%-- </td>--%>
      </tr>
      </c:forEach>
      </tbody>
      <!--
      <tfoot>
      <tr>
      <th>Rendering engine</th>
      <th>Browser</th>
      <th>Platform(s)</th>
      <th>Engine version</th>
      <th>CSS grade</th>
      </tr>
      </tfoot>-->
      </table>
      <!--数据列表/--> </div>
      <!-- 数据表格 /--> </div>
      <!-- /.box-body --> <!-- .box-footer-->
      <div class="box-footer">
      <div class="pull-left">
      <div class="form-group form-inline">
      总共2 页,共14 条数据。 每页 <select class="form-control">
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
      <option>5</option>
      </select> 条
      </div>
      </div> <div class="box-tools pull-right">
      <ul class="pagination">
      <li><a href="#" aria-label="Previous">首页</a></li>
      <li><a href="#">上一页</a></li>
      <li><a href="#">1</a></li>
      <li><a href="#">2</a></li>
      <li><a href="#">3</a></li>
      <li><a href="#">4</a></li>
      <li><a href="#">5</a></li>
      <li><a href="#">下一页</a></li>
      <li><a href="#" aria-label="Next">尾页</a></li>
      </ul>
      </div> </div>
      <!-- /.box-footer--> </div> </section>
      <!-- 正文区域 /--> </div>
      <!-- @@close -->
      <!-- 内容区域 /--> <!-- 底部导航 -->
      <footer class="main-footer">
      <div class="pull-right hidden-xs">
      <b>Version</b> 1.0.8
      </div>
      <strong>Copyright &copy; 2014-2017 <a
      href="#">项目练习</a>.
      </strong> All rights reserved. </footer>
      <!-- 底部导航 /--> </div> <script src="../plugins/jQuery/jquery-2.2.3.min.js"></script>
      <script src="../plugins/jQueryUI/jquery-ui.min.js"></script>
      <script>
      $.widget.bridge('uibutton', $.ui.button);
      </script>
      <script src="../plugins/bootstrap/js/bootstrap.min.js"></script>
      <script src="../plugins/raphael/raphael-min.js"></script>
      <script src="../plugins/morris/morris.min.js"></script>
      <script src="../plugins/sparkline/jquery.sparkline.min.js"></script>
      <script src="../plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
      <script src="../plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
      <script src="../plugins/knob/jquery.knob.js"></script>
      <script src="../plugins/daterangepicker/moment.min.js"></script>
      <script src="../plugins/daterangepicker/daterangepicker.js"></script>
      <script src="../plugins/daterangepicker/daterangepicker.zh-CN.js"></script>
      <script src="../plugins/datepicker/bootstrap-datepicker.js"></script>
      <script
      src="../plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script>
      <script
      src="../plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"></script>
      <script src="../plugins/slimScroll/jquery.slimscroll.min.js"></script>
      <script src="../plugins/fastclick/fastclick.js"></script>
      <script src="../plugins/iCheck/icheck.min.js"></script>
      <script src="../plugins/adminLTE/js/app.min.js"></script>
      <script src="../plugins/treeTable/jquery.treetable.js"></script>
      <script src="../plugins/select2/select2.full.min.js"></script>
      <script src="../plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
      <script
      src="../plugins/bootstrap-wysihtml5/bootstrap-wysihtml5.zh-CN.js"></script>
      <script src="../plugins/bootstrap-markdown/js/bootstrap-markdown.js"></script>
      <script
      src="../plugins/bootstrap-markdown/locale/bootstrap-markdown.zh.js"></script>
      <script src="../plugins/bootstrap-markdown/js/markdown.js"></script>
      <script src="../plugins/bootstrap-markdown/js/to-markdown.js"></script>
      <script src="../plugins/ckeditor/ckeditor.js"></script>
      <script src="../plugins/input-mask/jquery.inputmask.js"></script>
      <script
      src="../plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
      <script src="../plugins/input-mask/jquery.inputmask.extensions.js"></script>
      <script src="../plugins/datatables/jquery.dataTables.min.js"></script>
      <script src="../plugins/datatables/dataTables.bootstrap.min.js"></script>
      <script src="../plugins/chartjs/Chart.min.js"></script>
      <script src="../plugins/flot/jquery.flot.min.js"></script>
      <script src="../plugins/flot/jquery.flot.resize.min.js"></script>
      <script src="../plugins/flot/jquery.flot.pie.min.js"></script>
      <script src="../plugins/flot/jquery.flot.categories.min.js"></script>
      <script src="../plugins/ionslider/ion.rangeSlider.min.js"></script>
      <script src="../plugins/bootstrap-slider/bootstrap-slider.js"></script>
      <script>
      $(document).ready(function() {
      // 选择框
      $(".select2").select2(); // WYSIHTML5编辑器
      $(".textarea").wysihtml5({
      locale : 'zh-CN'
      });
      }); // 设置激活菜单
      function setSidebarActive(tagUri) {
      var liObj = $("#" + tagUri);
      if (liObj.length > 0) {
      liObj.parent().parent().addClass("active");
      liObj.addClass("active");
      }
      } $(document)
      .ready(
      function() { // 激活导航位置
      setSidebarActive("admin-datalist"); // 列表按钮
      $("#dataList td input[type='checkbox']")
      .iCheck(
      {
      checkboxClass : 'icheckbox_square-blue',
      increaseArea : '20%'
      });
      // 全选操作
      $("#selall")
      .click(
      function() {
      var clicks = $(this).is(
      ':checked');
      if (!clicks) {
      $(
      "#dataList td input[type='checkbox']")
      .iCheck(
      "uncheck");
      } else {
      $(
      "#dataList td input[type='checkbox']")
      .iCheck("check");
      }
      $(this).data("clicks",
      !clicks);
      });
      });
      </script>
      </body> </html>
  • 编写controller模块代码

    • package org.hacker.ssm.controller;
      
      import org.hacker.ssm.domain.Permission;
      import org.hacker.ssm.service.IPermissionService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.servlet.ModelAndView; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-27 13:12
      */
      @Controller
      @RequestMapping("/permission")
      public class PermissionController {
      @Autowired
      private IPermissionService permissionService; @RequestMapping("/findAll.do")
      public ModelAndView findAll() {
      ModelAndView mv = new ModelAndView();
      List<Permission> permissionList = permissionService.findAll();
      mv.addObject("permissionList", permissionList);
      mv.setViewName("permission-list");
      return mv; }
      }
  • 编写service模块代码

    • 接口

      • package org.hacker.ssm.service;
        
        import org.hacker.ssm.domain.Permission;
        
        import java.util.List;
        
        /**
        * @author HackerStar
        * @create 2020-04-27 13:15
        */
        public interface IPermissionService {
        public List<Permission> findAll();
        }
    • 实现类

      • package org.hacker.ssm.service.impl;
        
        import org.hacker.ssm.dao.IPermissionDao;
        import org.hacker.ssm.domain.Permission;
        import org.hacker.ssm.service.IPermissionService;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.stereotype.Service;
        import org.springframework.transaction.annotation.Transactional; import java.util.List; /**
        * @author HackerStar
        * @create 2020-04-27 13:16
        */
        @Service
        @Transactional
        public class PermissionServiceImpl implements IPermissionService {
        @Autowired
        private IPermissionDao permissionDao; @Override
        public List<Permission> findAll() {
        return permissionDao.findAll();
        }
        }
  • 编写dao模块代码

    • package org.hacker.ssm.dao;
      
      import org.apache.ibatis.annotations.Select;
      import org.hacker.ssm.domain.Permission; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-27 13:18
      */
      public interface IPermissionDao {
      @Select("select * from permission")
      public List<Permission> findAll();
      }
  • 结果

实现资源权限添加功能

  • 复制role-add.jsp到pages目录下,修改部分代码,成为permisssion-add.jsp

    • <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <!-- 页面meta -->
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>数据 - AdminLTE2定制版</title>
      <meta name="description" content="AdminLTE2定制版">
      <meta name="keywords" content="AdminLTE2定制版"> <!-- Tell the browser to be responsive to screen width -->
      <meta
      content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
      name="viewport"> <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap/css/bootstrap.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/font-awesome/css/font-awesome.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionicons/css/ionicons.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/iCheck/square/blue.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/morris/morris.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/datepicker/datepicker3.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.theme.default.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/select2/select2.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/adminLTE/css/AdminLTE.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/adminLTE/css/skins/_all-skins.min.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/css/style.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.skinNice.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-slider/slider.css">
      <link rel="stylesheet"
      href="${pageContext.request.contextPath}/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.css">
      </head> <body class="hold-transition skin-purple sidebar-mini"> <div class="wrapper"> <!-- 页面头部 -->
      <jsp:include page="header.jsp"></jsp:include>
      <!-- 页面头部 /-->
      <!-- 导航侧栏 -->
      <jsp:include page="aside.jsp"></jsp:include>
      <!-- 导航侧栏 /--> <!-- 内容区域 -->
      <div class="content-wrapper"> <!-- 内容头部 -->
      <section class="content-header">
      <h1>
      权限管理 <small>权限表单</small>
      </h1>
      <ol class="breadcrumb">
      <li><a href="${pageContext.request.contextPath}/index.jsp"><i
      class="fa fa-dashboard"></i> 首页</a></li>
      <li><a href="${pageContext.request.contextPath}/permission/findAll.do">权限管理</a></li>
      <li class="active">权限表单</li>
      </ol>
      </section>
      <!-- 内容头部 /--> <form action="${pageContext.request.contextPath}/permission/save.do"
      method="post">
      <!-- 正文区域 -->
      <section class="content"> <!--产品信息-->
      <div class="panel panel-default">
      <div class="panel-heading">权限信息</div>
      <div class="row data-type">
      <div class="col-md-2 title">权限名称</div>
      <div class="col-md-4 data">
      <input type="text" class="form-control" name="permissionName"
      placeholder="权限名称" value="">
      </div>
      <div class="col-md-2 title">URL</div>
      <div class="col-md-4 data">
      <input type="text" class="form-control" name="url"
      placeholder="URL" value="">
      </div>
      </div>
      </div>
      <!--订单信息/--> <!--工具栏-->
      <div class="box-tools text-center">
      <button type="submit" class="btn bg-maroon">保存</button>
      <button type="button" class="btn bg-default"
      onclick="history.back(-1);">返回</button>
      </div>
      <!--工具栏/--> </section>
      <!-- 正文区域 /-->
      </form>
      </div>
      <!-- 内容区域 /--> <!-- 底部导航 -->
      <footer class="main-footer">
      <div class="pull-right hidden-xs">
      <b>Version</b> 1.0.8
      </div>
      <strong>Copyright &copy; 2014-2017 <a
      href="#">项目练习</a>.
      </strong> All rights reserved. </footer>
      <!-- 底部导航 /--> </div> <script
      src="${pageContext.request.contextPath}/plugins/jQuery/jquery-2.2.3.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/jQueryUI/jquery-ui.min.js"></script>
      <script>
      $.widget.bridge('uibutton', $.ui.button);
      </script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap/js/bootstrap.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/raphael/raphael-min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/morris/morris.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/sparkline/jquery.sparkline.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/knob/jquery.knob.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/daterangepicker/moment.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.zh-CN.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/datepicker/bootstrap-datepicker.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/slimScroll/jquery.slimscroll.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/fastclick/fastclick.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/iCheck/icheck.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/adminLTE/js/app.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/select2/select2.full.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap-wysihtml5.zh-CN.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/bootstrap-markdown.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-markdown/locale/bootstrap-markdown.zh.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/markdown.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/to-markdown.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/ckeditor/ckeditor.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.extensions.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/datatables/jquery.dataTables.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/chartjs/Chart.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/flot/jquery.flot.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/flot/jquery.flot.resize.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/flot/jquery.flot.pie.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/flot/jquery.flot.categories.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.min.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-slider/bootstrap-slider.js"></script>
      <script
      src="${pageContext.request.contextPath}/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js"></script> <script>
      $(document).ready(function() {
      // 选择框
      $(".select2").select2(); // WYSIHTML5编辑器
      $(".textarea").wysihtml5({
      locale : 'zh-CN'
      });
      }); // 设置激活菜单
      function setSidebarActive(tagUri) {
      var liObj = $("#" + tagUri);
      if (liObj.length > 0) {
      liObj.parent().parent().addClass("active");
      liObj.addClass("active");
      }
      } </script> </body>
      </html>
  • 编写controller模块代码

    • package org.hacker.ssm.controller;
      
      import org.hacker.ssm.domain.Role;
      import org.hacker.ssm.service.IRoleService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.servlet.ModelAndView; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-27 00:28
      */
      @Controller
      @RequestMapping("/role")
      public class RoleController {
      @Autowired
      private IRoleService roleService; @RequestMapping("/findAll.do")
      public ModelAndView findAll() {
      ModelAndView mv = new ModelAndView();
      List<Role> roleList = roleService.findAll();
      mv.addObject("roleList", roleList);
      mv.setViewName("role-list");
      return mv;
      } @RequestMapping("/save.do")
      public String save(Role role) {
      roleService.save(role);
      return "redirect:findAll.do"; }
      }
  • 编写service模块代码

    • 接口

      • package org.hacker.ssm.service;
        
                import org.hacker.ssm.domain.Permission;
        
                import java.util.List;
        
        /**
        * @author HackerStar
        * @create 2020-04-27 13:15
        */
        public interface IPermissionService {
        public List<Permission> findAll(); void save(Permission permission);
        }
    • 实现类

      • package org.hacker.ssm.service.impl;
        
        import org.hacker.ssm.dao.IPermissionDao;
        import org.hacker.ssm.domain.Permission;
        import org.hacker.ssm.service.IPermissionService;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.stereotype.Service;
        import org.springframework.transaction.annotation.Transactional; import java.util.List; /**
        * @author HackerStar
        * @create 2020-04-27 13:16
        */
        @Service
        @Transactional
        public class PermissionServiceImpl implements IPermissionService {
        @Autowired
        private IPermissionDao permissionDao; @Override
        public List<Permission> findAll() {
        return permissionDao.findAll();
        } @Override
        public void save(Permission permission) {
        permissionDao.save(permission);
        }
        }
  • 编写dao模块代码

    • package org.hacker.ssm.dao;
      
      import org.apache.ibatis.annotations.Insert;
      import org.apache.ibatis.annotations.Select;
      import org.hacker.ssm.domain.Permission; import java.util.List; /**
      * @author HackerStar
      * @create 2020-04-27 13:18
      */
      public interface IPermissionDao {
      @Select("select * from permission")
      public List<Permission> findAll(); @Insert("insert into permission(permissionName, url) values (#{permissionName}, #{url})")
      void save(Permission permission);
      }
  • 结果

第四天完毕

Day04_企业权限管理(SSM整合)的更多相关文章

  1. Day01_企业权限管理(SSM整合)

    学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...

  2. 五天一体_企业权限管理(SSM整合)

    学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...

  3. Day05_企业权限管理(SSM整合)

    学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...

  4. Day03_企业权限管理(SSM整合)

    学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...

  5. Day02_企业权限管理(SSM整合)

    学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...

  6. 企业权限管理(SSM整合)(总结)

    学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...

  7. Apache Shiro(五)-登录认证和权限管理ssm

    创建一个web动态项目 jar包 web.xml web.xml做了如下几件事情1. 指定spring的配置文件有两个 applicationContext.xml: 用于链接数据库的 applica ...

  8. SpringBoot中关于Shiro权限管理的整合使用

     转载:https://blog.csdn.net/fuweilian1/article/details/80309192 在整合Shiro的时候,我们先要确定一下我们的步骤: 1.加入Shiro的依 ...

  9. 08 SSM整合案例(企业权限管理系统):07.订单操作

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 07.订单操作 SSM订单操作 ...

随机推荐

  1. 1.记我的第一次python爬虫爬取网页视频

    It is my first time to public some notes on this platform, and I just want to improve myself by reco ...

  2. 推荐一款ui架构--frozenui

    首页是这样定义的 移动框架 重磅出击 简单易用,轻量快捷,为移动端服务的前端框架 链接地址 http://frozenui.github.io/base.html#layout

  3. linux环境下安装 openOffice4并启动服务

    一.背景故事 openOffice是用来做office文档在线预览功能,把office文档转换成pdf交给前端显示. 之前系统开发过程一直没有将springboot服务怼上服务器,所以只安装了wind ...

  4. python中常见的数据类型

    str 常用方法 1. 索引(下标) s = 'ABCDEFGHIJKLMN's1 = s[0]print('s[0] = ' + s1)   #s[0] = A 2. 切片:顾头不顾尾 s = 'A ...

  5. JavaScript的参数是按照什么方式传递的?

    1.基本类型传递方式 <script> var a = 1; function test(x) { x = 10; console.log(x); } test(a); // consol ...

  6. vue项目发布时去除console语句

    在vue.config.js中添加下面的代码即可 // vue-cli version > 3 modeule.exports = { configureWebpack: config => ...

  7. ArcGIS 10.2安装及卸载教程

    卸载 在控制面板中找到程序->卸载程序 找到ArcGIS的相关软件 这里以ArcGIS 10.2 Destop为例,选中,然后点击卸载,会出现如下界面 选择Remove,然后根据提示进行操作,即 ...

  8. git的撤销、删除和版本回退

    目录 备注: 知识点: 查看git仓库的状态 查看历史记录. 版本回退 备注: 本文参考于廖雪峰的博客Git教程.依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文. 知识点: 1.git ...

  9. CSS数据样式

    CSS数据样式 表格 定制表格 我们除了可以使用<table>标签进行绘制表格,在css3中display也支持进行表格的样式绘制. 样式规则 说明 table 对应 table tabl ...

  10. bzoj4512[Usaco2016 Jan] Build Gates

    bzoj4512[Usaco2016 Jan] Build Gates 题意: 某人从农场的(0,0)出发,沿边界到处乱走,走过的地方会留下栅栏,等走完后问要在多少个栅栏上开门才能使整个农场连通,最多 ...