如何做旅游网站推广/沈阳seo关键词排名
前言:
做一个sql不喜欢写xml但是公司又要求 ,之前个人是用mp的 各种爽,
今天写了一个复杂sql查询,普通条件用不上 ,产生以下的mybatis使用:
首先给出sql语句和相对应的写法
这里是sql
<select id="groupListMessage" parameterType="map" resultType="hashmap">SELECT g.id,g.group_name as nickname,g.group_icon as icon,mv.message,mv.message_type,mv.excuse_message,mv.stateFROM message_verify mv left join groups g on mv.to_id=g.id<include refid="selectCondition" />ORDER BY mv.id DESC</select>
<sql id="selectCondition"><where>//省略一些定义的查询条件<trim suffixOverrides="AND"></if><!--复杂的查询,使用sql完成--><trim suffixOverrides="AND"><if test="whereSql != null">AND #{whereSql}</if></trim></where></sql>
selectCondition是我们逻辑上面的判断
这个时候书写逻辑
userAllGroupType.forEach(i->ids.add(i.getGroupId().toString()));String idsjoin = String.join(",", ids);HashMap<String, Object> queryMap = new HashMap<>();queryMap.put("whereSql","mv.message_type=2 AND mv.to_id IN ("+ idsjoin +")");return MessageVerifyDao.groupListMessage(queryMap);
业务很简单 就是为wheresql的时候,想要用自定义的sql
这里的sql是模版生成的,接下来执行查询
会发现查询不到数据在mybatis中 ,在mysql中是有数据的。
SELECT g.id,g.group_name as nickname,g.group_icon as icon,mv.message,mv.message_type,mv.excuse_message,mv.state FROM 数据库省略 mv left join 省略 g on mv.to_id=g.id WHERE ? ORDER BY mv.id DESC
DEBUG 14360 --- [io-10033-exec-3] : ==> Parameters: mv.message_type=2 AND mv.to_id IN (4)(String)DEBUG 14360 --- [io-10033-exec-3] : <== Total: 0
之后我进行了mysql查询 实实在在有一条数据,
一直想不通,
其实这个查询语句肯定没有错,
总结原因
mybatis中是有# $ 的区分 一个sql编译的时候#会产生"" ,$则不会,才会导致我的预编译注入字符串不识别出来,将whereSql
改为$就可以用了!!!
还是因为自己粗心大意。坐太久屁股疼脑子不好用!