问题描述
MySQL数据库上,mybatis 如果模糊查询,两个条件怎么写?请指点一下。 一个条件的模糊查询,测试通过:WHERE STORE_SALE.PRODUCT_NAME LIKE '%'||#{product_name}||'%' 2个条件 WHERE STORE_SALE.PRODUCT_NAME LIKE '%'||#{product_name}||'%' AND STORE_SALE.CUSTOMER LIKE '%'||#{customer}||'%' 测试结果为全部查询,即where 条件无效 哪位知道该怎么写? 3Q
解决方案
用instr是正解,如果要按你自己的写法,可以改成:WHERE STORE_SALE.PRODUCT_NAME LIKE '%${product_name}%' AND STORE_SALE.CUSTOMER LIKE '%${customer}%'
解决方案二:
WHERE STORE_SALE.PRODUCT_NAME like CONCAT('%',#roleName1#,'%') AND STORE_SALE.PRODUCT_NAME like CONCAT('%',#roleName2#,'%')
解决方案三:
WHERE INSTR(STORE_SALE.PRODUCT_NAME,#{product_name})>0 AND INSTR(STORE_SALE.CUSTOMER ,#{customer})>0 用instr函数进行模糊查询比like效率要高很高,推荐你使用instr函数例如 select * from user where instr(name,'张三')>0 意思就是查询user表中name字段所有带张三的名字
解决方案四:
看你写的where语句没啥问题。查询语句有链接符的一般用于oracle数据库,你换成WHERE customer like CONCAT('%', #customer#, '%') 形式做两个条件查询试试。
解决方案五:
like查询其实和其他的差不多,刚刚在本地测试这样两个like是可以查询的你自己在看看你是否写错的了<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if> <if test="author != null and author.name != null"> AND author_name like #{author.name} </if></select>
解决方案六:
没觉得有啥问题,你还是配置下log4j看下输出的sql是啥样吧