编写实体类
1.User实体类
package com.itheima.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "sys_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name ="user_id")
private Long userId;
@Column(name = "user_name")
private String userName;
@Column(name = "user_age")
private Integer age;
/*
* 配置多对多的映射关系
* 1.声明表关系的配置
* @ManyToMany(targetEntity="")
* 2配置中间表
* @joinTable
* name:中间表的名称
* joinColumn:配置当前对象在中间表的外键,name:中间表的外键,referencedColumnName:该外键参考的当前对象的字段
* inverseJoinColumn:配置对方对象在中间表的外键,name:中间表的外键,referencedColumnName:该外键参考的对方对象的字段
* */
@ManyToMany(targetEntity = Role.class)
@JoinTable(name = "sys_user_role",
joinColumns = {@JoinColumn( name ="sys_user_id",referencedColumnName = "user_id")},
inverseJoinColumns = {@JoinColumn(name="sys_role_id",referencedColumnName = "role_id")}
)
private Set<Role> roles=new HashSet<Role>();
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
2编写Role实体类
package com.itheima.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "sys_role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "role_id")
private Long roleId;
@Column(name = "role_name")
private String roleName;
/*
* 配置多对多的映射关系
* 1.声明表关系的配置
* @ManyToMany(targetEntity="")
* 2配置中间表
* @joinTable
* name:中间表的名称
* joinColumn:配置当前对象在中间表的外键,name:中间表的外键,referencedColumnName:该外键参考的当前对象的字段
* inverseJoinColumn:配置对方对象在中间表的外键,name:中间表的外键,referencedColumnName:该外键参考的对方对象的字段
* 放弃维护权
* @ManyToMany(MappedBy="roles")
*
*
* */
@ManyToMany(targetEntity = User.class)
@JoinTable(name = "sys_user_role",
joinColumns = {@JoinColumn( name ="sys_role_id",referencedColumnName = "role_id")},
inverseJoinColumns = {@JoinColumn(name="sys_user_id",referencedColumnName = "user_id")}
)
private Set<User> users=new HashSet<User>();
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}
3编写Role以及UserDao
4编写测试方法
package com.itheima.test;
import com.itheima.dao.RoleDao;
import com.itheima.dao.UserDao;
import com.itheima.domain.Role;
import com.itheima.domain.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class ManyToManyTest {
@Autowired
private UserDao userDao;
@Autowired
private RoleDao roleDao;
@Test
@Transactional
@Rollback(false)
//测试多对多添加
public void testAdd(){
User user=new User();
user.setUserName("小李");
Role role=new Role();
role.setRoleName("java程序员");
user.getRoles().add(role);
// role.getUsers().add(user);
userDao.save(user);
roleDao.save(role);
}
}