Java postgresql數(shù)組字段類型處理方法詳解
在實際開發(fā)中遇到postgresql中定義的數(shù)組字段,下面解決兩個問題,如何定義數(shù)組字段的默認(rèn)值為空格數(shù)組,以及如何再java實體類中直接使用數(shù)組對象接受數(shù)據(jù)或把數(shù)據(jù)存入數(shù)據(jù)庫。
1.在postgresql中定義數(shù)組對象及默認(rèn)值
以字符串你數(shù)組為例:
比如一個字段用于存儲多張圖片的url,可以使用一下sql定義
pictures _varchar NOT NUll default ARRAY[]::character varying[]
2.實體類存入數(shù)組到數(shù)據(jù)庫并接受數(shù)據(jù)庫的數(shù)組數(shù)據(jù)
直接定義數(shù)組字段并無法實現(xiàn)數(shù)據(jù)存入和接受。還需要一個typeHandler。這個typeHandler是自定的,而且整型數(shù)組和字符串?dāng)?shù)組不一樣,下面以字符串?dāng)?shù)組為例。
typeHandler類如下:
import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.*; import java.util.List; public class StringListArrayTypeHandler extends BaseTypeHandler<List<String>> { @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, List<String> strings, JdbcType jdbcType) throws SQLException { if (strings != null) { Array array = preparedStatement.getConnection().createArrayOf(JdbcType.VARCHAR.name(), strings.toArray(new String[0])); preparedStatement.setArray(i, array); } } @Override public List<String> getNullableResult(ResultSet resultSet, String s) throws SQLException { Array array = resultSet.getArray(s); if (array == null) { return null; } String[] result = (String[]) array.getArray(); array.free(); return List.of(result); } @Override public List<String> getNullableResult(ResultSet resultSet, int i) throws SQLException { Array array = resultSet.getArray(i); if (array == null) { return null; } String[] result = (String[]) array.getArray(); array.free(); return List.of(result); } @Override public List<String> getNullableResult(CallableStatement callableStatement, int i) throws SQLException { Array array = callableStatement.getArray(i); if (array == null) { return null; } String[] result = (String[]) array.getArray(); array.free(); return List.of(result); } }
typeHandler一般放在項目的config目錄下。
實體類的定義如下:
@TableName(autoResultMap = true) public class Entity implements Serializable { private static final long serialVersionUID = 1L; @TableId(type = IdType.AUTO) private Long id; private String code; private String name; /** * 圖片 */ @TableField(typeHandler = StringListArrayTypeHandler.class) private List<String> pictures; }
注意注解@TableName(autoResultMap = true)也要加上。
附加整型數(shù)組的typeHandler:
import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.*; import java.util.Collections; import java.util.List; public class IntegerListArrayTypeHandler extends BaseTypeHandler<List<Integer>> { @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, List<Integer> integers, JdbcType jdbcType) throws SQLException { if (integers != null) { Array array = preparedStatement.getConnection().createArrayOf(JdbcType.INTEGER.name(), integers.toArray(new Integer[0])); preparedStatement.setArray(i, array); } } @Override public List<Integer> getNullableResult(ResultSet resultSet, String s) throws SQLException { Array array = resultSet.getArray(s); if (array == null) { return null; } Integer[] result = (Integer[]) array.getArray(); array.free(); return List.of(result); } @Override public List<Integer> getNullableResult(ResultSet resultSet, int i) throws SQLException { Array array = resultSet.getArray(i); if (array == null) { return null; } Integer[] result = (Integer[]) array.getArray(); array.free(); return List.of(result); } @Override public List<Integer> getNullableResult(CallableStatement callableStatement, int i) throws SQLException { Array array = callableStatement.getArray(i); if (array == null) { return null; } Integer[] result = (Integer[]) array.getArray(); array.free(); return List.of(result); } }
到此這篇關(guān)于Java postgresql數(shù)組字段類型處理方法詳解的文章就介紹到這了,更多相關(guān)Java postgresql內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot vue完成編輯頁面發(fā)送接口請求功能
這篇文章主要為大家介紹了springboot+vue完成編輯頁發(fā)送接口請求功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05如何去除Java中List集合中的重復(fù)數(shù)據(jù)
這篇文章主要介紹了Java中List集合去除重復(fù)數(shù)據(jù)的方法,對大家的工作或?qū)W習(xí)有一定價值,有需求的朋友可以參考下2020-05-05