Loading

Day04_企业权限管理(SSM整合)

学于黑马程序员和传智播客联合做的教学项目 感谢
黑马程序员官网
传智播客官网
个人根据教程的每天的工作进度的代码和资料 密码: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);
      }
      
  • 结果

第四天完毕

posted @ 2020-05-09 16:12  Artwalker  阅读(184)  评论(0编辑  收藏  举报
Live2D