跳到主要内容

保存短关联

何谓短关联

所谓短关联,指只改变当前对象和其他对象之间的关联关系,不进一步修改关联对象。

对于UI界面而言

  • 引用关联 (一对一和多对一) 表现为单选菜单

  • 集合关联 (一对多和多对多) 表现为多选菜单

例如:

Book Form

定义Input DTO

  1. 安装DTO语言Intellij插件:https://github.com/ClearPlume/jimmer-dto (此过程不是必须的,但非常推荐)

  2. 新建目录src/main/dto

  3. src/main/dto下建立一个文件Book.dto,编写代码如下

    Book.dto
    input BookInputWithShortAssociations {
    #allScalars(this)
    id(store) //默认别名storeId
    id(authors) as authorIds
    }

生成的代码

BookInputWithShortAssociations.java
@GeneratedBy(
file = "<yourproject>/src/main/dto/Book.dto"
)
public class BookInputWithShortAssociations implements Input<Book> {

@Nullable
private Long id;

@NotNull
private String name;

private int edition;

@NotNull
private BigDecimal price;

@Nullable
private Long storeId;

@NotNull
private List<Long> authorIds;

...省略其他方法...
}

编写HTTP服务

BookController.java
@RestController
public class BookController {

private final JSqlClient sqlClient;

public BookController(JSqlClient sqlClient) {
this.sqlClient = sqlClient;
}

@PutMapping("/book")
pubic int saveBookInputWithShortAssociations(
@RequestBody BookInputWithShortAssociations input
) {
return sqlClient
.save(input)
.getTotalAffectedRowCount();
}
}

可见,无论Input DTO如何改变,Jimmer仍然只需一个方法调用即可完成数据保存。