日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

bat 存储过程返回值_使用Mybatis过程中遇到的坑

發(fā)布時(shí)間:2025/3/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bat 存储过程返回值_使用Mybatis过程中遇到的坑 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

常規(guī)SSM框架開(kāi)發(fā)中,mybatis遇到的坑是最多的,把以下幾點(diǎn)坑記錄下來(lái)防止以后再遇到同樣的情況。

1、mybatis 若果在mapper中返回值沒(méi)有配置resultMap而是使用resultType直接返回的話,那么當(dāng)心默認(rèn)配置中的駝峰匹配規(guī)則,參考以下配置文件。該情況適用于bean屬性字段和數(shù)據(jù)庫(kù)完全一致且字段名帶有下劃線如(user_menu)這樣的字段時(shí)

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><settings><setting name="callSettersOnNulls" value="true"/><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="true"/><setting name="multipleResultSetsEnabled" value="true"/><setting name="useColumnLabel" value="false"/><setting name="useGeneratedKeys" value="false"/><setting name="autoMappingBehavior" value="PARTIAL"/><setting name="defaultExecutorType" value="SIMPLE"/><!-- 禁用掉駝峰規(guī)則,不然實(shí)體類(lèi)帶下劃線的都匹配不上 --><setting name="mapUnderscoreToCamelCase" value="false"/><setting name="localCacheScope" value="SESSION"/><setting name="jdbcTypeForNull" value="NULL"/><setting name="autoMappingUnknownColumnBehavior" value="FAILING"/><!--自定義日志類(lèi)--><setting name="logImpl" value="main.com.log.MyBatisLogImpl" /> </settings><typeAliases><typeAlias alias="Integer" type="java.lang.Integer"/><typeAlias alias="Long" type="java.lang.Long"/><typeAlias alias="String" type="java.lang.String"/><typeAlias alias="HashMap" type="java.util.HashMap"/><typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap"/><typeAlias alias="ArrayList" type="java.util.ArrayList"/><typeAlias alias="LinkedList" type="java.util.LinkedList"/><!-- 自定義實(shí)體類(lèi) --></typeAliases> </configuration>

2、mybatis想要打印sql,如果按照常規(guī)配置是無(wú)法打印的,

如果這樣配置,sql可以打印,但是無(wú)法進(jìn)入文件。

<setting name="logImpl" value="STDOUT_LOGGING " />

或者

<setting name="logImpl" value="SLF4J" />

但是有時(shí)候會(huì)失效

因?yàn)楸救耸褂胠ogback做日志管理,因此也無(wú)法用log4j來(lái)實(shí)現(xiàn)sql的打印。

這時(shí)候就需要重寫(xiě)log打印功能

@Component

mybatis 配置

<setting name="logImpl" value="xx.xx.MyBatisLogImpl" />

3、有的時(shí)候mybatis需要調(diào)用oracle存儲(chǔ)過(guò)程,而這個(gè)存儲(chǔ)過(guò)程的參數(shù)還是一個(gè)自定義的oracle類(lèi)型。

private

這里要注意:1、oracle的自定義類(lèi)型和自定義列表必須是全局的,不能是pkg里面的,否則不識(shí)別。

2、本人沒(méi)有找到使用Mybatis的自定義typeHandler來(lái)進(jìn)行參數(shù)拼接方案,尤其是跨用戶(hù)執(zhí)行存儲(chǔ)過(guò)程的時(shí) 候,使用typeHandler往往是匹配不上的,他會(huì)莫名其妙把你JDBC的用戶(hù)名給帶上去,所以我暫定的方案是直接拿連接池里面的連接直接操作數(shù)據(jù)庫(kù)。

4、JDBC連接池拿到的連接有的時(shí)候需要轉(zhuǎn)成oracle的connection或者mysql的connection,如果你直接close轉(zhuǎn)換之后的連接實(shí)例是沒(méi)用的,因?yàn)閿?shù)據(jù)連接池的連接并沒(méi)有關(guān)閉掉,而且調(diào)用連接池連接的關(guān)閉方法也不是真的關(guān)閉,而是放回至連接池中,所以如果要做轉(zhuǎn)換,記得分兩步,拿到連接池連接實(shí)例,操作完之后記得close掉。

5、這個(gè)相對(duì)大頭一些,有的時(shí)候(通常是連oracle這種數(shù)據(jù)庫(kù)),我們要導(dǎo)出大量數(shù)據(jù)到excel,如果數(shù)據(jù)量比較大,比如大概3、4 十萬(wàn)行,每行100多列的這種情況。

如果用常規(guī)的導(dǎo)出辦法,也就是查到list中再傳入poi進(jìn)行處理,是會(huì)報(bào)堆溢出的,很明顯list里面放那么多數(shù)據(jù)根本就放不下。那解決辦法就是邊查邊導(dǎo),這時(shí)候需要重寫(xiě)ResultHandler,按照自定義返回值處理的方式進(jìn)行處理。

個(gè)人解決方案是,在service方法中寫(xiě)一個(gè)方法域內(nèi)的全局list,逐條插入數(shù)據(jù),當(dāng)list.size()達(dá)到500的時(shí)候,將里面的數(shù)據(jù)用poi導(dǎo)到文檔,清空l(shuí)ist。往復(fù)循環(huán),直到數(shù)據(jù)全部被插入到excel為止。

這里poi有幾個(gè)特定的配置強(qiáng)調(diào)一下:

1、final SXSSFWorkbook sbook = new SXSSFWorkbook(100);

workboox實(shí)例要用SXSSFWorkbook初始化,常規(guī)的最大行數(shù)就到Integer.MAX_VALUE (65535)了,超過(guò)就溢出。

構(gòu)造方法參數(shù)是內(nèi)存緩存100條,超過(guò)就寫(xiě)入臨時(shí)文件了,如果列超級(jí)多的話建議設(shè)置小點(diǎn)兒,但是不能不設(shè)置,不設(shè)置就是不限制了。

2、sbook.setCompressTempFiles(true); //要開(kāi)啟寫(xiě)入臨時(shí)文件這個(gè)功能。

以上就是Mybatis遇到的幾個(gè)比較大的坑,小來(lái)小去的錯(cuò)誤就不在這寫(xiě)了,當(dāng)然也可能有一些更大的坑被遺漏掉了,以后再慢慢撿吧。其實(shí)mybatis的本質(zhì)就是一個(gè)常規(guī)JDBC的封裝,添加了很多易用性的功能,它既是一個(gè)框架也可以算作一種規(guī)范了,不過(guò)不要被它限制死了,要學(xué)會(huì)使用它而不是被它使用。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的bat 存储过程返回值_使用Mybatis过程中遇到的坑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。