通过hibernate使用权限管理多对多



--建立用户表
create table users
(
u_id varchar(32) not null,
u_name varchar(20)
)
 
alter table users 
add constraint users_PK primary key(u_id);
--***************************************************
--建立角色表
create table roles
(
r_id varchar(32) not null,
r_name varchar(20)
)


alter table roles
add constraint roles_PK primary key(r_id);


--***************************************************
--建立用户和角色的关系
create table ur
(
ur_uid varchar(32),
ur_rid varchar(32)
)


--drop table ur;


alter table ur 
add constraint ur_PK primary key(ur_uid,ur_rid);


alter table ur
add constraint ur_FK1 foreign key(ur_uid) references users(u_id);


alter table ur
add constraint ur_FK2 foreign key(ur_rid) references roles(r_id);


--***************************************************
--建立菜单表
create table menus
(
m_id varchar(32) not null,
m_name varchar(20)
)


alter table menus
add constraint menus_PK primary key(m_id);




--*****************************************************
--建立角色与菜单之间的关系


create table rm
(
rm_rid varchar(32),
rm_mid varchar(32)
)


alter table rm 
add constraint rm_PK primary key(rm_rid,rm_mid);


alter table rm
add constraint rm_FK1 foreign key(rm_rid) references roles(r_id);


alter table rm 
add constraint rm_FK2 foreign key(rm_mid) references menus(m_id);





--查询某人拥有什么权限

select distinct users.u_name,menus.m_name from users inner join ur on users.u_id=ur.ur_uid
                    inner join roles on ur.ur_rid=roles.r_id                    
                    inner join rm on rm.rm_rid=roles.r_id                    
                    inner join menus on rm.rm_mid=menus.m_id

select * from users inner join ur on users.u_id=ur.ur_uid
                    inner join roles on ur.ur_rid=roles.r_id                    
                    inner join rm on rm.rm_rid=roles.r_id                    
                    inner join menus on rm.rm_mid=menus.m_id



/**************************************************************************************************/

package com.ytc.hibernate.privilege;


import java.util.HashSet;
import java.util.Set;


public class User {
private String id;
private String name;
private Set<Role> roles = new HashSet<Role>();

public User(){}

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}

/************************************************************************************/

package com.ytc.hibernate.privilege;


import java.util.HashSet;
import java.util.Set;


public class Role {
private String id;
private String name;
private Set<Menu> menus = new HashSet<Menu>();
private Set<User> users = new HashSet<User>();

public Role(){}

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Menu> getMenus() {
return menus;
}
public void setMenus(Set<Menu> menus) {
this.menus = menus;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}

/*********************************************************************************/

package com.ytc.hibernate.privilege;


import java.util.HashSet;
import java.util.Set;


public class Menu {
private String id;
private String name;
private Set<Role> roles = new HashSet<Role>();

public Menu(){}

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}

/**************************************************************************************/

User.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="com.ytc.hibernate.privilege.User" table="users">

<id name="id" column="u_id">
<generator class="uuid"></generator>
</id>

<property name="name" column="u_name"></property>

<set name="roles" table="ur" cascade="save-update" inverse="false">
<key>
<column name="ur_uid"></column>
</key>
<many-to-many class="com.ytc.hibernate.privilege.Role" column="ur_rid"></many-to-many>
</set>

</class>

</hibernate-mapping>

/*******************************************************************************************************/

Role.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping>
<class name="com.ytc.hibernate.privilege.Role" table="roles">
<id name="id" column="r_id">
<generator class="uuid"></generator>
</id>

<property name="name" column="r_name"></property>

<set name="users" table="ur">
<key>
<column name="ur_rid"></column>
</key>
<many-to-many class="com.ytc.hibernate.privilege.User" column="ur_uid"></many-to-many>

</set>

<set name="menus" table="rm" cascade="save-update" inverse="false">
<key>
<column name="rm_rid"></column>
</key>

<many-to-many class="com.ytc.hibernate.privilege.Menu" column="rm_mid"></many-to-many>

</set>
</class>
</hibernate-mapping>

/*************************************************************************************************************/

Menu.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping>
<class name="com.ytc.hibernate.privilege.Menu" table="menus">
<id name="id" column="m_id">
<generator class="uuid"></generator>
</id>

<property name="name" column="m_name"></property>

<set name="roles" table="rm">
<key>
<column name="rm_mid"></column>
</key>
<many-to-many class="com.ytc.hibernate.privilege.Role" column="rm_rid"></many-to-many>
</set>

</class>
</hibernate-mapping>
/*****************************************************************************************/

package com.ytc.hibernate.privilege;


import java.util.List;
import java.util.Map;


import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.transform.Transformers;


public class TestPrivilege {
private static SessionFactory sessionFactory = null;

static{
Configuration configuration = new Configuration();
configuration.configure();
sessionFactory = configuration.buildSessionFactory();
}

@Test
public void test1(){
Session session = sessionFactory.openSession();
session.getTransaction().begin();

String hql = "select u.name as u_name,m.name as m_name from User u inner join u.roles r join r.menus m";

Query query = session.createQuery(hql);

query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

List<Map<String,Object>> list = query.list();

System.out.println(list);

session.getTransaction().commit();
session.close();
}

@Test
public void test2(){
Session session = sessionFactory.openSession();
session.getTransaction().begin();

User user = new User();
user.setName("张三");

Role role = new Role();
role.setName("管理员");

Menu menu = new Menu();
menu.setName("创建用户");

user.getRoles().add(role);

role.getMenus().add(menu);

session.save(user);

session.getTransaction().commit();
session.close();
}
}















































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值