MyBatis通过JDBC数据驱动生成的执行语句问题_java

我们编程的过程中大部分使用了很出色的ORM框架,例如:MyBatis,Hibernate,SpringJDBC,但是这些都离不开数据驱动JDBC的支持。虽然使用起来很方便,但是碰到一些问题确实很棘手,就比如困扰我一宿没睡好觉的问题,jdbc生成执行数据,具体的我们看一下。

通常我们用MyBatis框架来操作关系型数据库,基本的也就是crud操作。目前公司使用的是SqlServer数据库,但是我在进行更新操作的时候出现一个问题,具体情况如下:

mapper.xml内容:

<update id="updateDriverInfoByUcode" parameterType="com.sypro.earth.model.DriverInfo" >
update D_DriverInfo
<set >
<if test="driverName != null" >
DriverName = #{driverName,jdbcType=NVARCHAR},
</if>
</set>
<where>
Ucode=#{ucode,javaType=string,jdbcType=VARCHAR,typeHandler=com.sypro.earth.typehandler.ExampleTypeHandler}
</where>
</update>

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.jb51.net/article/90264.htm

可以看到很慢,但是通过稍微修改一下连接字符串:

jdbc\:sqlserver\://127.0.0.1;databaseName\=new;sendStringParametersAsUnicode=false

然后执行一下测试代码,可以看到

(@P0 varchar(8000),@P1 varchar(8000))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

以上所述是小编给大家介绍的MyBatis通过JDBC数据驱动生成的执行语句问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mybatis执行语句
mybatis 生成sql语句、mybatis jdbctype、mybatis和jdbc的区别、mybatis jdbc、spring jdbc mybatis,以便于您获取更多的相关知识。

时间: 2024-09-10 08:49:06

MyBatis通过JDBC数据驱动生成的执行语句问题_java的相关文章

动态生成SQL执行语句

SET @qry = 'SELECT product_cd, name, product_type_cd, date_offered, date_retired FROM product WHERE product_cd = ?'; PREPARE dynsql2 FROM @qry; SET @prodcd = 'CHK'; EXECUTE dynsql2 USING @prodcd; SET @prodcd = 'SAV'; EXECUTE dynsql2 USING @prodcd; DE

使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句

使用Java反射(Reflect).自定义注解(Customer Annotation)生成简单SQL语句 这次给大家介绍一下在Java开发过程中 使用自定义注解开发: 主要知识点:             1.反射            主要用于提取注解信息             2.自定义异常  主要是为了自己自定义一个异常信息             3.自定义注解  本次重点 学会如何自定义注解以及如何使用反射提取注解信息运用到实际开发 下图表示在Java中注解的含义以及注解的分类和如

SQL 2008执行语句遇到内存不足(1)——error 701

原文:SQL 2008执行语句遇到内存不足(1)--error 701 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/17/sql-2008-error-701.aspx 某个特定的存储过程在SQL 2008中执行会遇到以下错误: Msg 701, Level 17, State 123, Procedure GetAllRevisions_Monthly, Line 22 There is insufficient system memo

mybatis generator 配置 反向生成Entity简单增删改查(推荐)_java

mybatis generator 配置 反向生成Entity简单增删改查实例代码如下所示: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd

SQL 2008执行语句遇到内存不足的案例(error 701)之一

SQL 2008执行语句遇到内存不足的案例(error 701)之一 某个特定的存储过程在SQL 2008中执行会遇到以下错误: Msg 701, Level 17, State 123, Procedure GetAllRevisions_Monthly, Line 22 There is insufficient system memory in resource pool 'internal' to run this query. Msg 701, Level 17, State 65,

如何使用EntityFramework 6.1的DbCommandInterceptor拦截生成的SQL语句

开始 EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以允许我们更加方便的了解到EF运行时的一些信息,当然我们最想看的还是EF生成的Sql语句,话不多讲,开始干吧; class EFIntercepterLogging : DbCommandInterceptor { private readonly Stopwatch _stopwatch = new

java中如何生成可执行的jar文件

java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$myAct ionListener.class CardLayoutDemo.class myClosingListener.class myPanel.class jar命令为java自带的专用打包工具: c代表生成新的jar包: e代表可执行的类,亦即main方法所在的类.如果该类有所属的包,书

postgresql java问题-Postgresql java编程用jdbc连接,怎么样执行postgresql中 d 的查询指令

问题描述 Postgresql java编程用jdbc连接,怎么样执行postgresql中 d 的查询指令 请各位大神帮忙解决一下这个问题:"Postgresql java编程用jdbc连接,怎么样执行postgresql中 d 的查询指令"谢谢. 情况是这样: 我要把所有表的constraints的column找出来,但是我只能通过pg_indexes找到constraints的名字,只有通过d constraints_name 才能找到column,所有请教各位大神有没有解决方法

oracle执行语句过慢-ORACLE语句执行过慢,求帮助

问题描述 ORACLE语句执行过慢,求帮助 ORACLE执行语句过慢:麻烦大神指点:select 'OB1' a.customerno a.phone a.AnswerType '4947E1' a.managecom from continfo a where a.dealflag = 0 表信息:i_continfo 表数据大概280W左右,dealflag已经添加了索引执行结果:不加条件执行不到1秒,加了条件执行要30秒请问这种情况能优化么?多谢!