最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java?mybatis如何操作postgresql?array數組類型

 更新時間:2022年01月18日 16:46:28   作者:libraryhu  
這篇文章主要介紹了java?mybatis如何操作postgresql?array數組類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

找了半天沒有找到postgresql中關于array數組類型的字段如何對應到java中的數據類型,后來找到了mybatis的TypeHandler,只要實現一個自定義的TypeHandler就行了,如下,

我定義了幾個基礎數據類型的數組

public class ArrayTypeHandler extends BaseTypeHandler<Object[]> {
    private static final String TYPE_NAME_VARCHAR = "varchar";
    private static final String TYPE_NAME_INTEGER = "integer";
    private static final String TYPE_NAME_BOOLEAN = "boolean";
    private static final String TYPE_NAME_NUMERIC = "numeric";
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object[] parameter, JdbcType jdbcType) throws SQLException {
        String typeName = null;
        if (parameter instanceof Integer[]) {
            typeName = TYPE_NAME_INTEGER;
        } else if (parameter instanceof String[]) {
            typeName = TYPE_NAME_VARCHAR;
        } else if (parameter instanceof Boolean[]) {
            typeName = TYPE_NAME_BOOLEAN;
        } else if (parameter instanceof Double[]) {
            typeName = TYPE_NAME_NUMERIC;
        }
        if (typeName == null) {
            throw new TypeException("ArrayTypeHandler parameter typeName error, your type is " + parameter.getClass().getName());
        }
        // 這3行是關鍵的代碼,創(chuàng)建Array,然后ps.setArray(i, array)就可以了
        Connection conn = ps.getConnection();
        Array array = conn.createArrayOf(typeName, parameter);
        ps.setArray(i, array);
    }
    @Override
    public Object[] getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return getArray(resultSet.getArray(s));
    }
    @Override
    public Object[] getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return getArray(resultSet.getArray(i));
    }
    @Override
    public Object[] getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return getArray(callableStatement.getArray(i));
    }
    private Object[] getArray(Array array) {
        if (array == null) {
            return null;
        }
        try {
            return (Object[]) array.getArray();
        } catch (Exception e) {
        }
        return null;
    }
}

然后在實體類里面對應的字段配置這個轉換器就行,如果是配置文件需要在 xxmap.xml中配置對應屬性

@ColumnType(typeHandler = com.mvc.typehandler.ArrayTypeHandler.class)
private String[] cities; //所操作的城市code列表,為空表示所有城市
@ColumnType(typeHandler = com.mvc.typehandler.ArrayTypeHandler.class)
private String[] areaTypes; //操作的行業(yè)類型code列表,為空表示所有行業(yè)
@ColumnType(typeHandler = com.jmtool.mvc.typehandler.ArrayTypeHandler.class)
private Integer[] targetStatus; //操作的目標數據狀態(tài)

java mybatis操作 postgresql array數組類型備忘

postgrey sql數據庫字段類型varchar[],java使用String[]類型,自定義ArrayTypeHandler

ArrayTypeHandler.java

public class ArrayTypeHandler extends BaseTypeHandler<Object[]> {
    private static final String TYPE_NAME_VARCHAR = "varchar";
    private static final String TYPE_NAME_INTEGER = "integer";
    private static final String TYPE_NAME_BOOLEAN = "boolean";
    private static final String TYPE_NAME_NUMERIC = "numeric";
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object[] parameter, JdbcType jdbcType) throws SQLException {
        String typeName = null;
        if (parameter instanceof Integer[]) {
            typeName = TYPE_NAME_INTEGER;
        } else if (parameter instanceof String[]) {
            typeName = TYPE_NAME_VARCHAR;
        } else if (parameter instanceof Boolean[]) {
            typeName = TYPE_NAME_BOOLEAN;
        } else if (parameter instanceof Double[]) {
            typeName = TYPE_NAME_NUMERIC;
        }
        if (typeName == null) {
            throw new TypeException("ArrayTypeHandler parameter typeName error, your type is " + parameter.getClass().getName());
        }
        // 這3行是關鍵的代碼,創(chuàng)建Array,然后ps.setArray(i, array)就可以了
        Connection conn = ps.getConnection();
        Array array = conn.createArrayOf(typeName, parameter);
        ps.setArray(i, array);
    }
    @Override
    public Object[] getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return getArray(resultSet.getArray(s));
    }
    @Override
    public Object[] getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return getArray(resultSet.getArray(i));
    }
    @Override
    public Object[] getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return getArray(callableStatement.getArray(i));
    }
    private Object[] getArray(Array array) {
        if (array == null) {
            return null;
        }
        try {
            return (Object[]) array.getArray();
        } catch (Exception e) {
        }
        return null;
    }
}

配置文件中映射配置,增加typeHandler屬性,填寫ArrayTypeHandler.java的全路徑。

<result column="source_type" jdbcType="ARRAY" property="sourceType" typeHandler="com.wang.common.ArrayTypeHandler" />

用到的SQL:

<insert id="insert" parameterType="com.wang.pojo.Qzf">
?? ?insert into t_qz_qzf(id,source_type)
?? ?values
?? ?(#{id,jdbcType=VARCHAR},#{sourceType,jdbcType=ARRAY,typeHandler="com.wang.common.ArrayTypeHandler"})
</insert>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot整合RabbitMQ及原理

    SpringBoot整合RabbitMQ及原理

    這篇文章主要介紹了SpringBoot整合RabbitMQ及其原理分析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • SpringMVC Mybatis配置多個數據源并切換代碼詳解

    SpringMVC Mybatis配置多個數據源并切換代碼詳解

    這篇文章主要介紹了SpringMVC Mybatis配置多個數據源并切換代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Mac下安裝配置Maven并在IDEA中配置的詳細教程

    Mac下安裝配置Maven并在IDEA中配置的詳細教程

    這篇文章主要介紹了Mac下安裝配置Maven并在IDEA中配置,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Spring使用@Autowired注解實現自動裝配方式

    Spring使用@Autowired注解實現自動裝配方式

    這篇文章主要介紹了Spring使用@Autowired注解實現自動裝配方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java線程同步及實現方法詳解

    Java線程同步及實現方法詳解

    這篇文章主要介紹了Java線程同步及實現方法詳解,當我們有多個線程要同時訪問一個變量或對象時,如果這些線程中既有讀又有寫操作時,就會導致變量值或對象的狀態(tài)出現混亂,從而導致程序異常,需要的朋友可以參考下
    2023-11-11
  • SpringBoot各種參數校驗的實例教程

    SpringBoot各種參數校驗的實例教程

    經常需要提供接口與用戶交互(獲取數據、上傳數據等),由于這個過程需要用戶進行相關的操作,為了避免出現一些錯誤的數據等,一般需要對數據進行校驗,下面這篇文章主要給大家介紹了關于SpringBoot各種參數校驗的相關資料,需要的朋友可以參考下
    2022-03-03
  • Spring循環(huán)依賴的三種方式(推薦)

    Spring循環(huán)依賴的三種方式(推薦)

    本篇文章主要介紹了Spring循環(huán)依賴的三種方式,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java復制(拷貝)數組的五種方法匯總

    Java復制(拷貝)數組的五種方法匯總

    java基礎在Java中我們經常需要復制一個數組,下面這篇文章主要給大家介紹了關于Java復制(拷貝)數組的五種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • springboot?整合表達式計算引擎?Aviator?使用示例詳解

    springboot?整合表達式計算引擎?Aviator?使用示例詳解

    本文詳細介紹了Google?Aviator?這款高性能、輕量級的?Java?表達式求值引擎,并通過詳細的代碼操作演示了相關API的使用以及如何在springboot項目中進行集成,感興趣的朋友一起看看吧
    2024-08-08
  • 教你bat腳本一鍵配置java開發(fā)環(huán)境

    教你bat腳本一鍵配置java開發(fā)環(huán)境

    公司新入職一名員工,項目經理讓我安排新人工作,首先需要對java開發(fā)相關環(huán)境進行配置安裝,但時常會因為安裝配置不到位或者操作錯誤導致時間的浪費,所以在空余時間收集了一系列軟件的免安裝版本,感興趣的朋友一起看看吧
    2021-12-12

最新評論

平舆县| 邢台市| 呼图壁县| 化州市| 荔浦县| 延津县| 南丹县| 赫章县| 溧水县| 绵竹市| 航空| 黄平县| 平陆县| 墨竹工卡县| 五峰| 会东县| 正安县| 师宗县| 沙雅县| 文成县| 布尔津县| 于田县| 大宁县| 沛县| 兴和县| 和田县| 托里县| 原平市| 思茅市| 宜昌市| 十堰市| 澎湖县| 黄陵县| 灵武市| 榆林市| 唐河县| 安多县| 建湖县| 花莲县| 和平区| 卢湾区|