Browse Source

jpa增加部门上下级自关联,用户部门多对多关联,[PR#59](https://github.com/xkcoding/spring-boot-demo/pull/59)

pull/1/head
Yangkai.Shen 5 years ago
parent
commit
2b619798a1
7 changed files with 287 additions and 108 deletions
  1. +192
    -11
      spring-boot-demo-orm-jpa/README.md
  2. +57
    -63
      spring-boot-demo-orm-jpa/pom.xml
  3. +5
    -5
      spring-boot-demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/entity/Department.java
  4. +9
    -11
      spring-boot-demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/entity/User.java
  5. +8
    -2
      spring-boot-demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/repository/DepartmentDao.java
  6. +5
    -5
      spring-boot-demo-orm-jpa/src/main/resources/db/schema.sql
  7. +11
    -11
      spring-boot-demo-orm-jpa/src/test/java/com/xkcoding/orm/jpa/repository/DepartmentDaoTest.java

+ 192
- 11
spring-boot-demo-orm-jpa/README.md View File

@@ -1,7 +1,10 @@
# spring-boot-demo-orm-jpa # spring-boot-demo-orm-jpa
> 此 demo 主要演示了 Spring Boot 如何使用 JPA 操作数据库。
> 此 demo 主要演示了 Spring Boot 如何使用 JPA 操作数据库,包含简单使用以及级联使用。

## 主要代码

### pom.xml


## pom.xml
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -78,7 +81,7 @@


</project> </project>
``` ```
## JpaConfig.java
### JpaConfig.java
```java ```java
/** /**
* <p> * <p>
@@ -123,7 +126,7 @@ public class JpaConfig {
} }
} }
``` ```
## User.java
### User.java
```java ```java
/** /**
* <p> * <p>
@@ -136,12 +139,12 @@ public class JpaConfig {
* @date: Created in 2018/11/7 14:06 * @date: Created in 2018/11/7 14:06
* @copyright: Copyright (c) * @copyright: Copyright (c)
* @version: V1.0 * @version: V1.0
* @modified: yangkai.shen
* @modified: 76peter
*/ */
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data
@Builder @Builder
@Entity @Entity
@Table(name = "orm_user") @Table(name = "orm_user")
@@ -183,9 +186,86 @@ public class User extends AbstractAuditModel {
*/ */
@Column(name = "last_login_time") @Column(name = "last_login_time")
private Date lastLoginTime; private Date lastLoginTime;

/**
* 关联部门表
* 1、关系维护端,负责多对多关系的绑定和解除
* 2、@JoinTable注解的name属性指定关联表的名字,joinColumns指定外键的名字,关联到关系维护端(User)
* 3、inverseJoinColumns指定外键的名字,要关联的关系被维护端(Department)
* 4、其实可以不使用@JoinTable注解,默认生成的关联表名称为主表表名+下划线+从表表名,
* 即表名为user_department
* 关联到主表的外键名:主表名+下划线+主表中的主键列名,即user_id,这里使用referencedColumnName指定
* 关联到从表的外键名:主表中用于关联的属性名+下划线+从表的主键列名,department_id
* 主表就是关系维护端对应的表,从表就是关系被维护端对应的表
*/
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "orm_user_dept", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "dept_id", referencedColumnName = "id"))
private Collection<Department> departmentList;

} }
``` ```
## AbstractAuditModel.java
### Department.java
```java
/**
* <p>
* 部门实体类
* </p>
*
* @package: com.xkcoding.orm.jpa.entity
* @description: 部门实体类
* @author: 76peter
* @date: Created in 2019/10/1 18:07
* @copyright: Copyright (c) 2019
* @version: V1.0
* @modified: 76peter
*/
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "orm_department")
@ToString(callSuper = true)
public class Department extends AbstractAuditModel {

/**
* 部门名
*/
@Column(name = "name", columnDefinition = "varchar(255) not null")
private String name;

/**
* 上级部门id
*/
@ManyToOne(cascade = {CascadeType.REFRESH}, optional = true)
@JoinColumn(name = "superior", referencedColumnName = "id")
private Department superior;
/**
* 所属层级
*/
@Column(name = "levels", columnDefinition = "int not null default 0")
private Integer levels;
/**
* 排序
*/
@Column(name = "order_no", columnDefinition = "int not null default 0")
private Integer orderNo;
/**
* 子部门集合
*/
@OneToMany(cascade = {CascadeType.REFRESH, CascadeType.REMOVE}, fetch = FetchType.EAGER, mappedBy = "superior")
private Collection<Department> children;

/**
* 部门下用户集合
*/
@ManyToMany(mappedBy = "departmentList")
private Collection<User> userList;

}
```
### AbstractAuditModel.java
```java ```java
/** /**
* <p> * <p>
@@ -228,7 +308,7 @@ public abstract class AbstractAuditModel implements Serializable {
private Date lastUpdateTime; private Date lastUpdateTime;
} }
``` ```
## UserDao.java
### UserDao.java
```java ```java
/** /**
* <p> * <p>
@@ -248,7 +328,33 @@ public interface UserDao extends JpaRepository<User, Long> {


} }
``` ```
## application.yml
### DepartmentDao.java
```java
/**
* <p>
* User Dao
* </p>
*
* @package: com.xkcoding.orm.jpa.repository
* @description: Department Dao
* @author: 76peter
* @date: Created in 2019/10/1 18:07
* @copyright: Copyright (c) 2019
* @version: V1.0
* @modified: 76peter
*/
@Repository
public interface DepartmentDao extends JpaRepository<Department, Long> {
/**
* 根据层级查询部门
*
* @param level 层级
* @return 部门列表
*/
List<Department> findDepartmentsByLevels(Integer level);
}
```
### application.yml
```yaml ```yaml
server: server:
port: 8080 port: 8080
@@ -290,7 +396,7 @@ logging:
org.hibernate.SQL: debug org.hibernate.SQL: debug
org.hibernate.type: trace org.hibernate.type: trace
``` ```
## UserDaoTest.java
### UserDaoTest.java
```java ```java
/** /**
* <p> * <p>
@@ -403,7 +509,82 @@ public class UserDaoTest extends SpringBootDemoOrmJpaApplicationTests {


} }
``` ```
### DepartmentDaoTest.java
```java
/**
* <p>
* jpa 测试类
* </p>
*
* @package: com.xkcoding.orm.jpa.repository
* @description: jpa 测试类
* @author: 76peter
* @date: Created in 2018/11/7 14:09
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: 76peter
*/
@Slf4j
public class DepartmentDaoTest extends SpringBootDemoOrmJpaApplicationTests {
@Autowired
private DepartmentDao departmentDao;
@Autowired
private UserDao userDao;

/**
* 测试保存 ,根节点
*/
@Test
@Transactional
public void testSave() {
Collection<Department> departmentList = departmentDao.findDepartmentsByLevels(0);

if (departmentList.size() == 0) {
Department testSave1 = Department.builder().name("testSave1").orderNo(0).levels(0).superior(null).build();
Department testSave1_1 = Department.builder().name("testSave1_1").orderNo(0).levels(1).superior(testSave1).build();
Department testSave1_2 = Department.builder().name("testSave1_2").orderNo(0).levels(1).superior(testSave1).build();
Department testSave1_1_1 = Department.builder().name("testSave1_1_1").orderNo(0).levels(2).superior(testSave1_1).build();
departmentList.add(testSave1);
departmentList.add(testSave1_1);
departmentList.add(testSave1_2);
departmentList.add(testSave1_1_1);
departmentDao.saveAll(departmentList);

Collection<Department> deptall = departmentDao.findAll();
log.debug("【部门】= {}", JSONArray.toJSONString((List) deptall));
}


userDao.findById(1L).ifPresent(user -> {
user.setName("添加部门");
Department dept = departmentDao.findById(2L).get();
user.setDepartmentList(departmentList);
userDao.save(user);
});

log.debug("用户部门={}", JSONUtil.toJsonStr(userDao.findById(1L).get().getDepartmentList()));


departmentDao.findById(2L).ifPresent(dept -> {
Collection<User> userlist = dept.getUserList();
//关联关系由user维护中间表,department userlist不会发生变化,可以增加查询方法来处理 重写getUserList方法
log.debug("部门下用户={}", JSONUtil.toJsonStr(userlist));
});


userDao.findById(1L).ifPresent(user -> {
user.setName("清空部门");
user.setDepartmentList(null);
userDao.save(user);
});
log.debug("用户部门={}", userDao.findById(1L).get().getDepartmentList());

}
}
```

### 其余代码及 SQL 参见本 demo


## 参考 ## 参考


Spring Data JPA 官方文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
- Spring Data JPA 官方文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

+ 57
- 63
spring-boot-demo-orm-jpa/pom.xml View File

@@ -1,80 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>


<artifactId>spring-boot-demo-orm-jpa</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<artifactId>spring-boot-demo-orm-jpa</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>


<name>spring-boot-demo-orm-jpa</name>
<description>Demo project for Spring Boot</description>
<name>spring-boot-demo-orm-jpa</name>
<description>Demo project for Spring Boot</description>


<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>


<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>


<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>


<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>


<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>


<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>


<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>


<build>
<finalName>spring-boot-demo-orm-jpa</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<build>
<finalName>spring-boot-demo-orm-jpa</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>


</project> </project>

+ 5
- 5
spring-boot-demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/entity/Department.java View File

@@ -38,8 +38,8 @@ public class Department extends AbstractAuditModel {
/** /**
* 上级部门id * 上级部门id
*/ */
@ManyToOne(cascade = {CascadeType.REFRESH},optional = true)
@JoinColumn(name = "superior",referencedColumnName = "id")
@ManyToOne(cascade = {CascadeType.REFRESH}, optional = true)
@JoinColumn(name = "superior", referencedColumnName = "id")
private Department superior; private Department superior;
/** /**
* 所属层级 * 所属层级
@@ -49,12 +49,12 @@ public class Department extends AbstractAuditModel {
/** /**
* 排序 * 排序
*/ */
@Column(name = "orderno", columnDefinition = "int not null default 0")
private Integer orderno;
@Column(name = "order_no", columnDefinition = "int not null default 0")
private Integer orderNo;
/** /**
* 子部门集合 * 子部门集合
*/ */
@OneToMany(cascade={CascadeType.REFRESH, CascadeType.REMOVE}, fetch = FetchType.EAGER,mappedBy="superior")
@OneToMany(cascade = {CascadeType.REFRESH, CascadeType.REMOVE}, fetch = FetchType.EAGER, mappedBy = "superior")
private Collection<Department> children; private Collection<Department> children;


/** /**


+ 9
- 11
spring-boot-demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/entity/User.java View File

@@ -66,21 +66,19 @@ public class User extends AbstractAuditModel {
@Column(name = "last_login_time") @Column(name = "last_login_time")
private Date lastLoginTime; private Date lastLoginTime;



/** /**
* 关联部门表 * 关联部门表
* 1、关系维护端,负责多对多关系的绑定和解除
* 2、@JoinTable注解的name属性指定关联表的名字,joinColumns指定外键的名字,关联到关系维护端(User)
* 3、inverseJoinColumns指定外键的名字,要关联的关系被维护端(Department)
* 4、其实可以不使用@JoinTable注解,默认生成的关联表名称为主表表名+下划线+从表表名,
* 即表名为user_department
* 关联到主表的外键名:主表名+下划线+主表中的主键列名,即user_id,这里使用referencedColumnName指定
* 关联到从表的外键名:主表中用于关联的属性名+下划线+从表的主键列名,department_id
* 主表就是关系维护端对应的表,从表就是关系被维护端对应的表
*/ */
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "orm_usersetdept",joinColumns = @JoinColumn(name = "userid",referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name = "deptid",referencedColumnName="id"))
//1、关系维护端,负责多对多关系的绑定和解除
//2、@JoinTable注解的name属性指定关联表的名字,joinColumns指定外键的名字,关联到关系维护端(User)
//3、inverseJoinColumns指定外键的名字,要关联的关系被维护端(Department)
//4、其实可以不使用@JoinTable注解,默认生成的关联表名称为主表表名+下划线+从表表名,
//即表名为user_department
//关联到主表的外键名:主表名+下划线+主表中的主键列名,即user_id,这里使用referencedColumnName指定
//关联到从表的外键名:主表中用于关联的属性名+下划线+从表的主键列名,department_id
//主表就是关系维护端对应的表,从表就是关系被维护端对应的表
@JoinTable(name = "orm_user_dept", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "dept_id", referencedColumnName = "id"))
private Collection<Department> departmentList; private Collection<Department> departmentList;


} }

+ 8
- 2
spring-boot-demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/repository/DepartmentDao.java View File

@@ -4,7 +4,7 @@ import com.xkcoding.orm.jpa.entity.Department;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;


import java.util.Collection;
import java.util.List;




/** /**
@@ -22,5 +22,11 @@ import java.util.Collection;
*/ */
@Repository @Repository
public interface DepartmentDao extends JpaRepository<Department, Long> { public interface DepartmentDao extends JpaRepository<Department, Long> {
public Collection<Department> findDepartmentsByLevels(Integer level);
/**
* 根据层级查询部门
*
* @param level 层级
* @return 部门列表
*/
List<Department> findDepartmentsByLevels(Integer level);
} }

+ 5
- 5
spring-boot-demo-orm-jpa/src/main/resources/db/schema.sql View File

@@ -19,16 +19,16 @@ CREATE TABLE `orm_department` (
`name` VARCHAR(32) NOT NULL COMMENT '部门名称', `name` VARCHAR(32) NOT NULL COMMENT '部门名称',
`superior` INT(11) COMMENT '上级id', `superior` INT(11) COMMENT '上级id',
`levels` INT(11) NOT NULL COMMENT '层级', `levels` INT(11) NOT NULL COMMENT '层级',
`orderno` INT(11) NOT NULL DEFAULT 0 COMMENT '排序',
`order_no` INT(11) NOT NULL DEFAULT 0 COMMENT '排序',
`create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间', `create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间',
`last_update_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '上次更新时间' `last_update_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '上次更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Spring Boot Demo Orm 系列示例表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Spring Boot Demo Orm 系列示例表';


--DROP TABLE IF EXISTS `orm_usersetdept`;
CREATE TABLE `orm_usersetdept` (
DROP TABLE IF EXISTS `orm_user_dept`;
CREATE TABLE `orm_user_dept` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键', `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
`userid` INT(11) NOT NULL COMMENT '用户id',
`deptid` INT(11) NOT NULL COMMENT '部门id',
`user_id` INT(11) NOT NULL COMMENT '用户id',
`dept_id` INT(11) NOT NULL COMMENT '部门id',
`create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间', `create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间',
`last_update_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '上次更新时间' `last_update_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '上次更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Spring Boot Demo Orm 系列示例表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Spring Boot Demo Orm 系列示例表';

+ 11
- 11
spring-boot-demo-orm-jpa/src/test/java/com/xkcoding/orm/jpa/repository/DepartmentDaoTest.java View File

@@ -1,5 +1,6 @@
package com.xkcoding.orm.jpa.repository; package com.xkcoding.orm.jpa.repository;


import cn.hutool.json.JSONUtil;
import com.xkcoding.orm.jpa.SpringBootDemoOrmJpaApplicationTests; import com.xkcoding.orm.jpa.SpringBootDemoOrmJpaApplicationTests;
import com.xkcoding.orm.jpa.entity.Department; import com.xkcoding.orm.jpa.entity.Department;
import com.xkcoding.orm.jpa.entity.User; import com.xkcoding.orm.jpa.entity.User;
@@ -39,11 +40,12 @@ public class DepartmentDaoTest extends SpringBootDemoOrmJpaApplicationTests {
@Transactional @Transactional
public void testSave() { public void testSave() {
Collection<Department> departmentList = departmentDao.findDepartmentsByLevels(0); Collection<Department> departmentList = departmentDao.findDepartmentsByLevels(0);
if(departmentList.size()==0){
Department testSave1 = Department.builder().name("testSave1").orderno(0).levels(0).superior(null).build();
Department testSave1_1 = Department.builder().name("testSave1_1").orderno(0).levels(1).superior(testSave1).build();
Department testSave1_2 = Department.builder().name("testSave1_2").orderno(0).levels(1).superior(testSave1).build();
Department testSave1_1_1 = Department.builder().name("testSave1_1_1").orderno(0).levels(2).superior(testSave1_1).build();

if (departmentList.size() == 0) {
Department testSave1 = Department.builder().name("testSave1").orderNo(0).levels(0).superior(null).build();
Department testSave1_1 = Department.builder().name("testSave1_1").orderNo(0).levels(1).superior(testSave1).build();
Department testSave1_2 = Department.builder().name("testSave1_2").orderNo(0).levels(1).superior(testSave1).build();
Department testSave1_1_1 = Department.builder().name("testSave1_1_1").orderNo(0).levels(2).superior(testSave1_1).build();
departmentList.add(testSave1); departmentList.add(testSave1);
departmentList.add(testSave1_1); departmentList.add(testSave1_1);
departmentList.add(testSave1_2); departmentList.add(testSave1_2);
@@ -51,7 +53,7 @@ public class DepartmentDaoTest extends SpringBootDemoOrmJpaApplicationTests {
departmentDao.saveAll(departmentList); departmentDao.saveAll(departmentList);


Collection<Department> deptall = departmentDao.findAll(); Collection<Department> deptall = departmentDao.findAll();
log.debug("【部门】= {}", JSONArray.toJSONString((List)deptall));
log.debug("【部门】= {}", JSONArray.toJSONString((List) deptall));
} }




@@ -61,14 +63,14 @@ public class DepartmentDaoTest extends SpringBootDemoOrmJpaApplicationTests {
user.setDepartmentList(departmentList); user.setDepartmentList(departmentList);
userDao.save(user); userDao.save(user);
}); });
User users = userDao.findById(1L).get();
log.debug("用户部门={}", JSONArray.toJSONString((List)userDao.findById(1L).get().getDepartmentList()));
log.debug("用户部门={}", JSONUtil.toJsonStr(userDao.findById(1L).get().getDepartmentList()));




departmentDao.findById(2L).ifPresent(dept -> { departmentDao.findById(2L).ifPresent(dept -> {
Collection<User> userlist = dept.getUserList(); Collection<User> userlist = dept.getUserList();
//关联关系由user维护中间表,department userlist不会发生变化,可以增加查询方法来处理 重写getUserList方法 //关联关系由user维护中间表,department userlist不会发生变化,可以增加查询方法来处理 重写getUserList方法
log.debug("部门下用户={}", JSONArray.toJSONString((List)userlist));
log.debug("部门下用户={}", JSONUtil.toJsonStr(userlist));
}); });




@@ -79,8 +81,6 @@ public class DepartmentDaoTest extends SpringBootDemoOrmJpaApplicationTests {
}); });
log.debug("用户部门={}", userDao.findById(1L).get().getDepartmentList()); log.debug("用户部门={}", userDao.findById(1L).get().getDepartmentList());



} }



} }

Loading…
Cancel
Save