SqlServer中使用Mybatis常见的几个问题分析

由于以前使用的数据库是Oracle,现在要做一套SqlServer版本的 除了常用函数转化外还会出现如下几个问题
1.插入语句 如下

INSERT INTO bdc_qlrlb (
slid, sxh
, qlrid, qlrmc
, zjhm, lysqb
, bdcqzh, cerid
, bz, xh
) VALUES(
#{slid}
, #{sxh}
, #{qlrid}
, #{qlrmc}
, #{zjhm}
, #{lysqb}
, #{bdcqzh}
, #{cerid}
, #{bz}
, #{xh}
)

这样的写法在Oracle版本能争取执行,但是换到SqlServer版本
出现如下所示错误

Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 操作数类型冲突: varbinary 与 float 不兼容

The error may involve receiveQysbMapper.insertQlr-Inline

The error occurred while setting parameters

SQL: INSERT INTO bdc_qlr( qlrid , dzyj , bdcdyh , xb , zjzl , gj , sshy , fzjg , zjhm , qlrmc , yb , qlbl , qlmj , qlrlx , bdcqzh , bz , gyfs , dz , dh , ysdm , sxh , gzdw , hjszss ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )

Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 操作数类型冲突: varbinary 与 float 不兼容

问题分析:执行插入语句时 由于SqlServer版本当前表 有的字段为 float类型 导致冲突,
解决方法:#{xx,jdbcTye=varchar} 统一转化为varchar 问题解决

2.同样是一段insert插入语句 如下图

INSERT INTO xx_qlrlb (
slid ---其中slid是主键
, sxh
, qlrid
, qlrmc
, zjhm
, lysqb
, bdcqzh
, cerid
, bz
, xh
) VALUES(
#{slid}
, #{sxh}
, #{qlrid}
, #{qlrmc}
, #{zjhm}
, #{lysqb}
, #{bdcqzh}
, #{cerid}
, #{bz}
, #{xh}
)

运行时有时候会报如下图所示的错误SqlServer中使用Mybatis常见的几个问题分析
原因分析:
sql在数据库可以执行,但是执行insert语句就会报错
根据问题提示 分析为主键冲突
Mybatis执行插入操作时 默认如下

其中useGeneratedKeys属性使用如下说明:

Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。
/*
* 配置 useGeneratedKeys = true 【mybatis.config.xml中配置】
* */