疑似tkmybatis的bug:Example动态拼接字符串,报错sql错误
时间:2021-05-08 16:12:05
收藏:0
阅读:37
问题
本地pom
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-base</artifactId> <version>1.1.5</version> </dependency>
java代码
//查询是否有正在包装的栈板号 Example example = new Example(Pallet.class); example.createCriteria() .andEqualTo("fWoid", palletDTO.getFWoid()) .andNotEqualTo("palletId", palletDTO.getPalletId()) .andEqualTo("status", 0); example.setTableName(format("pallet_%s", projectName)); XxxMapper.selectOneByExample(example);
正常情况下的sql语句(pallet_id带入整数)
SELECT * FROM pallet_WX10 WHERE (f_woid = 39 and pallet_id <> ‘10‘ and status = 0) LIMIT 1;
pallet带入字符串
SELECT * FROM pallet_QWQ001 WHERE (f_woid = 42 and pallet_id <> CONCAT("‘",ZHANBAN1,"‘") and status = 0);
笔者猜测,框架可能根据pallet后缀id去猜解字段数据类型了。
解决方法
1、手工写sql
<select id="queryOne" resultType="com.h2.mes.entity.Pallet"> <![CDATA[ SELECT * FROM pallet_${projectName} WHERE (f_woid = #{fWoid} and pallet_id <> ‘${palletId}‘ and status = 0) limit 1 ]]> </select>
2、java代码
//查询是否有正在包装的栈板号 Map<String,Object> condition = ImmutableMap.<String,Object>builder() .put("fWoid", palletDTO.getFWoid()) .put("palletId", palletDTO.getPalletId()) .put("projectName", projectName) .build(); final Pallet availPallet = palletMapper.queryOne(condition); if (availPallet != null) { return new JsonResult(PACK1, PALLET_EXIST_UNFINISHED, availPallet); }
原文:https://www.cnblogs.com/passedbylove/p/14743991.html
评论(0)