做项目遇到这样的需求:匹配设备。
原理是一张包含两种设备的id的表,在插入前先查询是否有这两个id的记录,如果有就忽略,如果没有就执行插入。
可用于防重操作。
实验过很多,
insert ignore into 由于表是同事建的,不想改表。。万一出现问题呢。。
用了not exists ,具体的语句如下:
INSERT INTO hotel_merchant(hotel_id, merchant_id)
SELECT #{hotelId}, #{merchantId} from DUAL
WHERE NOT EXISTS (
select * from hotel_merchant h
where h.hotel_id=#{hotelId} AND h.merchant_id=#{merchantId}
)
然后测试的时候还出现了异常:空指针、返回是null,可写的类型是int之类的。。 结果是标签写错了。。抽自己。。
然后,今天需求升级:
先按照名字模糊查询信息前5条,前端要做成下拉框,然后根据前端选择的某一条数据得到这条数据的id值,
再与另一个id做匹配。
写了两个sql语句,一个查询,一个匹配。
SELECT * FROM merchants_info m
WHERE m.merchant_name LIKE CONCAT('%',#{merchantName},'%')
ORDER BY m.merchant_id limit 5
匹配同上。
测试的时候出现了此异常:
MyBatis Cause: java.sql.SQLException: Operand should contain 1 column(s)
网上查询都是in后面多了括号之类的。。
可是我没有括号也没有in。。
最后发现。。
在mybatis的xml文件里,like后面的参数是拼接成的。。 前面要加CONCAT函数关键字。
记录一下。。