• 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);
        }
        
    • 结果

    第四天完毕

  • 相关阅读:
    如何定时备份Mysql数据库
    Mysql如何分析慢查询及优化(一)--- EXPLAIN详解
    Mysql如何分析慢查询日志--MysqlDumpSlow详解
    Mysql添加用户及用户权限管理
    Mysql表的横向拆分与纵向拆分及简单案例
    Mysql触发器详解以及简单的案例
    Mysql存储过程详解及案例
    Mysql中如何查看线程
    Nginx命令与配置详解
    SQLSERVER 2008 技术内幕 T-SQL查询 笔记1: SQL 执行顺序
  • 原文地址:https://www.cnblogs.com/artwalker/p/12858376.html
Copyright © 2020-2023  润新知