mysql 多对多映射_Hibernate 多对多关系映射

Hibernate 多对多关系映射

1 Hibernate多对多关系映射

1.1 需求分析

示例分析

我们采用的示例为用户和角色。

用户:指的是系统的登录用户。

角色:指的是系统不同权限的角色。

用户和角色之间的关系是多对多。

1.2 多对多表关系建立

多对多的表关系建立靠的是中间表,其中用户表和中间表的关系是一对多,角色表和中间表的关系也是一对多,如下图所示:

6b415ca739fa5f303c87052548337c61.png

1.3 建立实体类关系

User实体类:一个用户可以具有多个角色,所以在用户实体类中应该包含多个角色的信息,代码如下

/**

* 用户(多方)

* @author lenovo

*

*/

public class User implements Serializable{

private Integer id;

private String name;

//关联角色

private Set roles = new HashSet();

public Set getRoles() {

return roles;

}

public void setRoles(Set roles) {

this.roles = roles;

}

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;

}

}

一个角色可以赋予多个用户,所以在角色实体类中应该包含多个用户的信息,代码如下:

/**

* 角色(多方)

* @author lenovo

*

*/

public class Role implements Serializable{

private Integer id;

private String name;

//关联用户

private Set users = new HashSet();

public Set getUsers() {

return users;

}

public void setUsers(Set users) {

this.users = users;

}

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;

}

}

接下来的问题是如何通过配置的方式把实体之间的关系建立起来关系。

1.4 映射配置文件

用户配置User.hbm.xml:

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

角色配置Role.hbm.xml:

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

1.5 hibernate.cfg.xml配置

/p>

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/hibernate

root

root

org.hibernate.dialect.MySQLDialect

true

true

update

1.6 执行多对多保存保存

/**

* 演示Hibernate的多对多关系映射操作

*

* @author http://www.yiidian.com

*

*/

public class Demo {

/**

* 添加操作

*/

@Test

public void test1(){

/**

* 需求:建立2个用户,2个角色

*/

User u1 = new User();

u1.setName("小苍");

User u2 = new User();

u2.setName("小泽");

Role r1 = new Role();

r1.setName("超级管理员");

Role r2 = new Role();

r2.setName("普通管理员");

//建立双向关系

u1.getRoles().add(r1);

u1.getRoles().add(r2);

r1.getUsers().add(u1);

r2.getUsers().add(u1);

u2.getRoles().add(r2);

r2.getUsers().add(u2);

Session session = HibernateUtil.getSession();

Transaction tx = session.beginTransaction();

session.save(u1);

session.save(u2);

session.save(r1);

session.save(r2);

tx.commit();

session.close();

}

}

1.7 运行结果

控制台显示:

Hibernate:

insert

into

t_user

(name)

values

(?)

Hibernate:

insert

into

t_user

(name)

values

(?)

Hibernate:

insert

into

t_role

(name)

values

(?)

Hibernate:

insert

into

t_role

(name)

values

(?)

Hibernate:

insert

into

t_user_role

(user_id, role_id)

values

(?, ?)

Hibernate:

insert

into

t_user_role

(user_id, role_id)

values

(?, ?)

Hibernate:

insert

into

t_user_role

(user_id, role_id)

values

(?, ?)

88d11880113877c991828576b1f172b8.png

一共建立三张表,分别为t_user,t_role,t_user_role。

t_user表数据:

66be2fc015b981eed053b2d9d201c495.png

t_role表的数据:

9dc20c684693a3cfa8104f4620b7a37f.png

t_user_role中间表的数据:

6db3a7ac098fb7fc8bdcb38894f74572.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值