一、引入依赖
<!--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());
}
}
}
评论区