一、一对多
-
实体类的创建
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "t_groups") public class Group { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int gid; private String gname; @OneToMany(targetEntity = User.class,fetch = FetchType.EAGER,cascade = CascadeType.ALL,mappedBy = "group") private List<User> users; public Group(String gname) { this.gname = gname; } public Group(String gname, List<User> users) { this.gname = gname; this.users = users; } @Override public String toString() { return "Group{" + "gid=" + gid + ", gname='" + gname + '\'' + '}'; } }
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "t_users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String username; private String pwd; private int age; @ManyToOne(targetEntity = Group.class,cascade = CascadeType.ALL) @JoinColumn(name = "gid",referencedColumnName = "gid") private Group group; public User(String username, String pwd, int age) { this.username = username; this.pwd = pwd; this.age = age; } public User(int id, String username, String pwd, int age) { this.id = id; this.username = username; this.pwd = pwd; this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", pwd='" + pwd + '\'' + ", age=" + age + '}'; } }
-
Dao层的创建(继承JpaRepository<实体类名,Integer>, JpaSpecificationExecutor<实体类名>)
-
测试
@Test public void ManyToOne(){ User user =new User("bbb", "111", 20); Group group = new Group(); group.setGname("人事部"); user.setGroup(group); groupDao.save(group); userDao.save(user); //System.out.println(user1); } @Test public void ManyToOne1(){ User user =new User("ccc", "123", 20); Group group = groupDao.findOne(1); user.setGroup(group); userDao.save(user); }
二、多对多
-
实体类的创建
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "t_student1") public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int sid; private String sname; @ManyToMany(targetEntity = Teacher.class) @JoinTable(name = "t_stud_teac", joinColumns={@JoinColumn(name = "sid",referencedColumnName = "sid")}, inverseJoinColumns ={@JoinColumn(name = "tid",referencedColumnName = "tid")} ) private List<Teacher> teachers; public Student(String sname) { this.sname = sname; } }
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "t_teacher1") public class Teacher { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int tid; private String tname; @ManyToMany(targetEntity = Student.class,mappedBy="teachers") private List<Student> students; }
-
Dao层的创建(继承JpaRepository<实体类名,Integer>, JpaSpecificationExecutor<实体类名>)
-
测试
@Test public void ManyToMany(){ Student student = new Student("老六"); studentDao.save(student); //System.out.println(user1); }
三、级联操作
-
级联增加
实体类添加
@OneToMany(targetEntity = User.class,mappedBy = "group",cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)@Test public void addJL(){ Group group = new Group("开发"); User user1 = new User("1", "1", 1); User user2 = new User("2", "2", 2); User user3 = new User("3", "3", 3); User user4 = new User("4", "4", 4); //设置外键关系 user1.setGroup(group); user2.setGroup(group); user3.setGroup(group); user4.setGroup(group); //设置级联添加准备 List<User> users= new ArrayList<>(); users.add(user1); users.add(user2); users.add(user3); users.add(user4); group.setUsers(users); groupDao.save(group); }
-
级联删除
@Test public void delJL(){ groupDao.delete(7); }
-
级联修改
实体类添加@ManyToOne(targetEntity = Group.class,cascade = CascadeType.ALL)
@Test public void updJL(){ User user = userDao.findOne(26); user.setUsername("测试人员1"); user.getGroup().setGname("运维部1"); userDao.save(user); }
-
级联查询
实体类添加@OneToMany(targetEntity = User.class,fetch = FetchType.EAGER,cascade = CascadeType.ALL,mappedBy = "group")
//一方 @Test public void getUser(){ User user = userDao.findOne(5); System.out.println(user); System.out.println(user.getGroup()); } //多方 @Test public void getGroup(){ Group group = groupDao.findOne(1); System.out.println(group); System.out.println(group.getUsers()); }