当前位置: 移动技术网 > IT编程>开发语言>Java > MyBatis通过JDBC数据驱动生成的执行语句问题

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

我们编程的过程中大部分使用了很出色的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数据驱动生成的执行语句问题,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网