spring MVC+easyUI+mybatis实现网站后台管理系统
最近开发一个通用的后台管理系统,管理员登录后,可以对角色、菜单按钮进行控制和管理,十分的方便
功能实现截图
登录页面:
修改用户密码:
菜单管理:
操作员管理:
角色管理:
操作员授权:
编辑菜单:
编辑角色:
技术点介绍
使用Java平台,采用SpringMVC+Mybatis等主流框架
数据库:使用免费MYSQL
前端:使用Jquery和Easyui技术.界面清晰简洁,易操作
权限:对菜单,按钮控制.仅展示有权限的菜单和按钮.
拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性.
代码生成:根据表生成对应的Bean,Service,Mapper,Action,XML等。提高开发效率.
主要代码
mode层:
BaseMode.java
package com.yiya.model;
import org.apache.commons.lang.StringUtils;
import com.yiya.utils.Pager;
import com.yiya.utils.StringUtil;
public class BaseModel {
private Integer page = 1;
private Integer rows =10;
private String sort;
private String order;
/**
* 分页导航
*/
private Pager pager = new Pager();
public Pager getPager() {
pager.setPageId(getPage());
pager.setPageSize(getRows());
String orderField="";
if(StringUtils.isNotBlank(sort)){
orderField = sort;
}
if(StringUtils.isNotBlank(orderField) && StringUtils.isNotBlank(order)){
orderField +=" "+ order;
}
pager.setOrderField(orderField);
return pager;
}
public void setPager(Pager pager) {
this.pager = pager;
}
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 String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
}
SysMenuModel.java
package com.yiya.model;
public class SysMenuModel extends BaseModel {
private Integer id;// 主键
private String name;// 菜单名称
private String url;// 系统url
private Integer parentId;// 父id 关联sys_menu.id
private Integer deleted;// 是否删除,0=未删除,1=已删除
private java.sql.Timestamp createTime;// 创建时间
private java.sql.Timestamp updateTime;// 修改时间
private Integer rank;// 排序
private String actions; //注册Action 按钮|分隔
public String getActions() {
return actions;
}
public void setActions(String actions) {
this.actions = actions;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
public java.sql.Timestamp getCreateTime() {
return createTime;
}
public void setCreateTime(java.sql.Timestamp createTime) {
this.createTime = createTime;
}
public java.sql.Timestamp getUpdateTime() {
return updateTime;
}
public void setUpdateTime(java.sql.Timestamp updateTime) {
this.updateTime = updateTime;
}
public Integer getRank() {
return rank;
}
public void setRank(Integer rank) {
this.rank = rank;
}
}
service层
sysMenuService.java
package com.yiya.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yiya.bean.SysMenu;
import com.yiya.bean.SysMenuBtn;
import com.yiya.bean.SysRoleRel;
import com.yiya.bean.SysRoleRel.RelType;
import com.yiya.mapper.SysMenuMapper;
/**
*
* <br>
* <b>功能:</b>SysMenuService<br>
* <b>作者:</b>罗泽军<br>
* <b>日期:</b> Dec 9, 2011 <br>
* <b>版权所有:<b>版权所有(C) 2011,WWW.VOWO.COM<br>
*/
@Service("sysMenuService")
public class SysMenuService<T> extends BaseService<T> {
private final static Logger log= Logger.getLogger(SysMenuService.class);
@Autowired
private SysRoleRelService<SysRoleRel> sysRoleRelService;
@Autowired
private SysMenuBtnService<SysMenuBtn> sysMenuBtnService;
@Autowired
private SysMenuMapper<T> mapper;
/**
* 保存菜单btn
* @param btns
* @throws Exception
*/
public void saveBtns(Integer menuid,List<SysMenuBtn> btns) throws Exception{
if(btns == null || btns.isEmpty()){
return;
}
for (SysMenuBtn btn : btns) {
if(btn.getId()!= null && "1".equals(btn.getDeleteFlag())){
sysMenuBtnService.delete(btn.getId());
continue;
}
btn.setMenuid(menuid);
if(btn.getId() == null){
sysMenuBtnService.add(btn);
}else{
sysMenuBtnService.update(btn);
}
}
}
public void add(SysMenu menu) throws Exception {
super.add((T)menu);
saveBtns(menu.getId(),menu.getBtns());
}
public void update(SysMenu menu) throws Exception {
super.update((T)menu);
saveBtns(menu.getId(),menu.getBtns());
}
/**
* 查询所有系统菜单列表
* @return
*/
public List<T> queryByAll(){
return mapper.queryByAll();
}
/**
* 获取顶级菜单
* @return
*/
public List<T> getRootMenu(Integer menuId){
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("menuId", menuId);
return mapper.getRootMenu(map);
}
/**
* 获取子菜单
* @return
*/
public List<T> getChildMenu(){
return mapper.getChildMenu();
}
/**
* 根据用户id查询父菜单
* @param roleId
* @return
*/
public List<T> getRootMenuByUser(Integer userId){
return getMapper().getRootMenuByUser(userId);
}
/**
* 根据用户id查询子菜单
* @param roleId
* @return
*/
public List<T> getChildMenuByUser(Integer userId){
return getMapper().getChildMenuByUser(userId);
}
/**
* 根据权限id查询菜单
* @param roleId
* @return
*/
public List<T> getMenuByRoleId(Integer roleId){
return getMapper().getMenuByRoleId(roleId);
}
@Override
public void delete(Object[] ids) throws Exception {
super.delete(ids);
//删除关联关系
for(Object id : ids){
sysRoleRelService.deleteByObjId((Integer)id, RelType.MENU.key);
sysMenuBtnService.deleteByMenuid((Integer)id);
}
}
public SysMenuMapper<T> getMapper() {
return mapper;
}
}
action层
SysMenuAction.java
package com.yiya.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
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 com.yiya.bean.SysMenu;
import com.yiya.bean.SysMenuBtn;
import com.yiya.bean.TreeNode;
import com.yiya.bean.BaseBean.DELETED;
import com.yiya.model.SysMenuModel;
import com.yiya.service.SysMenuBtnService;
import com.yiya.service.SysMenuService;
import com.yiya.utils.HtmlUtil;
import com.yiya.utils.TreeUtil;
@Controller
@RequestMapping("/sysMenu")
public class SysMenuAction extends BaseAction{
private final static Logger log= Logger.getLogger(SysMenuAction.class);
// Servrice start
@Autowired(required=false) //自动注入,不需要生成set方法了,required=false表示没有实现类,也不会报错。
private SysMenuService<SysMenu> sysMenuService;
@Autowired
private SysMenuBtnService<SysMenuBtn> sysMenuBtnService;
/**
* ilook 首页
* @param url
* @param classifyId
* @return
*/
@RequestMapping("/menu")
public ModelAndView menu(SysMenuModel model,HttpServletRequest request) throws Exception{
Map<String,Object> context = getRootMap();
model.setDeleted(DELETED.NO.key);
List<SysMenu> dataList = sysMenuService.queryByList(model);
//设置页面数据
context.put("dataList", dataList);
return forword("sys/sysMenu",context);
}
/**
* 顶级菜单 json
* @param menuId 此菜单id不查询,可以为空
* @param response
* @throws Exception
*/
@RequestMapping("/rootMenuJson")
public void rootMenu(Integer menuId,HttpServletResponse response) throws Exception{
List<SysMenu> dataList = sysMenuService.getRootMenu(menuId);
if(dataList==null){
dataList = new ArrayList<SysMenu>();
}
HtmlUtil.writerJson(response, dataList);
}
/**
* json 列表页面
* @param url
* @param classifyId
* @return
* @throws Exception
*/
@RequestMapping("/dataList")
public void dataList(SysMenuModel model,HttpServletResponse response) throws Exception{
List<SysMenu> dataList = sysMenuService.queryByList(model);
//设置页面数据
Map<String,Object> jsonMap = new HashMap<String,Object>();
jsonMap.put("total",model.getPager().getRowCount());
jsonMap.put("rows", dataList);
HtmlUtil.writerJson(response, jsonMap);
}
/**
* 添加或修改数据
* @param url
* @param classifyId
* @return
* @throws Exception
*/
@RequestMapping("/save")
public void save(SysMenu bean,HttpServletRequest request,HttpServletResponse response) throws Exception{
if(true){
new Exception(" Test Error");
}
//设置菜单按钮数据
List<SysMenuBtn> btns = getReqBtns(request);
bean.setBtns(btns);
if(bean.getId() == null){
bean.setDeleted(DELETED.NO.key);
sysMenuService.add(bean);
}else{
sysMenuService.update(bean);
}
sendSuccessMessage(response, "保存成功~");
}
@RequestMapping("/getId")
public void getId(Integer id,HttpServletResponse response) throws Exception{
Map<String,Object> context = new HashMap<String,Object>();
SysMenu bean = sysMenuService.queryById(id);
if(bean == null){
sendFailureMessage(response, "没有找到对应的记录!");
return;
}
List<SysMenuBtn> btns = sysMenuBtnService.queryByMenuid(id);
bean.setBtns(btns);
context.put(SUCCESS, true);
context.put("data", bean);
HtmlUtil.writerJson(response, context);
}
@RequestMapping("/delete")
public void delete(Integer[] id,HttpServletResponse response) throws Exception{
if(id != null && id.length > 0){
sysMenuService.delete(id);
sendSuccessMessage(response, "删除成功");
}else{
sendFailureMessage(response, "未选中记录");
}
}
@RequestMapping("/getMenuTree")
public void getMenuTree(Integer id,HttpServletResponse response) throws Exception{
List<TreeNode> menuTree = treeMenu();
HtmlUtil.writerJson(response, menuTree);
}
/**
* 构建树形菜单
* @return
*/
public List<TreeNode> treeMenu(){
List<SysMenu> rootMenus = sysMenuService.getRootMenu(null);//根节点
List<SysMenu> childMenus = sysMenuService.getChildMenu();//子节点
List<SysMenuBtn> childBtns = sysMenuBtnService.queryByAll();
TreeUtil util = new TreeUtil(rootMenus,childMenus,childBtns);
return util.getTreeNode();
}
/**
* 获取请求的菜单按钮数据
* @param request
* @return
*/
public List<SysMenuBtn> getReqBtns(HttpServletRequest request){
List<SysMenuBtn> btnList= new ArrayList<SysMenuBtn>();
String[] btnId = request.getParameterValues("btnId");
String[] btnName = request.getParameterValues("btnName");
String[] btnType = request.getParameterValues("btnType");
String[] actionUrls = request.getParameterValues("actionUrls");
String[] deleteFlag = request.getParameterValues("deleteFlag");
for (int i = 0; i < btnId.length; i++) {
if(StringUtils.isNotBlank(btnName[i]) && StringUtils.isNotBlank(btnType[i])){
SysMenuBtn btn = new SysMenuBtn();
if(StringUtils.isNotBlank(btnId[i]) && NumberUtils.isNumber(btnId[i])){
btn.setId(NumberUtils.toInt(btnId[i]));
}
btn.setBtnName(btnName[i]);
btn.setBtnType(btnType[i]);
btn.setActionUrls(actionUrls[i]);
btn.setDeleteFlag(deleteFlag[i]);
btnList.add(btn);
}
}
return btnList;
}
}
dao
BaseDao.java
package com.yiya.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class BaseDao {
static Connection conn = null;
static Statement stmt = null;
static ResultSet rs = null;
static PreparedStatement ps = null;
private final static String deriver = "com.mysql.jdbc.Driver";
private final static String url = "jdbc:mysql://59.53.66.227/diyStartext?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true";
private final static String user = "jony";
private final static String password = "123456";
public static Connection getConnection() {
try {
Class.forName(deriver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (conn == null) {
conn = DriverManager.getConnection(url, user, password);
System.out.println("sussess");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 执行 SQL
*
* @param sql
* @return
*/
public static ResultSet getResultSet(String sql) {
try {
BaseDao.getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
/**
* 执行 SQL
* 只取出第一条数据
* @param sql
* @return
*/
public static ResultSet getFirstResultSet(String sql) {
try {
BaseDao.getConnection();
ps = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
/**
* 获取表达式
*
* @return
*/
public static Statement Statement() {
try {
if (conn == null) {
stmt = conn.createStatement();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stmt;
}
/**
* 释放资源
*
*/
public static void closeDBConnection() {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
BaseDao.getConnection();
ResultSet r = BaseDao.getResultSet("select * from babyinfo");
try {
while(r.next()){
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
写在最后
如果有问题(或需要完整源码参考)可以加博主V交流:Code2Life2