環境:mysql8 mybatis
背景:最近在做一個功能時需要對程序生成的對象保存到數據庫中。
注意事項:需要存儲的對象需要實現序列化接口
例:
import java.io.Serializable; public class Test implements Serializable { //一些屬性 ....... }
代碼:
實體類:
public class Entity { private String id; ..... //用來存儲序列化后的對象 private byte[] blob; //get和set方法 ...... }
寫數據庫:將字節數組寫進數據庫,博主在mysql數據庫創建相關字段時使用的是Blob類型。
public void writeMysql(Object object) { byte[] bytes = new byte[0]; try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { ObjectOutputStream outputStream = new ObjectOutputStream(byteArrayOutputStream); outputStream.writeObject(object); bytes = byteArrayOutputStream.toByteArray(); } catch (Exception e) { e.printStackTrace(); } //下面寫數據庫 。。。。。。 }
讀數據庫:從數據庫中讀取blob類型數據,然后使用ObjectInputStream將對象反序列化
public void readMysql(Object object) { // 從數據庫中查詢出結果 Object mysqlobject = 從數據查詢出來的結果; byte[] bytes = (byte[])從mysqlobject中取出存儲的序列化對象 ObjectInputStream inputStream = null; inputStream = new ObjectInputStream(new ByteArrayInputStream(bytes)); Object object3 = inputStream.readObject(); //object3就是存儲之前的對象,接下來可以對object3強制轉換為存儲之前的類型,進行其他操作 。。。。。。。 }