环境搭建
属性类
PhoneNumber
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PhoneNumber {
private String code;
private String number;
/**
* 序列化格式
* @return
*/
@Override
public String toString() {
return code + "-" + number;
}
}
实体类
@Data
@ToString
@Builder
@TableName("t_project")
@NoArgsConstructor
@AllArgsConstructor
public class Project {
@Id
private Long id;
private PhoneNumber phoneNumber;
反序列化转换
@Component
final public class StringToPhoneNumberConverterFactory implements ConverterFactory<String, PhoneNumber> {
@Override
public <T extends PhoneNumber> Converter<String, T> getConverter(Class<T> aClass) {
return new StringToPhoneNumber();
}
private static class StringToPhoneNumber<T> implements Converter<String, T> {
@Override
public T convert(String source) {
if (StringUtils.isBlank(source)) {
return null;
}
String[] arr = source.split("-");
return (T) PhoneNumber.builder().code(arr[0]).number(arr[1]).build();
}
}
}
测试
@Test
public void testSave() {
Project project = new Project();
project.setPhoneNumber("861-18888888888");
projectDAO.insert(project);
Assert.assertNotNull(project.getId());
}
@Test
public void testFindById() {
Optional<Project> optional = projectDAO.selectById(479411923147194368L);
Project project = optional.get();
Assert.assertEquals("18888888888", project.getPhoneNumber().getNumber());
}