侧边栏壁纸
博主头像
小城雨巷 博主等级

行动起来,活在当下

  • 累计撰写 20 篇文章
  • 累计创建 6 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Spring Data Jpa

Administrator
2023-10-18 / 0 评论 / 0 点赞 / 20 阅读 / 0 字

一、引入依赖

	<!--Spring Data Jpa-->
	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
       
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

二、编写配置文件

spring:
  main:
    allow-bean-definition-overriding: true
  application:
    name: mingdao-batch-app
  datasource:
    url: jdbc:mysql://localhost:3306/jpademo?allowPublicKeyRetrieval=true&useSSL=false
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
  sql:
    init:
      mode: always
  jpa:
    hibernate:
      ddl-auto: update
      default_schema: dbo
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect
        show-sql: false
    show-sql: false
    open-in-view: true

三、编写实体类

user实体类

package com.oyang.jpademo.entity;

import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * @author outengfei
 * @email t15294977908@163.com
 * @date 2022-01-25 10:46
 */
@Entity
@Table(name = "user")
@Data
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Integer userId;

    @Column(name = "name")
    private String name;

    @Column(name = "phone")
    private String phone;

    @Column(name = "age")
    private Integer age;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<Dept> depts = new HashSet<>();


    @ManyToMany(targetEntity = Teacher.class, cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
    @JoinTable(name = "user_teacher",
            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")},
            inverseJoinColumns = {@JoinColumn(name = "t_id", referencedColumnName = "t_id")}
    )
    private Set<Teacher> teachers = new HashSet<>();

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", name='" + name + '\'' +
                ", phone='" + phone + '\'' +
                ", age=" + age +
                '}';
    }
}


教师实体类


package com.oyang.jpademo.entity;



import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 * @author outengfei
 * @email t15294977908@163.com
 * @date 2022-01-25 12:16
 */
@Entity
@Table(name = "teacher")
public class Teacher {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "t_id")
    private Integer tId;

    @Column(name = "t_name")
    private String tName;

    @Column(name = "t_age")
    private Integer tAge;

    @ManyToMany(targetEntity = User.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "user_teacher",
            joinColumns = {@JoinColumn(name = "t_id", referencedColumnName = "t_id")},
            inverseJoinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")}
    )
    private Set<User> users = new HashSet<>();

    public Integer gettId() {
        return tId;
    }

    public void settId(Integer tId) {
        this.tId = tId;
    }

    public String gettName() {
        return tName;
    }

    public void settName(String tName) {
        this.tName = tName;
    }

    public Integer gettAge() {
        return tAge;
    }

    public void settAge(Integer tAge) {
        this.tAge = tAge;
    }

    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "tId=" + tId +
                ", tName='" + tName + '\'' +
                ", tAge=" + tAge +
                '}';
    }
}

四、编写dao层

userDao

package com.oyang.jpademo.dao;

import com.oyang.jpademo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

/**
 * @author outengfei
 * @email t15294977908@163.com
 * @date 2022-01-25 10:55
 */
@Repository
public interface UserDao extends PagingAndSortingRepository<User, Integer> {

}


教师dao

package com.oyang.jpademo.dao;

import com.oyang.jpademo.entity.Teacher;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

/**
 * @author outengfei
 * @email t15294977908@163.com
 * @date 2022-01-25 12:44
 */
@Repository
public interface TeacherDao extends PagingAndSortingRepository<Teacher, Integer> {
}


五、测试

package com.oyang.jpademo;

import com.oyang.jpademo.dao.DeptDao;
import com.oyang.jpademo.dao.TeacherDao;
import com.oyang.jpademo.dao.UserDao;
import com.oyang.jpademo.entity.Dept;
import com.oyang.jpademo.entity.Teacher;
import com.oyang.jpademo.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Optional;
import java.util.Set;

@SpringBootTest
class JpademoApplicationTests {

    @Autowired
    UserDao userDao;

    @Autowired
    DeptDao deptDao;

    @Autowired
    TeacherDao teacherDao;

    @Test
    void contextLoads() {


        User user = new User();
        user.setName("123");
        user.setPhone("147");
        Dept dept = new Dept();

        dept.setDeptName("1123");
        dept.setUser(user);
        userDao.save(user);
        deptDao.save(dept);

    }

    @Test
    void test1(){
        Optional<User> byId = userDao.findById(1);

        User user1 = byId.get();
        System.out.println(user1);

        Set<Dept> depts = user1.getDepts();
        for (Dept dept : depts) {
            System.out.println(dept.getDeptName());
        }
    }

    @Test
    void test3(){
        User user = new User();
        user.setName("aaa");

        Optional<Teacher> byId = teacherDao.findById(2);
        Teacher teacher = byId.get();

        teacher.gettName();
        System.out.println(teacher.gettId());
        //teacherDao.save(teacher1);
        user.getTeachers().add(teacher);
        userDao.save(user);

    }

    @Test
    void test5(){

        Optional<Teacher> byId = teacherDao.findById(2);
        System.out.println(byId.get().toString());
    }

    @Test
    void test4(){
        Optional<User> byId = userDao.findById(1);
        User user = byId.get();
        Set<Teacher> teachers = user.getTeachers();
        for (Teacher teacher : teachers) {

            System.out.println(teacher.gettName());
        }
        //teachers.stream().forEach(System.out::println);
        System.out.println();
    }

    @Test
    void test2(){


        Optional<User> byId = userDao.findById(1);

        User user1 = byId.get();

        Teacher teacher1 = new Teacher();
        teacher1.settName("1456");
        teacherDao.save(teacher1);

        Optional<Teacher> byId1 = teacherDao.findById(1);
        user1.getTeachers().add(byId1.get());

        User save = userDao.save(user1);


        Set<Dept> depts = save.getDepts();
        for (Dept dept : depts) {
            System.out.println(dept.getDeptName());
        }
        Set<Teacher> teachers = save.getTeachers();
        for (Teacher teacher : teachers) {
            System.out.println(teacher.gettName());
        }
    }

}


0

评论区