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

關(guān)于Mybatis插入對(duì)象時(shí)空值的處理

 更新時(shí)間:2022年06月22日 09:53:15   作者:梧桐zhbh  
這篇文章主要介紹了關(guān)于Mybatis插入對(duì)象時(shí)空值的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis插入對(duì)象時(shí)空值

Mybatis中經(jīng)常會(huì)有插入數(shù)據(jù)的情景,有時(shí)傳輸?shù)膶?duì)象字段并不是完整的,如果不做任何處理則會(huì)拋出異常,影響程序執(zhí)行。

如存在對(duì)象賦值不完整的情況可以在字段后添加 jdbcType  如:

INSERT INTO student(`uid`,`name`,`class`) VALUES(#{uid,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR},#{class,jdbcType=VARCHAR})

然后再 mybatis-config.xml  中添加配置

<settings>
?? ?<setting name="jdbcTypeForNull" value="NULL" /> ?
</settings>

如若是其它類型也可使用 <if>   標(biāo)簽

<if test="otherType != null and otherType!= ''" >
? ? otherType = #{otherType}
</if>

這樣在數(shù)據(jù)庫(kù)未做限制時(shí),就不會(huì)影響到數(shù)據(jù)的添加或修改。

需要注意的點(diǎn)MyBatis插入空值時(shí),需要指定JdbcType

前天遇到一個(gè)問(wèn)題 異常顯示如下: 

Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #6 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 無(wú)效的列類型: 1111 
; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 無(wú)效的列類型: 1111; nested exception is java.sql.SQLException: 無(wú)效的列類型: 1111

對(duì)應(yīng)的sqlmap如下: 

<insert id="insertCustomerLog" parameterType="map"> ?
? ? ? insert into customer_log ?
? ? ? ( ?
? ? ? ID, ?
? ? ? CUSTOMER_SERVICE_USER_NAME, ?
? ? ? user_name, ?
? ? ? CONTENT, ?
? ? ? LOG_FIRST_TYPE, ?
? ? ? STATUS, ?
? ? ? LINKED_ID, ?
? ? ? FEE, ?
? ? ? ACCOUNT_FIRST_TYPE, ?
? ? ? ACCOUNT_SECOND_TYPE, ?
? ? ? ACCOUNT_THIRD_TYPE, ?
? ? ? LOG_SECOND_TYPE, ?
? ? ? LOG_IP, ?
? ? ? MEMO ?
? ? ? ) ?
? ? ? values ?
? ? ? ( ?
? ? ? ? ? ? ?seq_customer_log.nextval , ?
? ? ? ? ? ? #{customerServiceUserName} , ?
? ? ? ? ? ? #{username}, ?
? ? ? ? ? ? #{content}, ?
? ? ? ? ? ? #{logFirstType}, ?
? ? ? ? ? ? #{status}, ?
? ? ? ? ? ? #{linkedId}, ?
? ? ? ? ? ? #{fee}, ?
? ? ? ? ? ? #{accountFirstType}, ?
? ? ? ? ? ? #{accountSecondType}, ?
? ? ? ? ? ? #{accountThirdType}, ?
? ? ? ? ? ? #{logSecondType}, ?
? ? ? ? ? ? #{logIp}, ?
? ? ? ? ? ? #{memo} ?
? ? ? ) ?
? </insert>

查詢了一下 一些資料說(shuō)是 

MyBatis 插入空值時(shí),需要指定JdbcType ,mybatis insert空值報(bào)空值異常,但是在pl/sql不會(huì)提示錯(cuò)誤,主要原因是mybatis無(wú)法進(jìn)行轉(zhuǎn)換。

<insert id="insertCustomerLog1" parameterType="com.diyicai.customer.domain.CustomerLog"> ?
? ? ? ? insert into customer_log ?
? ? ? ? ? ? ? ?( ?
? ? ? ? ? ? ? ?ID, ?
? ? ? ? ? ? ? ?CUSTOMER_SERVICE_USER_NAME, ?
? ? ? ? ? ? ? ?user_name , ?
? ? ? ? ? ? ? ?CONTENT, ?
? ? ? ? ? ? ? ?LOG_FIRST_TYPE, ?
? ? ? ? ? ? ? ?STATUS, ?
? ? ? ? ? ? ? ?LINKED_ID, ?
? ? ? ? ? ? ? ?FEE, ?
? ? ? ? ? ? ? ?ACCOUNT_FIRST_TYPE, ?
? ? ? ? ? ? ? ?ACCOUNT_SECOND_TYPE, ?
? ? ? ? ? ? ? ?ACCOUNT_THIRD_TYPE, ?
? ? ? ? ? ? ? ?LOG_SECOND_TYPE, ?
? ? ? ? ? ? ? ?LOG_IP, ?
? ? ? ? ? ? ? ?MEMO ?
? ? ? ? ? ? ? ?) ?
? ? ? ? ? ? ? ?values ?
? ? ? ? ? ? ? ?( ?
? ? ? ? ? ? ? ?seq_customer_log.nextval , ?
? ? ? ? ? ? ? ?#{customerServiceUserName,jdbcType=VARCHAR} , ?
? ? ? ? ? ? ? ?#{username,jdbcType=VARCHAR}, ?
? ? ? ? ? ? ? ?#{content,jdbcType=VARCHAR}, ?
? ? ? ? ? ? ? ?#{logFirstType,jdbcType=NUMERIC}, ?
? ? ? ? ? ? ? ?#{status,jdbcType=NUMERIC}, ?
? ? ? ? ? ? ? ?#{linkedId,jdbcType=VARCHAR}, ?
? ? ? ? ? ? ? ?#{fee,jdbcType=NUMERIC}, ?
? ? ? ? ? ? ? ?#{accountFirstType,jdbcType=NUMERIC}, ?
? ? ? ? ? ? ? ?#{accountSecondType,jdbcType=NUMERIC}, ?
? ? ? ? ? ? ? ?#{accountThirdType,jdbcType=NUMERIC}, ?
? ? ? ? ? ? ? ?#{logSecondType,jdbcType=NUMERIC}, ?
? ? ? ? ? ? ? ?#{logIp,jdbcType=VARCHAR}, ?
? ? ? ? ? ? ? ?#{memo,jdbcType=VARCHAR} ?
? ? ? ? ? ? ? ?) ?
? ? </insert> ?

錯(cuò)誤日志是在:org.apache.ibatis.type.BaseTypeHandler這個(gè)類的第17行打出的。根據(jù)異常上面的代碼 :

if (parameter == null) { ?
? if (jdbcType == null) { ?
? try { ?
? ps.setNull(i, JdbcType.OTHER.TYPE_CODE); ?
? } catch (SQLException e) { ?
? throw new TypeException("Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: " + e, e); ?
? } ?
? } else { ?
? ps.setNull(i, jdbcType.TYPE_CODE); ?
? } ?
? } else { ?
? setNonNullParameter(ps, i, parameter, jdbcType); ?
? } ?

可以看出,是因?yàn)槟銈魅氲膮?shù)的字段為null對(duì)象無(wú)法獲取對(duì)應(yīng)的jdbcType類型,而報(bào)的錯(cuò)誤。 你只要在insert語(yǔ)句中insert的對(duì)象加上jdbcType就可以了,修改如下: #{menuTitle,jdbcType=VARCHAR} ,這樣就可以解決以上錯(cuò)誤了。 

但是,如果我們?yōu)槊總€(gè)sql都指定jdbc類型,也比較麻煩,可以mybatis-config.xml種全局設(shè)置下:

<settings>
?? ?<setting name="jdbcTypeForNull" value="NULL"/>
</settings>

另外,再補(bǔ)充一點(diǎn)資料,可能更能讓我們了解問(wèn)題的真相:

適配oracle數(shù)據(jù)庫(kù)的時(shí)候,mybatis報(bào)了Error setting null parameter,bug發(fā)現(xiàn)是參數(shù)出現(xiàn)了null值,對(duì)于Mybatis,如果進(jìn)行操作的時(shí)候,沒(méi)有指定jdbcType類型的參數(shù),就可能導(dǎo)致問(wèn)題。

postgreSQL,MySQL,SQLSERVER都支持JdbcType.NULL類型,Oracle是不支持,適配的時(shí)候也因?yàn)檫@個(gè)問(wèn)題導(dǎo)致mybatis報(bào)錯(cuò)。

比如,之前配置#{submitDate},它會(huì)在oracle中報(bào)錯(cuò):Error settingnull parameter

更改成#{submitDate,jdbcType=DATE},注意jdbcType是區(qū)分大小寫(xiě)的。

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

相關(guān)文章

  • Mybatis 條件查詢 批量增刪改查功能

    Mybatis 條件查詢 批量增刪改查功能

    這篇文章主要介紹了mybatis 腳本處理語(yǔ)句之條件查詢 批量增刪改查功能,需要的的朋友參考下吧
    2017-06-06
  • JDK-StringJoiner構(gòu)造及添加元素源碼分析

    JDK-StringJoiner構(gòu)造及添加元素源碼分析

    這篇文章主要為大家介紹了JDK-StringJoiner構(gòu)造及添加元素源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java下載Excel模板文件的簡(jiǎn)單實(shí)現(xiàn)方法

    Java下載Excel模板文件的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java下載Excel模板文件的簡(jiǎn)單實(shí)現(xiàn)方法,日常工作中可能經(jīng)常會(huì)涉及到用java開(kāi)發(fā)報(bào)表,需求比較多的就是表格類的報(bào)表導(dǎo)出,單元格合并,圖表的展現(xiàn),需要的朋友可以參考下
    2023-07-07
  • springboot實(shí)現(xiàn)添加郵件發(fā)送及壓縮功能

    springboot實(shí)現(xiàn)添加郵件發(fā)送及壓縮功能

    這篇文章主要介紹了springboot實(shí)現(xiàn)添加郵件發(fā)送及壓縮功能 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • 源碼解析帶你了解LinkedHashMap

    源碼解析帶你了解LinkedHashMap

    大多數(shù)情況下,只要不涉及線程安全問(wèn)題,Map基本都可以使用HashMap,不過(guò)HashMap有一個(gè)問(wèn)題,就是迭代HashMap的順序并不是HashMap放置的順序,也就是無(wú)序。HashMap的這一缺點(diǎn)往往會(huì)帶來(lái)困擾,所以LinkedHashMap就閃亮登場(chǎng)了,這篇文章通過(guò)源碼解析帶你了解LinkedHashMap
    2021-09-09
  • Java單機(jī)環(huán)境實(shí)現(xiàn)定時(shí)任務(wù)技術(shù)

    Java單機(jī)環(huán)境實(shí)現(xiàn)定時(shí)任務(wù)技術(shù)

    這篇文章主要介紹了Java單機(jī)環(huán)境實(shí)現(xiàn)定時(shí)任務(wù)技術(shù),文章內(nèi)容介紹詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • Java通過(guò)stmp協(xié)議發(fā)送郵件

    Java通過(guò)stmp協(xié)議發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了Java通過(guò)stmp協(xié)議發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 基于IDEA查看maven依賴結(jié)構(gòu)流程解析

    基于IDEA查看maven依賴結(jié)構(gòu)流程解析

    這篇文章主要介紹了基于IDEA查看maven依賴結(jié)構(gòu)流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot配置Spring?Security的實(shí)現(xiàn)示例

    SpringBoot配置Spring?Security的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot配置Spring?Security的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • java文件上傳下載代碼實(shí)例

    java文件上傳下載代碼實(shí)例

    這篇文章主要介紹了java文件上傳下載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論

东至县| 靖宇县| 松江区| 巩留县| 湖州市| 始兴县| 江山市| 衡山县| 康马县| 定兴县| 嫩江县| 溧水县| 紫云| 绍兴县| 尚志市| 蓝山县| 汶川县| 黎川县| 三门峡市| 布拖县| 聂荣县| 涡阳县| 通榆县| 黄大仙区| 米泉市| 玉溪市| 许昌市| 临湘市| 丰城市| 新闻| 宣威市| 望城县| 巨野县| 芜湖市| 江永县| 且末县| 揭东县| 鄂尔多斯市| 舒城县| 宣城市| 商城县|