springboot联表插入
时间: 2023-07-07 17:35:14 浏览: 100
在 SpringBoot 中进行联表插入,可以通过使用 JPA 或 MyBatis 实现。
1. 使用 JPA 实现联表插入:
定义两个实体类,例如 A 和 B,其中 B 包含一个外键字段引用 A 的主键。
```
@Entity
@Table(name = "table_a")
public class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
// getter and setter
}
@Entity
@Table(name = "table_b")
public class B {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private A a;
// getter and setter
}
```
在 B 实体类中使用 @ManyToOne 和 @JoinColumn 注解定义外键关联。
创建一个 Repository 接口,继承 JpaRepository 接口,用于操作 B 实体类对应的表。
```
public interface BRepository extends JpaRepository<B, Integer> {
}
```
在 Service 类中进行联表插入操作:
```
@Service
public class BService {
@Autowired
private BRepository bRepository;
public B saveBWithA(B b, Integer aId) {
A a = new A();
a.setId(aId);
b.setA(a);
return bRepository.save(b);
}
}
```
首先创建一个 A 实体类对象,设置其主键值,然后将其设置到 B 实体类对象的外键字段中,最后通过 JpaRepository 的 save 方法保存 B 实体类对象即可。
2. 使用 MyBatis 实现联表插入:
定义两个实体类 A 和 B,以及对应的 Mapper 接口。
```
public class A {
private Integer id;
private String name;
// getter and setter
}
public class B {
private Integer id;
private String name;
private Integer aId;
// getter and setter
}
public interface AMapper {
@Insert("insert into table_a(name) values(#{name})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertA(A a);
}
public interface BMapper {
@Insert("insert into table_b(name,a_id) values(#{name},#{aId})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertB(B b);
}
```
在 BMapper 中定义一个联表插入的方法,使用 @Insert 和 @Options 注解,其中 useGeneratedKeys = true 表示插入成功后返回主键值,keyProperty 指定主键值保存到 B 实体类的哪个属性中。
在 Service 类中进行联表插入操作:
```
@Service
public class BService {
@Autowired
private AMapper aMapper;
@Autowired
private BMapper bMapper;
public B saveBWithA(B b, String aName) {
A a = new A();
a.setName(aName);
aMapper.insertA(a);
b.setAId(a.getId());
bMapper.insertB(b);
return b;
}
}
```
首先创建一个 A 实体类对象,设置其名称,然后调用 AMapper 的 insertA 方法插入到 A 对应的表中,获取其主键值,然后设置到 B 实体类对象的外键字段中,最后调用 BMapper 的 insertB 方法保存 B 实体类对象即可。
阅读全文