我最近正在学习使用Java框架开发Web应用程序。
该应用程序只是一个基本的注册/登录/注销系统。访客可以注册一个帐户并以common user
的身份登录。除了common user
之外,还有两个角色super admin
和admin
,它们有各自的权限。
一个Account
可以同时拥有多个Role
,当然,一个Role
也可以应用于多个Account
。这就在Account
和Role
之间形成了多对多(或n对n)的关系。
我在数据库中维护了三个表:
- 第一,
ACCOUNT
表,该表存储账户除角色之外的信息; - 二是
ROLE
表,存储有多少个Role
的信息,目前只有三个,“超级用户”、“管理员”和“普通用户”; - 第三个是
ACCOUNT_ROLE
表,它存储ACCOUNT
和ROLE
之间的Map。
我可以使用Hibernate的@ManyToMany
和@JoinTable
注解来实现这一点,如果我这样做,第三个表可以由Hibernate自动管理.例如,当我创建Common User
的Account
时,Hibernate会帮助我将包含AccountId
和RoleId
的条目添加到第三个表中;当我删除这个Account
时,hib将帮助我删除第三个表中的相应条目。
问题是如何在MyBatis中实现这种多对多关系?
我看过一些资料介绍如何在MyBatis中建立one-to-one
或one-to-many
关系,但似乎MyBatis没有Hibernate那样的many-to-many
关系,那怎么办呢?
我的原始想法是 * 手动管理第三个表 *,这意味着:
- 创建新帐户时,我必须手动向第三个表中添加条目
- 删除/更新账户时,我必须手动删除/更新相应条目
因为我对MyBatis不是很熟悉,所以这是我现在唯一能想到的办法。
我希望有人能给予我一些提示或想法或具体的例子四舍五入这个问题。
- 加 *:我有github上的演示应用程序的代码,如果你需要看看这个演示是如何进行的。非常感谢!
3条答案
按热度按时间to94eoyn1#
用户故事
首先,MyBatis为您生成模型、Map器和
mapper.xml
。现在,如果您有两个模型-用户和角色
用户和角色之间的关系是什么?
一个用户有多个角色,一个角色可以授权给多个用户,所以他们是
many-to-many
关系。如何实施?
vvppvyoh2#
请看一下文档中的嵌套Resultmaps部分。
这应通过类似于以下内容的结果图来实现
p8ekf7hl3#
大家可以看看我的repository里面有一个例子。