AND a.planmajorname = #{planMajorName} AND a.planmajorname LIKE '%'||#{planMajorName}||'%' '%'+#{planMajorName}+'%' concat('%',#{planMajorName},'%') 使用某个字段做标 ..

SSM 中 MyBatis 的某个 xxxMapper.xml 中,是否可以这样写?

            <if test="planMajorName != null and  planMajorName != '' and r1 = '0'">
                AND a.planmajorname = #{planMajorName}
            </if>
            <if test="planMajorName != null and  planMajorName != '' and (r1 = null or r1 = '')">
                AND a.planmajorname LIKE
                <if test="dbName == 'oracle'">'%'||#{planMajorName}||'%'</if>
                <if test="dbName == 'mssql'">'%'+#{planMajorName}+'%'</if>
                <if test="dbName == 'mysql'">concat('%',#{planMajorName},'%')</if>
            </if>

使用某个字段做标记,对另一个字段进行筛选查询。

还是说碰见这种情况,直接单独写一个查询方法?

  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    118 引用 • 394 回帖 • 767 关注
  • Q&A

    提问之前请先看《提问的智慧》精读注解版,好的问题比好的答案更有价值。

    1116 引用 • 7312 回帖 • 585 关注
被采纳的回答
  • gitors      

    那可以用 choose 标签嘛,

    <choose>
                    <when test="date != null and date != ''">
                        where t.task_date = #{date}
                    </when>
                    <otherwise>
                        where t.task_date = to_char(sysdate,'yyyy-MM-dd')
                    </otherwise>
                </choose>
    

    比如这样。

10 回帖   
请输入回帖内容...
  • PeterChu  

    没时间测试到底如何实现,还是单独再写一个查询方法了。

  • gitors  

    你还不如把 % 直接拼接到参数里去

  • gitors  

    比如:

    String planMajorName = "%" + planMajorName + "%",

    sql 里面直接 写 #{planMajorName},

  • gitors  

    而且,多数据源,但是表一样??? 这是什么鬼?

    1 回复
  • DrJoseph

    看到 dbName == 'oracle' 这样的判断我还是头一次在 sql 里见过😳

  • PeterChu        

    😁 这个是 jeesite、jeeplus 框架项目里面都是这种,可以配置不同的数据库,不用单独修改 mapper.xml 好像。

    1 回复
  • gitors        

    那可以用 choose 标签嘛,

    <choose>
                    <when test="date != null and date != ''">
                        where t.task_date = #{date}
                    </when>
                    <otherwise>
                        where t.task_date = to_char(sysdate,'yyyy-MM-dd')
                    </otherwise>
                </choose>
    

    比如这样。

    1 回复
  • PeterChu        

    cool
    应该可以的。

  • Eddie 1 评论

    我说。。。为什么不直接传 %planMajorName%

    1 回复
    一个方法是 m(key) 里面调用 d_findlike(%key%) 这样啊 。
    Eddie
  • PeterChu        

    这块我其实是传的"xxx%xxx%xxxx%xx"
    至于这块拼接 % 的原因大致是因为此处是个 findList 的查询 SQL,适用于很多地方,尤其是用在用户输入某字段值后进行模糊匹配查询,这种可能是因为在这块 sql 中设置拼接 % 比在 C 或 S 层进行拼接要方便多,最主要是这个是 代码生成 的一个功能决定的应该。
    jeeSite 这类有 代码生成 功能的框架应该这么处理是最好的吧。

请输入回帖内容 ...