@Convert 可将不是基本数据类型的数据按照一定的格式转换成可存入数据库的基本类型,类似于自动拆装箱操作。
1、新建Converter类
2、实现javax.persistence.AttributeConverter包下的AttributeConverter接口
3、重写convertToDatabaseColumn()和convertToEntityAttribute()
4、在实体类的需要转换到的属性上加@Convert注解
示例:
Convert
import javax.persistence.AttributeConverter;
import java.sql.Timestamp;
import java.time.Instant;
/**
* Instant 转换成 Timestamp
* @author peter
* 2018/09/12 22:46
*/
public class InstantConverter implements AttributeConverter<Instant, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(Instant attribute) {
return Timestamp.from(attribute);
}
@Override
public Instant convertToEntityAttribute(Timestamp dbData) {
return dbData.toInstant();
}
}
import org.springframework.util.StringUtils;
import javax.persistence.AttributeConverter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 将List<String> 转化成字符串入库,按","来区分
* @author peter
* 2018/09/12 23:14
*/
public class ListToStringConverter implements AttributeConverter<List<String>, String> {
@Override
public String convertToDatabaseColumn(List<String> attribute) {
if (attribute == null || attribute.isEmpty()){
return "";
}
StringBuilder sb = new StringBuilder();
attribute.stream().limit(attribute.size()-1).forEach(s -> sb.append(s).append(","));
sb.append(attribute.get(attribute.size()-1));
return sb.toString();
}
@Override
public List<String> convertToEntityAttribute(String dbData) {
if (StringUtils.isEmpty(dbData)){
return new ArrayList<>();
}
String[] data = dbData.split(",");
return Arrays.stream(data).map(String::trim).collect(Collectors.toList());
}
}
实体类
import com.test.utils.InstantConverter;
import com.test.utils.ListToStringConverter;
import lombok.Data;
import javax.persistence.*;
import java.time.Instant;
import java.util.List;
/**
* @author peter
* 2018/09/12 23:12
*/
@Entity
@Data
public class TestObject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Convert(converter = InstantConverter.class)
private Instant createTime;
@Convert(converter = ListToStringConverter.class)
private List<String> listName;
}
测试
@Test
public void saveTest() {
TestObject testObject = new TestObject();
List<String> list = Arrays.asList("小明", "小红", "小妹妹");
testObject.setCreateTime(Instant.now());
testObject.setListName(list);
dao.save(testObject);
}
结果