直接一直用原生JDBC最烦的一点就是各种getset对象的值,Mybatis这点最好全都映射了不需要写那种重复的玩意。
mybatis的值基本都是#{XX}防止sql注入,不过这玩意在用IN写sql的时候有个小坑要注意比如:
SELECT id,orderid,sku,sizecode,width,height,quantity,remark,smalladdress FROM
orderdetail WHERE orderid IN (#{deliveryid}) ORDER BY orderid asc这里只会查出来一条数据已经值编译后其实是WHERE orderid IN (‘#{deliveryid}’)如果是数据1,3,5会变成‘1,3,5’和本身的想法完全不一样了查出来会漏数据所以这里应该改成${deliveryid}不过这样会有被注入的风险,所以再前面把数据处理好。
还有一种写法SELECT id,orderid,sku,sizecode,width,height,quantity,remark,smalladdress FROM orderdetail WHERE orderid IN(SELECT id FROM neworder WHERE deliveryid=#{deliveryid})
这样因为是一个整体的SQL而且第一个查询出来是数组而不是字符串mysql会自己帮你转数据一切正常,但是如果第一个查出来是字符串那也是会漏数据的也就是‘1,3,5’这种情况
这种可以用FIND_IN_SET(字段,值)来解决不过性能很差非必要不使用