二、创建一个用户表User(id,uname)、一个角色表Role(rid,rname)和一个权限表Privilege(pid,pname),用户表和角色表多对多,角色表和权限表多对多 1、完成三个表的新增操作 2、使用ResultMap方式查询用户的权限(5表连接查询) 3、实现修改用户角色操作(删除和新增角色)
时间: 2024-01-20 12:03:29 浏览: 201
在一个表中对用户进行查询、修改、删除和增加
好的,我会尽力回答您的问题。
1. 新增操作:
创建用户表和角色表:
```sql
CREATE TABLE User (
id INT PRIMARY KEY,
uname VARCHAR(50)
);
CREATE TABLE Role (
rid INT PRIMARY KEY,
rname VARCHAR(50)
);
```
创建权限表:
```sql
CREATE TABLE Privilege (
pid INT PRIMARY KEY,
pname VARCHAR(50)
);
```
添加数据到用户表:
```sql
INSERT INTO User (id, uname) VALUES (1, 'Alice');
INSERT INTO User (id, uname) VALUES (2, 'Bob');
INSERT INTO User (id, uname) VALUES (3, 'Charlie');
```
添加数据到角色表:
```sql
INSERT INTO Role (rid, rname) VALUES (1, 'Admin');
INSERT INTO Role (rid, rname) VALUES (2, 'User');
```
添加数据到权限表:
```sql
INSERT INTO Privilege (pid, pname) VALUES (1, 'Create');
INSERT INTO Privilege (pid, pname) VALUES (2, 'Read');
INSERT INTO Privilege (pid, pname) VALUES (3, 'Update');
INSERT INTO Privilege (pid, pname) VALUES (4, 'Delete');
```
创建用户表和角色表的关联表User_Role:
```sql
CREATE TABLE User_Role (
id INT,
rid INT,
PRIMARY KEY (id, rid),
FOREIGN KEY (id) REFERENCES User(id),
FOREIGN KEY (rid) REFERENCES Role(rid)
);
```
添加数据到关联表User_Role:
```sql
INSERT INTO User_Role (id, rid) VALUES (1, 1);
INSERT INTO User_Role (id, rid) VALUES (2, 2);
INSERT INTO User_Role (id, rid) VALUES (3, 2);
```
创建角色表和权限表的关联表Role_Privilege:
```sql
CREATE TABLE Role_Privilege (
rid INT,
pid INT,
PRIMARY KEY (rid, pid),
FOREIGN KEY (rid) REFERENCES Role(rid),
FOREIGN KEY (pid) REFERENCES Privilege(pid)
);
```
添加数据到关联表Role_Privilege:
```sql
INSERT INTO Role_Privilege (rid, pid) VALUES (1, 1);
INSERT INTO Role_Privilege (rid, pid) VALUES (1, 2);
INSERT INTO Role_Privilege (rid, pid) VALUES (1, 3);
INSERT INTO Role_Privilege (rid, pid) VALUES (1, 4);
INSERT INTO Role_Privilege (rid, pid) VALUES (2, 2);
INSERT INTO Role_Privilege (rid, pid) VALUES (2, 3);
```
2. 使用ResultMap方式查询用户的权限(5表连接查询):
在MyBatis的mapper.xml文件中,可以使用ResultMap来定义查询结果的映射关系,从而实现多表连接查询。以下是一个示例:
```xml
<!-- 定义User、Role、Privilege三个实体类 -->
<resultMap id="userWithPrivileges" type="User">
<id property="id" column="id" />
<result property="uname" column="uname" />
<collection property="roles" resultMap="roleWithPrivileges" />
</resultMap>
<resultMap id="roleWithPrivileges" type="Role">
<id property="rid" column="rid" />
<result property="rname" column="rname" />
<collection property="privileges" resultMap="privilege" />
</resultMap>
<resultMap id="privilege" type="Privilege">
<id property="pid" column="pid" />
<result property="pname" column="pname" />
</resultMap>
<!-- 查询用户的权限 -->
<select id="getUserWithPrivileges" resultMap="userWithPrivileges">
SELECT u.id, u.uname, r.rid, r.rname, p.pid, p.pname
FROM User u
INNER JOIN User_Role ur ON u.id = ur.id
INNER JOIN Role r ON ur.rid = r.rid
INNER JOIN Role_Privilege rp ON r.rid = rp.rid
INNER JOIN Privilege p ON rp.pid = p.pid
WHERE u.id = #{id}
</select>
```
在以上示例中,定义了三个ResultMap,分别对应User、Role、Privilege三个实体类。在查询用户的权限时,使用了INNER JOIN将五个表连接在一起,并通过ResultMap的嵌套关系,将查询结果映射成一个User对象,其中包含了该用户的所有角色和权限。
3. 实现修改用户角色操作(删除和新增角色):
在MyBatis的mapper.xml文件中,可以使用update语句来实现修改操作。以下是一个示例:
```xml
<!-- 删除用户的某个角色 -->
<update id="deleteUserRole">
DELETE FROM User_Role
WHERE id = #{id} AND rid = #{rid}
</update>
<!-- 新增用户的某个角色 -->
<insert id="addUserRole">
INSERT INTO User_Role (id, rid)
VALUES (#{id}, #{rid})
</insert>
```
在以上示例中,定义了两个update语句,分别对应删除用户的某个角色和新增用户的某个角色。在具体使用时,可以通过调用相应的mapper方法,传入需要修改的用户id和角色id,来实现对用户角色的修改。
阅读全文