Java postgresql數(shù)組字段類型處理方法詳解
在實際開發(fā)中遇到postgresql中定義的數(shù)組字段,下面解決兩個問題,如何定義數(shù)組字段的默認值為空格數(shù)組,以及如何再java實體類中直接使用數(shù)組對象接受數(shù)據(jù)或把數(shù)據(jù)存入數(shù)據(jù)庫。
1.在postgresql中定義數(shù)組對象及默認值
以字符串你數(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ù)組和字符串數(shù)組不一樣,下面以字符串數(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實現(xiàn)elasticsearch 查詢操作(RestHighLevelClient 
這篇文章主要給大家介紹了SpringBoot如何實現(xiàn)elasticsearch 查詢操作,文中有詳細的代碼示例和操作流程,具有一定的參考價值,需要的朋友可以參考下2023-07-07
詳解基于java的Socket聊天程序——初始設(shè)計(附demo)
本篇文章主要介紹了Socket聊天程序——初始設(shè)計(附demo),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12

