bat 存儲過程返回值_使用Mybatis過程中遇到的坑

常規SSM框架開發中,mybatis遇到的坑是最多的,把以下幾點坑記錄下來防止以后再遇到同樣的情況。

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

<?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"/><!-- 禁用掉駝峰規則,不然實體類帶下劃線的都匹配不上 --><setting name="mapUnderscoreToCamelCase" value="false"/><setting name="localCacheScope" value="SESSION"/><setting name="jdbcTypeForNull" value="NULL"/><setting name="autoMappingUnknownColumnBehavior" value="FAILING"/><!--自定義日志類--><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"/><!-- 自定義實體類 --></typeAliases>
</configuration>

2、mybatis想要打印sql,如果按照常規配置是無法打印的,

如果這樣配置,sql可以打印,但是無法進入文件。

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

或者

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

但是有時候會失效

因為本人使用logback做日志管理,因此也無法用log4j來實現sql的打印。

這時候就需要重寫log打印功能

@Component

mybatis 配置

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

3、有的時候mybatis需要調用oracle存儲過程,而這個存儲過程的參數還是一個自定義的oracle類型。

private 

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

2、本人沒有找到使用Mybatis的自定義typeHandler來進行參數拼接方案,尤其是跨用戶執行存儲過程的時 候,使用typeHandler往往是匹配不上的,他會莫名其妙把你JDBC的用戶名給帶上去,所以我暫定的方案是直接拿連接池里面的連接直接操作數據庫。

4、JDBC連接池拿到的連接有的時候需要轉成oracle的connection或者mysql的connection,如果你直接close轉換之后的連接實例是沒用的,因為數據連接池的連接并沒有關閉掉,而且調用連接池連接的關閉方法也不是真的關閉,而是放回至連接池中,所以如果要做轉換,記得分兩步,拿到連接池連接實例,操作完之后記得close掉。

5、這個相對大頭一些,有的時候(通常是連oracle這種數據庫),我們要導出大量數據到excel,如果數據量比較大,比如大概3、4 十萬行,每行100多列的這種情況。

如果用常規的導出辦法,也就是查到list中再傳入poi進行處理,是會報堆溢出的,很明顯list里面放那么多數據根本就放不下。那解決辦法就是邊查邊導,這時候需要重寫ResultHandler,按照自定義返回值處理的方式進行處理。

個人解決方案是,在service方法中寫一個方法域內的全局list,逐條插入數據,當list.size()達到500的時候,將里面的數據用poi導到文檔,清空list。往復循環,直到數據全部被插入到excel為止。

這里poi有幾個特定的配置強調一下:

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

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

構造方法參數是內存緩存100條,超過就寫入臨時文件了,如果列超級多的話建議設置小點兒,但是不能不設置,不設置就是不限制了。

2、sbook.setCompressTempFiles(true); //要開啟寫入臨時文件這個功能。

以上就是Mybatis遇到的幾個比較大的坑,小來小去的錯誤就不在這寫了,當然也可能有一些更大的坑被遺漏掉了,以后再慢慢撿吧。其實mybatis的本質就是一個常規JDBC的封裝,添加了很多易用性的功能,它既是一個框架也可以算作一種規范了,不過不要被它限制死了,要學會使用它而不是被它使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537557.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【洛谷 P2513】 [HAOI2009]逆序對數列(DP)

題目鏈接 這種求方案數的題一般都是\(dp\)吧。 注意到范圍里\(k\)和\(n\)的范圍一樣大&#xff0c;\(k\)是完全可以更大的&#xff0c;到\(n\)的平方級別&#xff0c;所以這暗示了我們要把\(k\)寫到狀態里。\(f[i][j]\)表示前\(1\)~\(i\)的排列逆序對數為\(j\)的方案數。 現在考…

think python下載 中文版開源!這或許是最經典的編程教材

《Think Python》是很多Python初學者的不二入門教材&#xff0c;受到廣泛好評。該書原作者是美國Olin工程學院的教授Allen B. Downey&#xff0c;目前該書的原版和中文版本都已免費開源。 中文版本譯者是一名自學Python的編程愛好者。選擇翻譯《Think Python》&#xff0c;一是…

datatable的數據進行組內排序_排序算法學習分享(四)希爾排序

排序&#xff0c;也稱為排序算法&#xff0c;可以說是我們學習算法的過程中遇到的第一個門檻&#xff0c;也是實際應用中使用得較為頻繁的算法&#xff0c;我將自己對所學的排序算法進行一個歸納總結與分享&#xff0c;如有錯誤&#xff0c;歡迎指正&#xff01;排序算法學習分…

jupyter notebook 安裝代碼提示功能

效果 安裝成功后&#xff0c;輸入部分代碼&#xff0c;按 tab 鍵&#xff0c;會提示代碼 安裝步驟 1.安裝nbextensions 從國內的pip鏡像下載快 pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com jupyter_contrib_nbextensions jupyter contr…

轉:EL表達式的11個內置對象

原文地址&#xff1a;https://blog.csdn.net/qq_17045385/article/details/54799998 EL是JSP內置的表達式語言 JSP2.0開始&#xff0c;不讓再使用Java腳本&#xff0c;而是使用EL表達式和動態標簽來代替Java腳本 ############EL替代的是<%... %>&#xff0c;也就是說EL只…

python需要配置環境變量嗎_python為什么會環境變量設置不成功

學習python編程&#xff0c;首先要配置好環境變量。本文主要講解python的環境變量配置&#xff0c;在不同版本下如何安裝 Windows 打開Python官方下載網站 https://www.python.org/downloads/release/python-370/ x86:表示是32位電腦 x86-64:表示是64位電腦 目前Python版本分為…

一維數組、二維數組、三維數組、四維數組、多維數組的理解

以圖書館來舉例 一維數組是一條線 二維數組是一頁紙 三維數組是一本書 四維數組是書架 五維數組是圖書室2201&#xff08;好幾個書架&#xff09; 六維數組是圖書館某一層&#xff0c;2樓/3樓&#xff0c;好幾個圖書室 七維數組是整個圖書館 第N維數組是宇宙..................…

線性篩

我就是我&#xff0c;一輩子都學不會線性篩的菜雞 一篇非常好的博客轉載于:https://www.cnblogs.com/yzxverygood/p/9907281.html

在資源使用狀況視圖中查看資源的負荷情況

只有工時類資源才會出現過度分配&#xff0c;因為工時類資源通常指組織內部的人力資源或者機械設備等&#xff0c;這些資源通常都有數量上的瓶頸&#xff0c;也只有工時類資源才會在【資源工作表】中設置它的最大單位和資源可用性&#xff0c;這就限制了它在不同時間段內的可用…

python常用單詞自由且開放_python常用英語單詞詞匯 unit7

1. Darcula IntelliJ IDEA自帶的黑色主題名稱&#xff0c;Android Studio是基于IntelliJ IDEA的。 2. Appearance /prns/ n. 外觀&#xff1b; 3. Custom /kstm/ n. 習慣&#xff1b; 4. UI abbr. 用戶界面&#xff08;user interface&#xff09; 5.Terminate /tmnet/ 終止、結…

2018.10.29-2018.11.4

簡述osi七層模型和TCP/IP五層模型應用層OSI 參考模型中最靠近用戶的一層&#xff0c;是為計算用戶提供應用接口&#xff0c;也為用戶直接提供網絡服務。常見的應用層網絡服務協議有&#xff1a;HTTP,HTTPS,FTP,POP3,SMTP等表示層表示提供各種用于應用層數據編碼和轉換功能&…

CSV文件轉Excel后數字自動轉換成科學計數法的解決方法

CSV文件用Excel打開后&#xff0c;長度超過11位的數字自動轉換成科學計數法顯示&#xff0c;末尾數字變成“0000”&#xff0c;如何解決這一問題&#xff1f; 以“老勞模系統數據.CSV”為例&#xff0c;身份證碼是科學計數法了 第一步&#xff1a;新建excel&#xff0c;用 off…

python 小說 云_python小說網站

廣告關閉 騰訊云11.11云上盛惠 &#xff0c;精選熱門產品助力上云&#xff0c;云服務器首年88元起&#xff0c;買的越多返的越多&#xff0c;最高返5000元&#xff01; python爬蟲之小說網站--下載小說(正則表達式)思路:1. 找到要下載的小說首頁,打開網頁源代碼進行分析(例:htt…

數據庫導出到excel解決科學計數法問題

用Navicat等工具導出數據到excel的時候&#xff0c;身份證等超過11位的數字會自動轉換成科學計數法&#xff0c;末尾數字變成“0000”。如何解決&#xff1f; 解決方式&#xff1a;給超過11位的數字末尾添加 \t 查詢的時候&#xff0c;給相關字段添加 \t SELECT name,CONCAT…

6.6(java學習筆記)文件分割(IO綜合例子)

基本思路&#xff1a; 文件分割&#xff1a;將一個文件分割成若干個獨立的文件。 設置分割后小文件文件的字節數&#xff0c;然后讀取被分割文件&#xff0c; 將對應的字節數寫入分割后的小文件中。 使用seek定位下一次讀取位置。 文件合并&#xff1a;將分割后的若干的文件合并…

小米MIUI關閉內容中心通知

被MIUI的內容中心打擾了許久&#xff0c;終于找到徹底關閉它的方式。 這個內容中心&#xff0c;在應用列表里找不到卸載&#xff0c;在通知管理里也找不到&#xff0c;小米把它藏得深。 關閉內容中心通知 第一步&#xff0c;先進入內容中心&#xff0c;然后切換到后臺&#…

python編碼器_自編碼器和分類器python

展開全部 你好&#xff0c;下面是一個keras的softmax分類器自編碼器的python代碼。你需要安裝e5a48de588b662616964757a686964616f31333431343665最新的theano1.0.4才可以跑。import os; os.environ[KERAS_BACKEND] theano import keras from keras.datasets import mnist fro…

Java虛擬機-第二篇-GC算法與內存分配策略

2019獨角獸企業重金招聘Python工程師標準>>> GC引入 在Java的運行時數據區中&#xff0c;程序計數器、虛擬機棧、本地方法棧三個區域都是線程私有的&#xff0c;隨線程而生&#xff0c;隨線程而滅&#xff0c;在方法結束或線程結束時&#xff0c;內存自然就跟著回收…

python在函數內部有沒有辦法定義全局變量_主函數內部的全局變量python

你想要什么是不可能的*。你可以在全局命名空間中創建一個變量&#xff1a; myglobal "UGHWTF" def main(): global myglobal # prevents creation of a local variable called myglobal myglobal "yu0 fail it" anotherfunc() def anotherfunc(): print…

軟件項目經理應該具備的心態

我們&#xff08;項目經理&#xff09;必須認識到有些現實是無法改變的&#xff1a; 1.市場前期都會過度承諾 2.公司是要賺錢的&#xff0c;僅僅有虛名但不賺錢的事情公司是不會真正持久的 3.任何公司都是資源不足的 4.任何公司都有或多或少的管理問題&#xff0c;沒有問題…