SSM框架 mybatis like 问题

bhtj27 2016-08-07 10:38:49
映射文件如下:
<resultMap type="java.util.HashMap" id="queryListResult">
<!-- <collection property=""></collection> -->
<result property="Id" column="id"/>
<result property="Name" column="name"/>
</resultMap>
<select id="queryList" parameterType="java.util.HashMap" resultMap="queryListResult">
select id,name from test1
<where>
<if test="id!=null and !id.isEmpty()">id=#{id} </if>
<!-- <if test="id!=null and id!=''">id=#{id} </if> -->
<!-- <if test="name!=null">and name like #{name} </if> -->
<if test="name!=null">and name like concat('%',#{name},'%') </if>
</where>

</select>




无论是这个语句<if test="name!=null">and name like #{name} </if>
还是<if test="name!=null">and name like concat('%',#{name},'%') </if>
都不能查出来结果,但是单独执行能查出来结果这到底是怎么回事???用的spring4.0.6,mybatis3.3
...全文
490 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sheldon_C 2016-08-16
  • 打赏
  • 举报
回复
mybatis的模糊查询在mapper里好像有特定方法,不过我忘了,不过你可以在dao可以重新set下name,拼接成setName("%"+name+"%");
Cc_Davis_cC 2016-08-15
  • 打赏
  • 举报
回复
下面的查询也将导致全表扫描:(不能前置百分号) select id from t where name like ‘%abc%’ 若要提高效率,可以考虑全文检索。 select * from gt_alarm where alarm_date like '%2016/4/3%'; --11s(执行时间) select * from gt_alarm where instr(alarm_date,'2016/4/3')>0; --9s select * from gt_alarm where alarm_person like '%xiuxianxi%';--11s select * from gt_alarm where instr(alarm_person,'xiuxianxi')>0;--8s
_Kem 2016-08-14
  • 打赏
  • 举报
回复
and name like #{name} 改成 and name like ‘%${name}%’ SQL语句的占位符表示为:#{输入参数名} 如果输入参数是简单类型,“输入参数名”就可以任意 如果输入参数是对象类型,“输入参数名”只能对应于对象属性名 模糊查询的占位符表示为:’%${输入参数名}%’ 如果输入参数是简单类型,“输入参数名”只能是value 如果输入参数是对象类型,“输入参数名”只能对应于对象属性名
codingjav 2016-08-14
  • 打赏
  • 举报
回复
仔细检查下,应该那个出错啦
bhtj27 2016-08-14
  • 打赏
  • 举报
回复
引用 4 楼 jinwufeiyang 的回复:
你可以专门写一个工具类用来把需要查询的那个字段单独进行加上%+字段+%,进行封装下,再传到mapper等,进行查询
这个建议有道理,赞一个! 但是突然我有发现了个问题:JDBC Connection [com.mysql.jdbc.JDBC4Connection@7d4966cc] will not be managed by Spring 这是怎么回事???奇怪了。
bhtj27 2016-08-14
  • 打赏
  • 举报
回复
引用 3 楼 qq_34572626 的回复:
('%',${name},'%')


还是不行啊,突然发现了个问题,难道是这个问题,如图:

bhtj27 2016-08-14
  • 打赏
  • 举报
回复
引用 2 楼 bhtj27 的回复:
[quote=引用 1 楼 wlwlwlwl015 的回复:]
一般拼接不是在SQL里做的,而是在service层通过参数传进mapper,你这样写估计是单引号没被转义导致的,建议你还把拼接什么的不要放在sql里比较好,把%%什么的拼成字符串传进来。


按照你的意思,映射文件改为:<if test="name!=null">and name like #{name} </if>
但是无论加不加单引号都还是不行啊



[/quote]


还是不行啊,突然发现了个问题,难道是这个问题,如图:

codingjav 2016-08-13
  • 打赏
  • 举报
回复
你可以专门写一个工具类用来把需要查询的那个字段单独进行加上%+字段+%,进行封装下,再传到mapper等,进行查询
酷酷发客 2016-08-11
  • 打赏
  • 举报
回复
('%',${name},'%')
小灯光环 2016-08-07
  • 打赏
  • 举报
回复
一般拼接不是在SQL里做的,而是在service层通过参数传进mapper,你这样写估计是单引号没被转义导致的,建议你还把拼接什么的不要放在sql里比较好,把%%什么的拼成字符串传进来。
bhtj27 2016-08-07
  • 打赏
  • 举报
回复
引用 1 楼 wlwlwlwl015 的回复:
一般拼接不是在SQL里做的,而是在service层通过参数传进mapper,你这样写估计是单引号没被转义导致的,建议你还把拼接什么的不要放在sql里比较好,把%%什么的拼成字符串传进来。


按照你的意思,映射文件改为:<if test="name!=null">and name like #{name} </if>
但是无论加不加单引号都还是不行啊



67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧