@BaseCodeDAOImpl
作用是对实体字段 code
的支持。一张表可能会有一个外部可见的唯一字段,可以做主键使用。比如序列号、注册的手机号都是属于业务主键。
示例如下:
实体 SerialNumber.java
继承 BaseCodeEntity
,表生成字段 code
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@Table(value = "mm_serial_number", comment = "序列号")
public class SerialNumber extends BaseCodeEntity {
private SerialNumber.SerialNumberEnum status;
@AllArgsConstructor
@Getter
public enum SerialNumberEnum {
CREATED("创建"),
AVAILABLE("在库"),
SOLD("离库");
@JsonValue
public String getCode() {
return this.name();
}
private final String label;
public static SerialNumberEnum valueOfCode(String code) {
return valueOf(code);
}
}
}
SerialNumberDAO.java
继承 BaseCodeDAOImpl
@Repository
public class SerialNumberDAO extends BaseCodeDAOImpl<SerialNumber, Long> {
}
测试
@Autowired
private SerialNumberDAO serialNumberDAO;
@Autowired
private BaseCodeEntityIdFillService idFillService;
@Test
public void testSave() {
assertThrows(BizException.class, ()-> {
serialNumberDAO.insert(SerialNumber.builder()
.code("11")
.status(SerialNumber.SerialNumberEnum.AVAILABLE)
.build());
});
}
@Test
public void testSaveOrUpdate() {
// 可以根据code insertOrUpdate,也可以通过id insertOrUpdate
serialNumberDAO.insertOrUpdate(SerialNumber.builder()
.code("11")
.status(SerialNumber.SerialNumberEnum.SOLD)
.build());
}
@Test
public void testFindByCode() {
SerialNumber serialNumber = serialNumberDAO.selectByCode("11").get();
assertThat(serialNumber.getStatus()).isEqualTo(SerialNumber.SerialNumberEnum.SOLD);
}
@Test
public void testFillId1() {
SerialNumber serialNumber = SerialNumber.builder().code("11").build();
idFillService.fill(Arrays.asList(serialNumber));
assertThat(serialNumber.getId()).isEqualTo(664984730659258368L);
}
@Test
public void testFillId2() {
SerialNumber serialNumber = SerialNumber.builder().code("11").build();
idFillService.fill(serialNumber);
assertThat(serialNumber.getId()).isEqualTo(664984730659258368L);
}
@Test
public void testFillId3() {
List<SerialNumber> list = idFillService.fill(SerialNumber.class, Arrays.asList("11"));
assertThat(list.get(0).getId()).isEqualTo(664984730659258368L);
}