1. 程式人生 > >使用@Convert註解將List等不是基本資料型別的變數存入的資料庫中

使用@Convert註解將List等不是基本資料型別的變數存入的資料庫中

@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);
    }

結果

這裡寫圖片描述