SpringDataJpa关联关系

一、一对多

  1.  实体类的创建
    @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 +
                    '}';
        }
    }
  2. Dao层的创建(继承JpaRepository<实体类名,Integer>, JpaSpecificationExecutor<实体类名>)
  3. 测试
    @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);
        }

二、多对多 

  1.  实体类的创建
    @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;
    }
  2. Dao层的创建(继承JpaRepository<实体类名,Integer>, JpaSpecificationExecutor<实体类名>)
  3. 测试
    @Test
        public void ManyToMany(){
            Student student = new Student("老六");
            studentDao.save(student);
            //System.out.println(user1);
        }

三、级联操作

  1. 级联增加
    实体类添加
    @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);
        }
  2. 级联删除
    @Test
        public void delJL(){
            groupDao.delete(7);
        }
  3. 级联修改
    实体类添加

    @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);
    
        }
  4. 级联查询
    实体类添加
    @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());
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值