Mybatis 多对多关联表关联 如何插入关联表数据

分类: 365Bet官方 时间: 2025-06-27 17:48:20 作者: admin 阅读: 6813

很多时候我们会碰到这样一个需求,当前我有(用户)表和(角色)表,他们之间是多对多的关系,所以我们通常会创建一个关联表(用户_角色)表,现在我们有固定的角色,只需要添加用户即可,给用户指定角色,那我们怎么做呢,废话不多说了,下面给出思路:

表 :user / role / user_role

对应JavaBean如下:

用户表:

public class User implements Serializable {

// Fields

private Integer id;

private String login;

private String name;

private String pass;

private String phone;

private String email;

private Integer isadmin;

// get...set...

}

角色表:

public class Role implements Serializable {

// Fields

private Integer roleId;

private String roleName;

private Date createdTime;

private Date updateTime;

//get...set...

}

用户_角色关联表(当然,它不创建也可以):

public class UserRole implements Serializable {

// Fields

private Integer id;

private Integer userId;

private Integer roleId;

//get...set...

}

//**以下所有操作中,所有JavaBean使用别名(typeAlias)方式,不会的话自行百度

需求,添加用户并为当前用户指定多个角色,主要Sql:

1: 首先插入用户(实现插入用户并且返回插入用户的主键):

keyProperty="id">

insert into user(login,name,pass,phone,email,isadmin)

values(#{login},#{name},#{pass},#{phone},#{email},${isadmin})

//useGeneratedKeys="true"

设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的主键字段中

//keyProperty="id" 指定JavaBean的主键字段

2:为用户匹配角色:

方式一(适用于除了插入被关联表的ID,还要插入被关联表中的其他信息,例如:角色类型( 当前设计中此字段不存在,仅仅用于举例子)):

insert into user_role(

user_id,role_id,role_type

)

select u.id,r.role_id,r.role_type from user u,role r where

u.id = ${userId} and

r.role_id in

close=")">

#{rId}

方式二(适用于只需要插入被关联表的ID)

insert into user_role(

user_id,role_id

) values

(${userId},#{rId})

//注意在执行完第一条插入用户sql后,在外部访问对象User的主键是已经存在的,类似hibernate持久化后对象已经拥有ID信息

这里把测试代码给出(Junit4):

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath*:spring-*.xml")

public class TestSSM {

@Resource

protected UserMapper userMapper;

@Test

public void testInsert() {

User user = new User();

user.setEmail("yhq1913@sina.com");

user.setLogin("ytzl");

user.setName("云图智联");

//密码加密

user.setPass(DigestUtil.hmacSign("ytzl", "yuntuzhilian"));

user.setPhone("15910721339");

user.setIsadmin(1);

userMapper.save(user);

Map saveParams = new HashMap<>();

saveParams.put("userId", user.getId());

//这里指定两个角色的ID进行测试

saveParams.put("roleIds", Arrays.asList("1", "2"));

userMapper.saveUserOrRole(saveParams);

}

}

//测试结果:数据成功插入。

相关文章

365bet网址主页

冰岛历史上首次进军世界杯决赛圈

365ba

恢复桌面原来的主题图片

365Bet官方

合成表 - 拴绳 (Lead) - [MC]我的世界原版 (Minecraft) - MC百科