MyBatis多字段匹配查询

一般我们实现模糊查询功能都是通过MySQL的LIKE关键字配合通配符进行实现的,但当关键字需要进行多字段匹配的时候则比较麻烦,常规写法如下,每个需要匹配到的字段使用OR关键字连接进行匹配。但是所需要匹配字段多时这种写法过于冗长

常规写法:
<select id="findByKeyWord" resultType="example.modules.entity.Demo">
    SELECT <include refid="Base_Column_List"/> FROM table
    <where>
        <if test="keyword!=null and keyword!=''">
            AND ( name_zh LIKE CONCAT('%',#{keyword},'%') OR name_en LIKE CONCAT('%',#{keyword},'%') )
        </if>
    </where>
</select>
改造写法:

这种写法使用了CONCAT拼接了需要匹配的字段,但是当其中一个字段里面有null值的时候是不能够匹配到的,因此还需要进行判空操作

<select id="findByKeyWord" resultType="example.modules.entity.Demo">
    SELECT <include refid="Base_Column_List"/> FROM table
    <where>
        <if test="keyword!=null and keyword!=''">
            AND CONCAT( name_zh,name_en ) LIKE concat('%',#{keyword},'%')
        </if>
    </where>
</select>

改良写法

使用IFNULL()对字段进行判空,如果为null则使用空字符串替换

<select id="findByKeyWord" resultType="example.modules.entity.Demo">
    SELECT <include refid="Base_Column_List"/> FROM table
    <where>
        <if test="keyword!=null and keyword!=''">
            AND CONCAT(IFNULL(name_zh,''),IFNULL(name_en,'')) LIKE concat('%',#{keyword},'%')
        </if>
    </where>
</select>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容