一:关联映射操作
1.一对多的关联映射
需求:角色与用户的一对多的关联关系。
角色:一方
用户:多方
1.1User和Roles类的配置
@Entity
@Table(name="t_users")
public class Users {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id;
@Column(name="name")
private String name;
@Column(name="age")
private Integer age;
@Column(name="address")
private String address;
@ManyToOne
@JoinColumn(name="roles_id") //维护外键
private Roles roles;
public Roles getRoles() {
return roles;
}
public void setRoles(Roles roles) {
this.roles = roles;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Users [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
@Entity
@Table(name="t_roles")
public class Roles {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="roleid")
private Integer roleid;
@Column(name="rolename")
private String rolename;
@OneToMany(mappedBy="roles")
private Set<Users> users = new HashSet<Users>();
public Set<Users> getUsers() {
return users;
}
public void setUsers(Set<Users> users) {
this.users = users;
}
public Integer getRoleid() {
return roleid;
}
public void setRoleid(Integer roleid) {
this.roleid = roleid;
}
public String getRolename() {
return rolename;
}
public void setRolename(String rolename) {
this.rolename = rolename;
}
}
1.2测试一对多的关联关系
/**
* 一对多关联测试
* @author Administrator
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=App.class)
public class OneToManyTest {
@Autowired
private UsersRepository usersRepository;
/**
* 一对多关联关系的添加
*/
@Test
public void testSave() {
//创建一个用户
Users users = new Users();
users.setAddress("珠海");
users.setAge(21);
users.setName("小牧");
//创建一个角色
Roles roles = new Roles();
roles.setRolename("管理员");
//关联
roles.getUsers().add(users);
users.setRoles(roles);
//保存
usersRepository.save(users);
}
/**
* 一对多关联查询
*/
@Test
public void testFind() {
Users users = usersRepository.findOne(5);
System.out.println(users);
Roles roles = users.getRoles();
System.out.println(roles);
}
}
2.多对多关联映射
需求:角色与菜单多对多关联关系
角色:多方
菜单:多方
2.1 Roles 和 Menus 类配置
@Entity
@Table(name = "t_roles")
public class Roles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "roleid")
private Integer roleid;
@Column(name = "rolename")
private String rolename;
@OneToMany(mappedBy = "roles")
private Set<Users> users = new HashSet<Users>();
/**
* @JoinTable:映射中间表
* joinColumns:当前表中的主键所关联的中间表的外键字段
*/
@ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
@JoinTable(name="t_roles_menus",joinColumns=@JoinColumn(name="role_id"),inverseJoinColumns=@JoinColumn(name="menu_id"))
private Set<Menus> menus = new HashSet<Menus>();
public Set<Users> getUsers() {
return users;
}
public void setUsers(Set<Users> users) {
this.users = users;
}
public Integer getRoleid() {
return roleid;
}
public void setRoleid(Integer roleid) {
this.roleid = roleid;
}
public String getRolename() {
return rolename;
}
public void setRolename(String rolename) {
this.rolename = rolename;
}
public Set<Menus> getMenus() {
return menus;
}
public void setMenus(Set<Menus> menus) {
this.menus = menus;
}
@Override
public String toString() {
return "Roles [roleid=" + roleid + ", rolename=" + rolename + "]";
}
}
@Entity
@Table(name="t_menus")
public class Menus {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="menusid")
private Integer menusid;
@Column(name="menusname")
private String menusname;
@Column(name="menusurl")
private String menusurl;
@Column(name="fatherid")
private Integer fatherid;
@ManyToMany(mappedBy="menus")
private Set<Roles> roles = new HashSet<Roles>();
public Integer getMenusid() {
return menusid;
}
public void setMenusid(Integer menusid) {
this.menusid = menusid;
}
public String getMenusname() {
return menusname;
}
public void setMenusname(String menusname) {
this.menusname = menusname;
}
public String getMenusurl() {
return menusurl;
}
public void setMenusurl(String menusurl) {
this.menusurl = menusurl;
}
public Integer getFatherid() {
return fatherid;
}
public void setFatherid(Integer fatherid) {
this.fatherid = fatherid;
}
public Set<Roles> getRoles() {
return roles;
}
public void setRoles(Set<Roles> roles) {
this.roles = roles;
}
@Override
public String toString() {
return "Menus [menusid=" + menusid + ", menusname=" + menusname + ", menusurl=" + menusurl + ", fatherid="
+ fatherid + "]";
}
2.2 测试多对多的关联关系
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=App.class)
public class ManyToManyTest {
@Autowired
private RolesRepository rolesRepository;
/**
* 添加测试
*/
@Test
public void testSave() {
//创建角色对象
Roles r = new Roles();
r.setRolename("项目经理");
//创建菜单对象
Menus menus = new Menus();
menus.setMenusname("xxx管理系统");
menus.setFatherid(0);
Menus menus2 = new Menus();
menus2.setMenusname("项目管理");
menus2.setFatherid(1);
//关联
r.getMenus().add(menus);
r.getMenus().add(menus2);
menus.getRoles().add(r);
menus2.getRoles().add(r);
//保存
rolesRepository.save(r);
}
/**
* 查询操作
*/
@Test
public void testFind() {
Roles roles = rolesRepository.findOne(2);
System.out.println(roles);
Set<Menus> menus = roles.getMenus();
for (Menus menus2 : menus) {
System.out.println(menus2);
}
}
}