Java postgresql數(shù)組字段類型處理方法詳解
在實(shí)際開(kāi)發(fā)中遇到postgresql中定義的數(shù)組字段,下面解決兩個(gè)問(wèn)題,如何定義數(shù)組字段的默認(rèn)值為空格數(shù)組,以及如何再java實(shí)體類中直接使用數(shù)組對(duì)象接受數(shù)據(jù)或把數(shù)據(jù)存入數(shù)據(jù)庫(kù)。
1.在postgresql中定義數(shù)組對(duì)象及默認(rèn)值
以字符串你數(shù)組為例:
比如一個(gè)字段用于存儲(chǔ)多張圖片的url,可以使用一下sql定義
pictures _varchar NOT NUll default ARRAY[]::character varying[]
2.實(shí)體類存入數(shù)組到數(shù)據(jù)庫(kù)并接受數(shù)據(jù)庫(kù)的數(shù)組數(shù)據(jù)
直接定義數(shù)組字段并無(wú)法實(shí)現(xiàn)數(shù)據(jù)存入和接受。還需要一個(gè)typeHandler。這個(gè)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一般放在項(xiàng)目的config目錄下。
實(shí)體類的定義如下:
@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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java排查一個(gè)線上死循環(huán)cpu暴漲的過(guò)程分析
這篇文章主要介紹了java排查一個(gè)線上死循環(huán)cpu暴漲的過(guò)程分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08mybatis實(shí)體類字段大小寫(xiě)及字段獲取不到值問(wèn)題
這篇文章主要介紹了mybatis實(shí)體類字段大小寫(xiě)及字段獲取不到值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java基于Scanner對(duì)象的簡(jiǎn)單輸入計(jì)算功能示例
這篇文章主要介紹了Java基于Scanner對(duì)象的簡(jiǎn)單輸入計(jì)算功能,結(jié)合實(shí)例形式分析了Java使用Scanner對(duì)象獲取用戶輸入半徑值計(jì)算圓形面積功能,需要的朋友可以參考下2018-01-01springboot vue完成編輯頁(yè)面發(fā)送接口請(qǐng)求功能
這篇文章主要為大家介紹了springboot+vue完成編輯頁(yè)發(fā)送接口請(qǐng)求功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05如何去除Java中List集合中的重復(fù)數(shù)據(jù)
這篇文章主要介紹了Java中List集合去除重復(fù)數(shù)據(jù)的方法,對(duì)大家的工作或?qū)W習(xí)有一定價(jià)值,有需求的朋友可以參考下2020-05-05