角色管理
1) 概要设计
t_role(
rid
rname
rdescription //描述
yl1
yl2
)
主键如果是自增,最好是使用bigint
insert into t_role values(null,’管理员1’,’很牛’,null,null);
insert into t_role values(null,’管理员2’,’很牛’,null,null);
insert into t_role values(null,’管理员3’,’很牛’,null,null);
insert into t_role values(null,’管理员4’,’很牛’,null,null);
insert into t_role values(null,’管理员5’,’很牛’,null,null);
insert into t_role values(null,’管理员6’,’很牛’,null,null);
insert into t_role values(null,’管理员7’,’很牛’,null,null);
insert into t_role values(null,’管理员8’,’很牛’,null,null);
insert into t_role values(null,’管理员9’,’很牛’,null,null);
insert into t_role values(null,’管理员10’,’很牛’,null,null);
insert into t_role values(null,’管理员11’,’很牛’,null,null);
insert into t_role values(null,’管理员12’,’很牛’,null,null);
insert into t_role values(null,’管理员13’,’很牛’,null,null); ```java //Role.java package com.duyi.qxgl07.domain;
public class Role { private Integer rid ; private String rname ; private String rdescription ; private String yl1 ; private String yl2 ;
public Integer getRid() {return rid;}public void setRid(Integer rid) {this.rid = rid;}public String getRname() {return rname;}public void setRname(String rname) {this.rname = rname;}public String getRdescription() {return rdescription;}public void setRdescription(String rdescription) {this.rdescription = rdescription;}public String getYl1() {return yl1;}public void setYl1(String yl1) {this.yl1 = yl1;}public String getYl2() {return yl2;}public void setYl2(String yl2) {this.yl2 = yl2;}public Role(Integer rid, String rname, String rdescription, String yl1, String yl2) {this.rid = rid;this.rname = rname;this.rdescription = rdescription;this.yl1 = yl1;this.yl2 = yl2;}public Role() {}
}
2) 在角色列表页面,使用layui-table数据表格组件 动态请求数据,展示数据<br /> * 提供了一个用来展示数据的标签<br /> * 在js中使用table组件请求数据,自动渲染数据<br /> layui.use(['table'],function(){<br /> var table = layui.table ;<br /> table.render({<br /> elem:'#roleGrid', //绑定渲染的位置<br /> url:'roleFindAll', //底层使用ajax请求表格数据<br /> cols:[[ //指定查询结果与表格单元之间的展示关系,哪个属性展示在哪个位置<br /> {title:'角色编号',field:'rid'},<br /> {title:'角色名称',field:'rname'},<br /> {title:'角色描述',field:'rdescription'},<br /> {title:'操作'}<br /> ]],<br /> page:true<br /> });<br /> })<br /> * 注意: 默认开启分页栏<br /> 发送url请求时会自动追加page=1和limit=10参数<br /> 3) 服务端处理请求,根据分页条件,查询分页所需要的数据<br /> 这些数据要符合layui-table组件的数据结构要求<br /> {<br /> code:0,<br /> msg:'',<br /> count:10000,<br /> data:[]<br /> }<br /> 这个结构可以用之前分页创建的PageInfo处理```java//PageInfo.javapackage com.duyi.qxgl07.domain;import java.util.List;//装载(自定义)分页相关的信息//扩展:增加layui-table组件分页相关的信息public class PageInfo {private Integer page ;private Integer rows ;private Integer total ;private Integer max ;private Integer start ;private Integer end ;private List<?> data ;private Integer count ;private String msg ;private Integer code ;public Integer getPage() {return page;}public void setPage(Integer page) {this.page = page;}public Integer getRows() {return rows;}public void setRows(Integer rows) {this.rows = rows;}public Integer getTotal() {return total;}public void setTotal(Integer total) {this.total = total;}public Integer getMax() {return max;}public void setMax(Integer max) {this.max = max;}public Integer getStart() {return start;}public void setStart(Integer start) {this.start = start;}public Integer getEnd() {return end;}public void setEnd(Integer end) {this.end = end;}public List<?> getData() {return data;}public void setData(List<?> data) {this.data = data;}public PageInfo(Integer page, Integer rows, Integer total, Integer max, Integer start, Integer end, List<?> data) {this.page = page;this.rows = rows;this.total = total;this.max = max;this.start = start;this.end = end;this.data = data;}public PageInfo() {}}
4) 表格单元使用自定义模板提供操作按钮<br /> 5) 点击编辑按钮,弹出对话框,内有表单组件,完成编辑修改<br /> 6) 修改请求实现
//comm.html<link rel="stylesheet" type="text/css" href="layui/css/layui.css" /><script src="layui/layui.js"></script>
//role.jsp<%@ page pageEncoding="utf-8" %><html><head><%@include file="comm.html"%></head><body><!-- 角色列表 --><table id="roleGrid"></table><!-- 表格单元的按钮模板 --><script type="text/html" id="rowBtns"><button class="layui-btn layui-btn-sm layui-btn-warm" onclick="toEdit('{{d.rid}}','{{d.rname}}','{{d.rdescription}}')"><i class="layui-icon"></i> 编辑</button><button class="layui-btn layui-btn-sm layui-btn-danger"><i class="layui-icon"></i> 删除</button></script><!-- 弹出层中的表单模板 --><form id="roleEditForm" class="layui-form" action="roleUpdate" style="display:none;padding-top:10px;"><div class="layui-form-item"><label class="layui-form-label">角色编号</label><div class="layui-input-inline"><input type="text" name="rid" id="rid" readonly lay-verify="required" placeholder="请输入名称" autocomplete="off" class="layui-input layui-input-inline"></div></div><div class="layui-form-item"><label class="layui-form-label">角色名称</label><div class="layui-input-inline"><input type="text" name="rname" id="rname" required placeholder="请输入名称" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">角色描述</label><div class="layui-input-inline"><input type="text" name="rdescription" id="rdescription" required lay-verify="required" placeholder="请输入描述" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button><button type="button" class="layui-btn layui-btn-primary" onclick="closeEditWin()">取消</button></div></div></form><script>layui.use(['table'],function(){var table = layui.table ;<-- 渲染表格(函数),约定优于配置 -->table.render({elem:'#roleGrid', //绑定渲染的位置url:'roleFindAll', //底层使用ajax请求表格数据cols:[[ //指定查询结果与表格单元之间的展示关系,哪个属性展示在哪个位置{title:'角色编号',field:'rid'},{title:'角色名称',field:'rname'},{title:'角色描述',field:'rdescription'},{title:'操作',templet:'#rowBtns'}]],page:true});})function toEdit(rid,rname,rdescription){//显示一个弹出层,弹出对话框,使用layui-layerlayui.use(['layer'],function(){var layer = layui.layer ;var $ = layui.jquery;$('#rid').val(rid) ;document.getElementById('rname').value = rname ;$('#rdescription').val(rdescription);layer.open({type:1,title:'编辑角色',area:[400],content:$('#roleEditForm')});});}function closeEditWin(){layui.use('layer',function(){var layer = layui.layer ;layer.closeAll();});}</script></body></html>
//LayPageInfo.javapackage com.duyi.qxgl07.domain;import java.util.List;//装载layui-table组件分页时的数据结构public class LayPageInfo {private List<?> data ;private Long count ;private String msg ;private Integer code ;public List<?> getData() {return data;}public void setData(List<?> data) {this.data = data;}public Long getCount() {return count;}public void setCount(Long count) {this.count = count;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public LayPageInfo(List<?> data, Long count, String msg, Integer code) {this.data = data;this.count = count;this.msg = msg;this.code = code;}public LayPageInfo() {}}
//RoleController.javapackage com.duyi.qxgl07.controller;import com.duyi.qxgl07.domain.LayPageInfo;import com.duyi.qxgl07.domain.Role;import com.duyi.qxgl07.service.RoleService;import org.duyi.web7.annotation.Controller;import org.duyi.web7.annotation.RequestMapping;import org.duyi.web7.annotation.RequestParam;import org.duyi.web7.annotation.ResponseBody;@Controllerpublic class RoleController {RoleService service = new RoleService() ;@RequestMapping("/roleFindAll")@ResponseBodypublic LayPageInfo findAll(@RequestParam("page") int page , @RequestParam("limit") int limit){return service.findByPage(page,limit);}@RequestMapping("/roleUpdate")public String update(Role role){service.update(role);return "role.jsp" ;}}
//RoleDao.javapackage com.duyi.qxgl07.dao;import com.duyi.qxgl07.domain.Role;import orm.annotation.Select;import orm.annotation.Update;import java.util.List;import java.util.Map;public interface RoleDao {@Select("select count(*) from t_role")public long total(); //用long取或者int都可 --> 更推荐用long@Select("select * from t_role limit #{start},#{length}")public List<Role> findByPage(Map<String,Integer> param) ;@Update("update t_role set rname=#{rname} , rdescription=#{rdescription} where rid = #{rid}")public void update(Role role) ;}
//RoleService.javapackage com.duyi.qxgl07.service;import com.duyi.qxgl07.dao.RoleDao;import com.duyi.qxgl07.domain.LayPageInfo;import com.duyi.qxgl07.domain.Role;import orm.SqlSession;import java.util.HashMap;import java.util.List;import java.util.Map;public class RoleService {RoleDao dao = new SqlSession().getMapper(RoleDao.class);public LayPageInfo findByPage(int page , int limit){//确保page下限page = Math.max(1,page) ;//确保page上限 page max(需要计算 total/limit)long count = dao.total() ;// 向上取整int max = (int) Math.ceil( 1.0*count/limit );//确保max是有效,至少也会有1页max = Math.max(1,max);//确保page上限page = Math.min(page ,max) ;//mysql的分页只认 start , lengthint start = (page-1)*limit ;int length = limit ;Map<String,Integer> param = new HashMap<String,Integer>();param.put("start",start) ;param.put("length",length) ;List<Role> roles = dao.findByPage(param);return new LayPageInfo(roles,count,"",0) ;}public void update(Role role){dao.update(role);}}
