`

Service层 动态加载菜单的封装.

阅读更多
package pack.y2.hibernate.serviceimpl;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import pack.y2.hibernate.daoimpl.MenusDaoImpl;
import pack.y2.hibernate.daoimpl.RolesDaoImpl;
import pack.y2.hibernate.daoimpl.UserDaoImpl;
import pack.y2.hibernate.idao.IMenusDao;
import pack.y2.hibernate.idao.IRolesDao;
import pack.y2.hibernate.idao.IUsersDao;
import pack.y2.hibernate.iservice.IUserService;
import pack.y2.hibernate.pojo.Menus;
import pack.y2.hibernate.pojo.Roles;
import pack.y2.hibernate.pojo.Users;

public class UserServiceImpl implements IUserService{
	IUsersDao iuser=new UserDaoImpl(); 
	IMenusDao imeus=new MenusDaoImpl();
	IRolesDao irole=new RolesDaoImpl();
	/**
	 * 根据用户名得到权限;
	 */
	public Set selectByName(String name) {
		// TODO Auto-generated method stub
		  String hql="From Menus as M join fetch M.roleses R join fetch R.userses U where U.username=?";
		List list=iuser.pageQuery(hql, null, null,name);
		//把list转成set集合;
		Set set=new HashSet(list);
		return set;
	}
	
	//得到所有的用户;
	public Map selectAll(Integer page) {
		// TODO Auto-generated method stub
		String hql="From Users";
		List list=iuser.pageQuery(hql,page,8);
		
		Map map=new HashMap();
		map.put("UserList", list);
		
		String hql2="select count(*) From Users";
		//得到总页数;
		List list2=iuser.pageQuery(hql2, null, null);
		
		Object obj=list2.get(0);
		int sum=Integer.parseInt(obj.toString());
		//添加总记录数;
		map.put("Sum",sum);
		
		//添加总页数;
		Integer sumPage=sum%8==0?sum/8:sum/8+1;
		map.put("SumPage",sumPage);
		
		return map;
	}

	//查询用户已有的权限;
	public List findGrant_UserById(Long userid) {
		// TODO Auto-generated method stub
		String hql="From Roles r where r.userses.userid=?";
		List list=iuser.pageQuery(hql, null, null,userid);
		return list;
	}

	//查询用户没有的权限;
	public List findNotGrant_UserById(Long userid) {
		// TODO Auto-generated method stub
		String hql="From Roles where rolesid not in(select r.rolesid From Roles r where r.userses.userid=?)";
		List list=iuser.pageQuery(hql, null, null, userid);
		return list;
	}

	//保存用户角色的方法;
	public void saveUserGrant(Long userid, String rolesid) {
		//根据用户编号查找出用户对象;
		Users users=(Users)iuser.selectById(userid);
		System.out.println("roles字符串为:"+rolesid);
		
		if(rolesid==null || rolesid.length()<1){
			//清除所有的集合;
			users.getRoleses().clear();
		}else{
			StringBuffer sb=new StringBuffer("From Roles r where r.rolesid in(");
			sb.append(rolesid);
			sb.setCharAt(sb.toString().length()-1, ')');
			
			String hql=sb.toString();
			List list=iuser.pageQuery(hql, null, null);
			Set set=new HashSet(list);
			
			System.out.println("list大小:"+list.size());
			//把角色重新放入集合中;
			users.setRoleses(set);
		}
		
		//最后更新用户;
		iuser.add(users);
	}

	//得到所有的菜单项;
	public List getMenusAll() {
		// TODO Auto-generated method stub
		List list=imeus.selectAll();
		return list;
	}
	
	public static void main(String[] args) {
		Set list=new UserServiceImpl().getUsersByRolesId(new Long(1));
		for(Object obj:list){
			Users u=(Users)obj;
			System.out.println(u.getUsername());
		}
		
	}
	
	//根据角色编号查找出菜单编号;
	public List getRoleAllByRoleId(Long roleid){
		String hql="From Menus m where m.roleses.rolesid=?";
		List list=imeus.pageQuery(hql, null, null, roleid);
		return list;

	}
	
	//得到所有的角色;
	public List getRolesAll(){
		String hql="From Roles";
		List list=irole.selectAll();
		return list;
		
	}

	//根据穿过来的角色编号查找出角色对象;角色对象中有一个菜单对象的集合;
	//首先清除所有的菜单权限;然后在判断menusid是否为空;如果不为空,则用StringBuffer sb=new StringBuffer("From Roles where r .menus.memusid in(");
	//然后在把menusid传入到in里面;拼成sql语句;执行后返回List结果集;把结果集放入set集合中;
	//最后调用更新方法进行更新操作;
	public void saveMenusByRolesId(Long rolesId, String menusId) {
		String hql="From Roles r where r.rolesid=?";
		List list=irole.pageQuery(hql, null, null, rolesId);
		//得到一个角色对象;
		Roles role=(Roles)list.get(0);
		
		
		//清除角色对象中的所有菜单;
		role.getMenuses().clear();
		
		if(menusId!=null && menusId.length()>0){
			//根据menusId查找出所有的菜单出来;	
			StringBuffer sb=new StringBuffer("From Menus s where s.menusid in(");
			sb.append(menusId);
			//把菜单编号最后一个,替换成")";
			sb.setCharAt(sb.length()-1, ')');
	
			List menus=imeus.pageQuery(sb.toString(), null, null, null);
			Set set=new HashSet(menus);
			
			//然后把,菜单集合重新放入到角色对象中;
			role.setMenuses(set);
		}
		//最后,进行更新;
		irole.update(role);	
		System.out.println("菜单更新完成!。");
	}
	
	
	public Set getUsersByRolesId(Long rolesid) {
		// TODO Auto-generated method stub
		String hql="From Roles r where r.rolesid=?";
		List list=imeus.pageQuery(hql, null, null,rolesid);
		Set set=new HashSet();
		for (Object obj : list) {
			Roles role=(Roles)obj;
			set=role.getUserses();
		}
		return set;
	}
}

 

 

创建角色的数据库脚本,

--创建用户表;
drop table users;
create table users(
     --主键,
     userid number primary key not null,
     username varchar2(50)not null,
     userpass varchar2(20)not null,
     --外键,所属部门;
     deptid number not null,  
     --生日;
     birthday date not null,
     sex varchar2(4)not null,
     age number not null,
     --手机;
     combine varchar2(11)null,
     email varchar2(50)null,
     address varchar2(50)null,
     zipcode varchar2(8)null,
     remark varchar2(50)null,
     --创建users表的所属部门的外键;
     foreign key(deptid) references dept(deptid)
)

--创建序列;
drop sequence seq_users;
create sequence seq_users;
insert into users values(seq_users.nextval,'雪见','123456',3,sysdate,'女',23,'13459858985','xuejian@163.com','北京市','0101000','暂无备注');
insert into users values(seq_users.nextval,'李逍遥','123456',1,sysdate,'男',27,'15973556785','huge@126.com','北京市','014502','暂无备注');
insert into users values(seq_users.nextval,'龙葵','123456',2,sysdate,'男',20,'18978985858','longkui@126.com','湖南长沙','314502','暂无备注');


--创建角色表;
drop table roles;
create table roles(
	rolesid number primary key not null,                --主键角色编号;
	rolename varchar2(20)not null                       --角色名称;  
)
drop sequence seq_roles;
create sequence seq_roles;

insert into roles values(seq_roles.nextVal,'管理员');
insert into roles values(seq_roles.nextVal,'程序员');
insert into roles values(seq_roles.nextVal,'项目经理');
insert into roles values(seq_roles.nextVal,'公司总裁');

--用户角色中间表;
drop table user_roles;
create table user_roles(
	urId number references users(userid),     --<外键>用户编号;
	rolesid number references roles(rolesid)  --<外键>角色编号;
);

insert into user_roles values(1,1);
insert into user_roles values(2,2);
insert into user_roles values(3,3);


--菜单表;
drop table menus;
create table menus(                 
	menusid number primary key not null,                          --菜单编号; 
	menusname varchar2(20)not null,                               --菜单姓名; 
	menusparent number not null,                                  --父菜单编号;
	menusurl varchar2(150) null,                                  --菜单链接;
	isshow number not null                                        --是否显示;
)
drop sequence seq_menus;
create sequence seq_menus;

--'-1'代表根目录 ; --1代表根目录下; 2--代表1的跟目下, --3代表-同级目录;
insert into menus values(seq_menus.nextVal,'功能菜单',-1,'',1);
insert into menus values(seq_menus.nextVal,'系统管理',1,'',1);
insert into menus values(seq_menus.nextVal,'用户管理',2,'',1);

insert into menus values(seq_menus.nextVal,'考勤管理',3,'',1);
insert into menus values(seq_menus.nextVal,'个人设置',3,'',1);
insert into menus values(seq_menus.nextVal,'短信管理',3,'',1);
insert into menus values(seq_menus.nextVal,'通讯录管理',3,'',1);
insert into menus values(seq_menus.nextVal,'权限管理',3,'',1);
insert into menus values(seq_menus.nextVal,'公告管理',3,'',1);


--角色菜单中间表;
drop table rols_menus;
create table rols_menus(
	rolesid number references roles(rolesid), --<外键>角色编号;
	menusid number references menus(menusid)  --<外键>菜单编号;
)


drop sequence seq_rols_menus;
create sequence seq_rols_menus;

insert into rols_menus values(1,1);
insert into rols_menus values(1,2);
insert into rols_menus values(2,1);
insert into rols_menus values(2,2);
insert into rols_menus values(3,1);
insert into rols_menus values(4,2);

 

分享到:
评论
2 楼 eclipseakwolf 2011-01-21  
楼主,小菜又研究了
75.insert into menus values(seq_menus.nextVal,'考勤管理',[color=red]3[/color],'',1); 
76.insert into menus values(seq_menus.nextVal,'个人设置',[color=red]3[/color],'',1); 
77.insert into menus values(seq_menus.nextVal,'短信管理',[color=red]3[/color],'',1); 
78.insert into menus values(seq_menus.nextVal,'通讯录管理',[color=red]3[/color],'',1); 
79.insert into menus values(seq_menus.nextVal,'权限管理',[color=red]3[/color],'',1); 
80.insert into menus values(seq_menus.nextVal,'公告管理',[color=red]3[/color],'',1);

3代表的父节点是哪个??好像没插入3节点了??
1 楼 eclipseakwolf 2011-01-21  
很不错的文章,苦苦寻找的,good

相关推荐

    android应用源码QQ_UI之分类菜单.rar

    可能还需要添加权限,如读取网络数据,以便在加载菜单内容时获取远程数据。 此外,QQ的分类菜单可能还涉及数据存储,如SQLite数据库或SharedPreferences,用于保存用户的选择或者缓存数据。数据操作通常封装在...

    java/jsp 实现二级级联菜单

    在Servlet或Spring MVC的Controller中,接收用户的请求,调用Service层的方法获取菜单数据,并将其存储在会话(session)或请求(request)对象中,以便JSP页面可以访问。 5. **JSP页面**: JSP页面是用户界面,...

    精通WindowsAPI.pdf

    第1章 Windows应用程序开发入门..........................................................................................16 1.1 第一个实例程序...............................................................

    Remoting三层架构

    在本设计中,客户端应用程序会根据用户权限动态生成菜单,并根据配置加载相应的模块。 2. **业务层**:包含业务逻辑,处理用户请求,应用业务规则,但不涉及数据的读取和保存。业务层通过Remoting服务接口与客户端...

    [其他类别]分页 QQ菜单 jsp标签_noka3.9.zip

    2. **Java类文件**:可能包含处理数据库操作和服务的Java类,如DAO(数据访问对象)层和Service层。 3. **配置文件**:如web.xml,用于设置Servlet和Filter等Web应用组件。 4. **CSS和JavaScript文件**:用于页面...

    WebView上下文菜单demo

    压缩包中的`WebViewContextMenuUtil`可能是包含上述逻辑的工具类,它封装了创建和处理WebView上下文菜单的代码,便于在多个地方复用。 通过以上步骤,我们成功地为WebView添加了一个自定义的上下文菜单,其中包括...

    简单的毕设基础开发模板,包含通用结果封装、用户菜单配置、系统用户发送信息、mybatis-plus代码生成器、用户登录模块。适

    这通常是通过角色-菜单关联关系来实现的,用户登录后根据其角色加载相应的菜单,实现权限控制。 "系统用户发送信息"功能,可能指的是邮件或者短信通知服务,用于向用户发送验证码、通知等信息。在SpringBoot中,...

    二级联动、三级联动

    4. 实现Service层,封装业务逻辑,调用Mapper接口查询数据。 5. 前端构建HTML页面,使用Ajax监听选择框的change事件,发送请求。 6. 响应后端返回的数据,前端动态更新下拉框选项。 在实际开发中,可能还需要考虑...

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8).pdf

    3. 分别封装了模型层、控制层、业务逻辑层和数据持久层的通用操作模块,层次分明,大大减少代码冗余,二次开发效率高。 4. 系统稳定性好,支持大并发。 二、主要功能: 1. 采用 ExtJS 4.2.1.883 无限制版本,放心...

    Javascript.特效特辑

    在这个特辑中,我们可能涵盖了各种JavaScript特效的实现方法,包括但不限于动画、滑动门、下拉菜单、轮播图、图片懒加载等。 1. **动画效果**:JavaScript可以创建平滑的动画效果,通过改变元素的位置、大小、透明...

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8).docx

    6. 异常处理:ExceptionCode和服务层异常ServiceException用于统一异常信息的管理和抛出。 7. 二级缓存管理:CacheFactory处理Ehcache缓存的创建和管理。 8. 工具类:系统内还包含多种工具类,以满足各种辅助功能...

    spring mvc,easyui,mybatis 开发网站后台管理系统源代码下载

    EasyUI的组件通过AJAX与后端Controller进行通信,动态加载和更新数据。 6. **配置文件**:包括Spring的配置文件(如spring-context.xml),MyBatis的配置文件(mybatis-config.xml)和数据库连接配置文件等,这些...

    XP封装部署 技术大全攻略

    **5.5 开始菜单与IE浏览器中的OEM信息加载** - **开始菜单**: 显示自定义的OEM信息。 - **IE浏览器**: 在IE浏览器中加载OEM信息。 **5.6 其他个性化** - **桌面图标**: 更改桌面图标。 - **系统声音**: 更改系统...

    仿QQ+webso框架·开源

    当进入index.html文件的时候就开始运行原生的JS,步骤是先加载配置文件,jPushConfig.xml 然后依次加载文档中service节点下的每一个节点文件,都是同步加载,加载完成一个后再加载另一个,这也就是进度条的实现方法...

    基于SSH、纯bootstrap、jquery的跑步论坛

    在论坛项目中,jQuery可能被用来实现页面动态加载、表单验证、滑动效果等功能,提高用户交互性。 项目可能包含以下部分: - `struts.properties` 和 `struts.xml`:Struts2的核心配置文件,定义了Action和结果页面...

    426_HTML手机电脑网站_网页源码移动端前端_H5模板_自适应响应式源码 (2).zip

    4. **JavaScript**:在前端源码中,JavaScript用于实现交互性和动态功能,如表单验证、滑动效果、下拉菜单等。现代JavaScript库和框架,如jQuery、Vue.js、React.js或Angular.js,可以帮助开发者更高效地编写代码。 ...

    精通Windows.API-函数、接口、编程实例.pdf

    9.6.2 动态增加、删除、设置菜单及菜单项 274 9.6.3 菜单消息处理 274 9.7 对话框 275 9.7.1 创建对话框 275 9.7.2 对话框消息处理函数 276 第10章 系统信息的管理 277 10.1 Windows系统信息 277 ...

    ssh+easyui+dategrid

    3. 实现Service层,封装业务逻辑,利用Hibernate操作数据库。 4. 在前端页面使用EasyUI的DateGrid,设置数据源和列定义,与后台Action进行Ajax通信获取数据。 5. 考虑到性能和用户体验,可能需要对DateGrid进行优化...

    SpringBoot+Vue 前后端分离的RBAC权限管理系统.zip

    在编码实现过程中,SpringBoot的Controller层处理HTTP请求,Service层封装业务逻辑,Repository层负责数据持久化。Vue.js则在前端通过axios库发送AJAX请求,获取后端数据,渲染视图。同时,为了保证数据传输的安全性...

Global site tag (gtag.js) - Google Analytics