MyBatis通过JDBC生成的执行语句问题
我们编程的过程中大部分使用了很出色的ORM框架,例如:MyBatis,Hibernate,SpringJDBC,但是这些都离不开数据驱动JDBC的支持。虽然使用起来很方便,但是碰到一些问题确实很棘手,就比如困扰我一宿没睡好觉的问题,jdbc生成执行数据,具体的我们看一下。
通常我们用MyBatis框架来操作关系型数据库,基本的也就是crud操作。目前公司使用的是SqlServer数据库,当然用的JDBC驱动版本也比较老了啊,但是我在进行更新操作的时候出现一个问题,具体情况如下:
mapper.xml内容:
<update id="updateDriverInfoByUcode" parameterType="com.sypro.earth.model.DriverInfo" >
update D_DriverInfo
<set >
<if test="driverName != null" >
DriverName = #{driverName},
</if>
</set>
<where>
Ucode=#{ucode,javaType=string,jdbcType=NVARCHAR,typeHandler=com.sypro.earth.typehandler.ExampleTypeHandler}
</where>
</update>
说明一下typeHandler=com.sypro.earth.typehandler.ExampleTypeHandler,这个是自定义的类型处理器
详细的文档可以参考:
http://www.mybatis.org/mybatis-3/zh/configuration.html
Test代码如下:
@Test
public void Test8(){
DriverInfo driverInfo=new DriverInfo();
driverInfo.setDriverName("汪小二");
driverInfo.setUcode("TY888888");
driverInfoMyMapper.updateDriverInfoByUcode(driverInfo);
}
只是根据工号更新一下司机的姓名,但是用sqlserver监控检测到的sql语句大体如下:
(@P0 nvarchar(4000),@P1 nvarchar(4000))update D_DriverInfo
SET DriverName = @P0, WHERE Ucode=@P1
当然这里我要贴一下我的数据库连接串:
jdbc\:sqlserver\://127.0.0.1;databaseName\=new;
这时候的执行计划可以看一下:
http://www.cnblogs.com/ajiangg/p/5199526.html
可以看到很慢,但是通过稍微修改一下连接字符串:
jdbc\:sqlserver\://127.0.0.1;databaseName\=new;sendStringParametersAsUnicode=false
并且使用微软jdbc4.0
然后执行一下测试代码,可以看到
(@P0 varchar(8000),@P1 nvarchar(4000))update D_DriverInfo
SET DriverName = @P0, WHERE Ucode=@P1
批量更新执行速度明显改善,至于为什么改以及改的利弊请看如下官网文档
https://technet.microsoft.com/zh-cn/library/ms378857%28SQL.90%29.aspx
https://technet.microsoft.com/zh-cn/library/ms378988%28v=sql.90%29.aspx
http://d.hatena.ne.jp/gnarl/20110706/1309945379
https://technet.microsoft.com/zh-cn/library/ms378988%28v=sql.110%29.aspx
MyBatis通过JDBC生成的执行语句问题的更多相关文章
- mybatis - 基于拦截器修改执行语句中的ResultMap映射关系
拦截器介绍 mybatis提供了@Intercepts注解允许开发者对mybatis的执行器Executor进行拦截. Executor接口方法主要有update.query.commit.rollb ...
- 动态生成SQL执行语句
SET @qry = 'SELECT product_cd, name, product_type_cd, date_offered, date_retired FROM product WHERE ...
- Springboot接口简单实现生成MySQL插入语句
Springboot接口简单实现调用接口生成MySQL插入语句 在实际测试中,有这样一个需求场景,比如:在性能压力测试中,可能需要我们事先插入数据库中一些相关联的数据. 我们在实际测试中,遇到问题,需 ...
- JDBC 操作预编译语句中LIKE模糊匹配怎么用
问题描述 在使用JDBC 预编译执行语句时,遇到一个问题,那就是在含有LIKE的查询语句时,我到底怎么使用匹配符%._呢. 如: SELECT * FROM "+LQ_USERS+" ...
- Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 (转)
众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页. ...
- LinqToDB 源码分析——生成与执行SQL语句
生成SQL语句的功能可以算是LinqToDB框架的最后一步.从上一章中我们可以知道处理完表达式树之后,相关生成SQL信息会被保存在一个叫SelectQuery类的实例.有了这个实例我们就可以生成对应的 ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- EF-记录程序自动生成并执行的sql语句日志
在EntityFramework的CodeFirst模式中,我们想将程序自动生成的sql语句和执行过程记录到日志中,方便以后查看和分析. 在EF的6.x版本中,在DbContext中有一个Databa ...
- jmert jdbc request支持执行多条sql语句并设置jdbc字符集
1.jdbc request支持执行多条sql语句 在JDBC Connection Configuration中的sql连接字串中添加如下内容 allowMultiQueries=true 如下图: ...
随机推荐
- git克隆项目到本地&&全局安装依赖项目&&安装依赖包&&启动服务
一.安装本地开发环境 1.安装本项目 在需要保存到本地的项目的文件夹,进入到文件夹里点击右键,bash here,出现下图: 2.安装依赖项目 3.安装依赖包(进入到命令行) # 安装依赖包 $ ...
- await and async
Most people have already heard about the new “async” and “await” functionality coming in Visual Stud ...
- BlockingCollection使用
BlockingCollection是一个线程安全的生产者-消费者集合. 代码 public class BlockingTest { BlockingCollection<int> bc ...
- ASP.Net MVC——使用 ITextSharp 完美解决HTML转PDF(中文也可以)
前言: 最近在做老师交代的一个在线写实验报告的小项目中,有这么个需求:把学生提交的实验报告(HTML形式)直接转成PDF,方便下载和打印. 以前都是直接用rdlc报表实现的,可这次牵扯到图片,并且更为 ...
- Android—Service与Activity的交互
service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...
- postgresql无法安装pldbgapi的问题
要对函数进行调试需要安装插件pldbgapi,当初在windows上面的postgresql实例中执行了一下语句就安装上了: create extension pldbgapi; 但是在linux中执 ...
- 使用LogMaster4Net实现应用程序日志的集中管理
日志在软件系统中的重要性我在此也不赘述了,几乎所有程序员每天都会更日志打交道. 那么你是否曾今为这样的一些事情而困扰过: - 远程登录到不同的服务器,找到应用程序目然后查看应用日志: - 来回切换于不 ...
- [DeviceOne开发]-手势动画示例分享
一.简介 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手 ...
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
- JavaScript进阶之路——认识和使用Promise,重构你的Js代码
一转眼,这2015年上半年就过去了,差不多一个月没有写博客了,"罪过罪过"啊~~.进入了七月份,也就意味着我们上半年苦逼的单身生活结束了,从此刻起,我们要打起十二分的精神,开始下半 ...