Java postgresql數(shù)組字段類(lèi)型處理方法詳解
在實(shí)際開(kāi)發(fā)中遇到postgresql中定義的數(shù)組字段,下面解決兩個(gè)問(wèn)題,如何定義數(shù)組字段的默認(rèn)值為空格數(shù)組,以及如何再java實(shí)體類(lèi)中直接使用數(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í)體類(lèi)存入數(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類(lèi)如下:
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í)體類(lèi)的定義如下:
@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ù)組字段類(lèi)型處理方法詳解的文章就介紹到這了,更多相關(guān)Java postgresql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring打包jar包時(shí)jsp頁(yè)面無(wú)法訪問(wèn)問(wèn)題解決
這篇文章主要介紹了Spring打包jar包時(shí)jsp頁(yè)面無(wú)法訪問(wèn)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
SpringBoot實(shí)現(xiàn)elasticsearch 查詢(xún)操作(RestHighLevelClient 
這篇文章主要給大家介紹了SpringBoot如何實(shí)現(xiàn)elasticsearch 查詢(xún)操作,文中有詳細(xì)的代碼示例和操作流程,具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07
詳解基于java的Socket聊天程序——初始設(shè)計(jì)(附demo)
本篇文章主要介紹了Socket聊天程序——初始設(shè)計(jì)(附demo),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
Spark網(wǎng)站日志過(guò)濾分析實(shí)例講解
這篇文章主要介紹了Spark網(wǎng)站日志過(guò)濾分析實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02
如何發(fā)布jar包到maven中央倉(cāng)庫(kù)
這篇文章主要介紹了發(fā)布jar包到maven中央倉(cāng)庫(kù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12

