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.mzph.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;没有问题…