欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-13 18:11:03
我们编程的过程中大部分使用了很出色的orm框架,例如:mybatis,hibernate,springjdbc,但是这些都离不开数据驱动jdbc的支持。虽然使用起来很方便,...

我们编程的过程中大部分使用了很出色的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;

这时候的执行计划可以看一下:


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

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



以上所述是小编给大家介绍的mybatis通过jdbc数据驱动生成的执行语句问题,希望对大家有所帮助