Mybatis 多对多关联表关联 如何插入关联表数据
来源:互联网 发布:小土豆编程能过360吗 编辑:程序博客网 时间:2024/06/05 16:31
很多时候我们会碰到这样一个需求,当前我有(用户)表和(角色)表,他们之间是多对多的关系,所以我们通常会创建一个关联表(用户_角色)表,现在我们有固定的角色,只需要添加用户即可,给用户指定角色,那我们怎么做呢,废话不多说了,下面给出思路:
表 :user / role / user_role
对应JavaBean如下:
用户表:
public class User implements Serializable {// Fieldsprivate 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 {// Fieldsprivate Integer roleId;private String roleName;private Date createdTime;private Date updateTime;//get...set...}
用户_角色关联表(当然,它不创建也可以):
public class UserRole implements Serializable {// Fieldsprivate Integer id;private Integer userId;private Integer roleId;//get...set...}
//**以下所有操作中,所有JavaBean使用别名(typeAlias)方式,不会的话自行百度
需求,添加用户并为当前用户指定多个角色,主要Sql:
1: 首先插入用户(实现插入用户并且返回插入用户的主键):
<insert id="save" parameterType="User" useGeneratedKeys="true"keyProperty="id">insert into user(login,name,pass,phone,email,isadmin)values(#{login},#{name},#{pass},#{phone},#{email},${isadmin})</insert>//useGeneratedKeys="true" 设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的主键字段中
//keyProperty="id" 指定JavaBean的主键字段
2:为用户匹配角色:
方式一(适用于除了插入被关联表的ID,还要插入被关联表中的其他信息,例如:角色类型( 当前设计中此字段不存在,仅仅用于举例子)):
<insert id="saveUserOrRole" parameterType="map">insert into user_role(user_id,role_id,role_type)select u.id,r.role_id,r.role_type from user u,role r whereu.id = ${userId} andr.role_id in<foreach collection="roleIds" item="rId" open="(" separator=","close=")">#{rId}</foreach></insert>
方式二(适用于只需要插入被关联表的ID)
insert into user_role(user_id,role_id) values<foreach collection="roleIds" item="rId" separator=",">(${userId},#{rId})</foreach>
//注意在执行完第一条插入用户sql后,在外部访问对象User的主键是已经存在的,类似hibernate持久化后对象已经拥有ID信息
这里把测试代码给出(Junit4):
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath*:spring-*.xml")public class TestSSM {@Resourceprotected UserMapper userMapper;@Testpublic 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<String, Object> saveParams = new HashMap<>();saveParams.put("userId", user.getId());//这里指定两个角色的ID进行测试saveParams.put("roleIds", Arrays.asList("1", "2"));userMapper.saveUserOrRole(saveParams);}}
//测试结果:数据成功插入。
4 0
- Mybatis 多对多关联表关联 如何插入关联表数据
- mybatis多对多关联,向关联表插入数据方法
- mybatis多表关联
- Mybatis 多对多表关联
- Mybatis 多对多表关联
- Mybatis 多对多表关联
- 9、Mybatis表关联----多对多
- hibernate多对多关联数据插入
- mybatis多对多关联
- mybatis多对一关联
- Mybatis 多对一关联
- Mybatis多表关联映射
- mybatis多表关联查询
- mybatis多表关联查询
- mybatis 多表关联配置
- MyBatis多表关联查询
- Mybatis多表关联查询
- mybatis一个表关联很多的表,好多是多对多的关联关系,有必要建关联对象么
- Matlab.R2014a编译生产的exe文件一直提示:错误使用videoinput
- 汇编语言一些常用变量
- 关于AudioManager在项目中遇到的一些问题的记录
- TensorFlow--tf.nn.max_pool实现池化操作
- Java多线程的实现
- Mybatis 多对多关联表关联 如何插入关联表数据
- Hibernate JPA中@Transient、@JsonIgnoreProperties、@JsonIgnore、@JsonFormat、@JsonSerialize等注解解释
- logistic回归原理解析及Python应用实例
- 性能调优 jstack
- 【测试招聘】资深面试官的测试工程师面试心得
- 当Mock注解和Spring注解冲突时
- 好好努力
- Android 实现一个简单的下载工具
- 题目1078:二叉树遍历