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

黑马程序员官网

传智播客官网

个人根据教程的每天的工作进度的代码和资料 密码: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. Python之浅谈多态和封装

    目录 组合 什么是组合 为什么使用组合 多态和多态性 多态 什么是多态? 多态性 好处 多态性 什么是多态性 封装 封装是什么意思? 隐藏 如何用代码实现隐藏 python 实际上是可以访问隐藏属性的 ...

  2. 解密TaurusDB存储端高并发之线程池

    摘要:为了能加快相关任务的高效执行,TaurusDB采用多线程技术处理的方式,增加处理器单元的吞吐能力,从而提高存储端的执行效率. 1. TaurusDB背景 随着云计算进入2.0时代,数据急剧膨胀, ...

  3. day01微信小程序

    一.基本概要 1.一个程序接口,可以集成很多功能,也就是在程序上再次开发 腾讯:微信+小程序 阿里:支付宝  +小程序 小程序的使用量很多 2.为什么要微信小程序? 1.微信用户群体大 2.容易推广, ...

  4. springmvc json乱码问题

    在方法上加上:produces属性即可 @RequestMapping(produces = "application/json;charset=utf-8")

  5. 阿里云安全组规则授权对象设置为固定IP段访问

    阿里云的ESC建站需要在安全组放通一些端口才能正常访问,所以我们在开放端口的时候就直接设置了全部ip可访问,授权对象填入0.0.0.0/0,意味着允许全部ip访问或者禁止全部ip访问. 但是我们有了一 ...

  6. c语言学习笔记第二章———入门

    B站有视频演示 2.1软件安装 推荐软件 1.dev-c++ 下载链接:(腾讯软件管家的下载地址) https://sm.myapp.com/original/Development/Dev-Cpp_ ...

  7. 赞!7000 字学习笔记,一天搞定 MySQL

    MySQL数据库简介 MySQL近两年一直稳居第二,随时有可能超过Oracle计晋升为第一名,因为MySQL的性能一直在被优化,同时安全机制也是逐渐成熟,更重要的是开源免费的. MySQL是一种关系数 ...

  8. P3008 [USACO11JAN]Roads and Planes G 拓扑排序+Dij

    题目描述 Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条道路 (1 & ...

  9. Google 出品的 Java 编码规范,强烈推荐,既权威又科学

    这份文档是 Google Java 编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格.原文:google.github.io/st ...

  10. Layui文本框限制正整数

    <input type="text" name="Number" lay-verify="required|integer" plac ...