Service层 动态加载菜单的打包
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);
1 楼
eclipseakwolf
2011-01-21
很不错的文章,苦苦寻找的,good
2 楼
eclipseakwolf
2011-01-21
楼主,小菜又研究了
3代表的父节点是哪个??好像没插入3节点了??
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节点了??