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

黑马程序员官网

传智播客官网

个人根据教程的每天的工作进度的代码和资料 密码: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);
      }
  • 结果

第四天完毕

最新文章

  1. ElasticSearch 5学习(4)——简单搜索笔记
  2. 【H5疑难杂症】脱离文档流时的渲染BUG
  3. 20145212&amp;20145204信息安全系统实验四报告
  4. checkbox选中状态不被改变
  5. HTTP、FTP状态码 (share)
  6. jenkins插件 查看job修改历史
  7. 开源App之MyHearts(二)
  8. mongodb用户授权
  9. iTween基础之Move(移动)
  10. 在PyCharm里配置SubVersion
  11. 楼天城楼教主的acm心路历程(作为励志用)
  12. uCOS-iii 中定义的一些常量
  13. 吴恩达机器学习笔记15-假设陈述(Hypothesis Representation)
  14. 【K8S】client-go、python-k8sclient开发K8S
  15. phpcms导航菜单的写法
  16. windows环境配置计划任务让weblogic的servers开机启动【原】
  17. ArrayList源码中的两个值得注意的问题
  18. nginx常见异常分析
  19. Android 使alertDialog.builder不会点击外面和按返回键消失
  20. jbox小型交互表单(ajax)

热门文章

  1. EntityFramework Core 迁移忽略主外键关系
  2. 09 . Prometheus监控tomcat+jvm
  3. Milk Pumping G&amp;Milk Routing S 题解
  4. hive中left semi join 与join 的区别
  5. 帝国の狂欢(种树)(可撤销DP)
  6. 状压dp大总结1 [洛谷]
  7. 关于Dfs(1);
  8. Python OpenCV的绘图功能简介
  9. day49 数据库终章
  10. python 爬虫由于网络或代理不能用导致的问题处理方法