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

使用mybatis的typeHandler對clob進行流讀寫方式

 更新時間:2022年01月13日 15:29:02   作者:網(wǎng)速20M  
這篇文章主要介紹了使用mybatis的typeHandler對clob進行流讀寫方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

typeHandler對clob進行流讀寫

分為三步:

第一步:編寫typehandler文件

package com.dcits.edps.common.utils; 
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.springframework.util.FileCopyUtils;
 
/** 
 * <p>標題:處理Clob字段</p>
 * <p>描述:使用流對Clob字段進行讀寫</p>
 * <p>編譯者:zt</p>
 * <p>版本:1.0</p>
 */
 @MappedTypes({String.class})
 @MappedJdbcTypes({JdbcType.CLOB})
 public class OscarClobTypeHandler extends BaseTypeHandler<String> {
	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)
			throws SQLException {
		final StringReader sr = new StringReader(parameter);
		final int length = parameter.getBytes().length;
		ps.setCharacterStream(i, sr, length);
		sr.close();		
	}
 
	@Override
	public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
		final OutputStream outPutStream = new ByteArrayOutputStream();
		final Writer writer = new OutputStreamWriter(outPutStream);
		try {
			Reader reader = rs.getCharacterStream(columnName);
			if(null == reader){
				return null;
			}else {
				FileCopyUtils.copy(reader, writer);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return outPutStream.toString();
	}
 
	@Override
	public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		final OutputStream outPutStream = new ByteArrayOutputStream();
		final Writer writer = new OutputStreamWriter(outPutStream);
		try {
			Reader reader = rs.getCharacterStream(columnIndex);
			if(null == reader){
				return null;
			}else {
				FileCopyUtils.copy(reader, writer);
			} 
		}catch (IOException e) {
			e.printStackTrace();
		}
		return outPutStream.toString();
	}
 
	@Override
	public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		final OutputStream outPutStream = new ByteArrayOutputStream();
		final Writer writer = new OutputStreamWriter(outPutStream);
		try {
			Reader reader = cs.getCharacterStream(columnIndex);
			if(null == reader){
				return null;
			}else {
				FileCopyUtils.copy(reader, writer);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return outPutStream.toString();
	} 
 }
 

第二步:在mybatis的配置文件中添加<typeHandlers>節(jié)點

需要注意的是,mybatisd的配置文件中的<configuration>節(jié)點中的子節(jié)點需要有順序

順序為:properties—>settings—>typeAliases—>typeHandlers—>objectFactory—>objectWrapperFactory—>plugins—>environments—>databaseIdProvider—>mappers。

<typeHandlers>?
? ?<typeHandler handler="com.dcits.edps.common.utils.OscarClobTypeHandler"/>?
</typeHandlers>

第三步

①在resultMap中需要添加jdbcType,這是在讀取時使用了流,如下所示

?<resultMap type="com.dcits.edps.swgl.common.bean.SwMain" id="swmain">
? ? ? <result property="fsfh" column="fsfh" jdbcType="CLOB"/>
? </resultMap>

② 在寫入數(shù)據(jù)的時候使用:

fsfh=#{fsfh,jdbcType=CLOB}

mybatis處理clob字段

1.由于數(shù)據(jù)庫中 ggnr 字段是clob 類型(可以存儲流對象),所以后臺對前臺傳遞的長文本進行處理。

2.經(jīng)過一番查找,找到mybatis處理clob字段的方法,對clob 進行了嘗試處理,發(fā)現(xiàn)存的數(shù)據(jù)長度超過一兩百,數(shù)據(jù)庫該字段就為空,存的短可以。

3.經(jīng)過查閱跟公司同事溝通,總結(jié)兩種方案:(1).直接獲取數(shù)據(jù)庫連接,操作預編譯對象(老方法,高并發(fā)數(shù)據(jù)庫容易卡死,不符)。(2).sql使用 begin end 方法(經(jīng)測試可以存儲字節(jié)4000以內(nèi)的數(shù)據(jù),要求不符)

4.好吧再次查閱jdbc官方文檔,上邊提到ojdbc 存在數(shù)據(jù)限制情況,建議高版本,然后就換了ojdbc6 問題解決。

換了之后,ok。如果有懶加載,添加上這個 cglib-nodep-3.2.4.jar

附上Mapper處理:

1.修改Mapper.xml

? <result column="GGNR" property="ggnr" ?javaType="java.lang.String" jdbcType="CLOB" typeHandler="org.apache.ibatis.type.ClobTypeHandler"/>

2.sql

?? ?insert into CQGG(ggnr) values(#{ggnr,jdbcType=CLOB})

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

相關(guān)文章

  • 詳解Spring boot操作文件的多種方式

    詳解Spring boot操作文件的多種方式

    這篇文章主要介紹了Spring boot操作文件的幾種方式,主要給大家介紹操作文件的三種方式,每種方式通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • java SSLContext創(chuàng)建方式

    java SSLContext創(chuàng)建方式

    這篇文章主要介紹了java SSLContext創(chuàng)建方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java設(shè)計模式中的七大原則詳細講解

    Java設(shè)計模式中的七大原則詳細講解

    本篇文章主要對Java中的設(shè)計模式如,創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式以及7大原則進行了歸納整理,需要的朋友可以參考下,希望能給你帶來幫助
    2023-02-02
  • maven中心倉庫OSSRH使用簡介(推薦)

    maven中心倉庫OSSRH使用簡介(推薦)

    這篇文章主要介紹了maven中心倉庫OSSRH使用簡介,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • springboot調(diào)用HTML文件注意事項及說明

    springboot調(diào)用HTML文件注意事項及說明

    這篇文章主要介紹了springboot調(diào)用HTML文件注意事項及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • spring通過導入jar包和配置xml文件啟動的步驟詳解

    spring通過導入jar包和配置xml文件啟動的步驟詳解

    這篇文章主要介紹了spring通過導入jar包和配置xml文件啟動,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java順序查找算法詳解

    Java順序查找算法詳解

    順序查找又稱線性查找,主要用于在線性表中進行查找。順序查找通常分為對一般的無序線性表的順序查找和對按關(guān)鍵字有序的順序表的順序查找,下面我們來一探究竟
    2022-08-08
  • Java多線程繼承Thread類詳解

    Java多線程繼承Thread類詳解

    Java多線程的兩種實現(xiàn)方式:繼承Thread類 & 實現(xiàn)Runable接口,今天我們來學習下繼承Thread類,希望大家能夠喜歡
    2016-06-06
  • 詳解Java實踐之抽象工廠模式

    詳解Java實踐之抽象工廠模式

    抽象工廠模式用于產(chǎn)品族的構(gòu)建。抽象工廠是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠是指當有多個抽象角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產(chǎn)品的具體情況下,創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象
    2021-06-06
  • Log4j定時打印日志及添加模塊名配置的Java代碼實例

    Log4j定時打印日志及添加模塊名配置的Java代碼實例

    這篇文章主要介紹了Log4j定時打印日志及添加模塊名配置的Java代碼實例,Log4j是Apache的一個開源Java日志項目,需要的朋友可以參考下
    2016-01-01

最新評論

高唐县| 方山县| 阿荣旗| 镇宁| 田阳县| 乌审旗| 淳安县| 城市| 射阳县| 麦盖提县| 岳阳市| 当阳市| 驻马店市| 醴陵市| 阆中市| 靖边县| 伊宁县| 民丰县| 沾化县| 克拉玛依市| 高碑店市| 南汇区| 门头沟区| 墨江| 南澳县| 修武县| 高陵县| 茶陵县| 桓仁| 镇坪县| 邯郸市| 内江市| 鄂托克前旗| 伽师县| 龙川县| 襄垣县| 茶陵县| 阳江市| 上蔡县| 曲松县| 河曲县|