浅谈MyBatis中模糊查询LIKE的几种方式

前言

在操作数据库时,查询是最常用的语句,模糊查询也是数据库SQL中使用频率很高的SQL语句,利用MyBatis框架来进行更加灵活的模糊查询,介绍以下两种常用的方式。

利用Mysql的CONCAT()函数

MySQL的CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一。用法:CONCAT(str1,str2,…)

mapper层接口如下:

    /**
     * 根据用户名模糊查询用户信息
     * 
     * @param name
     * @return
     */
    List<UserInfo> getUserList(@Param("name") String name);

mapper文件如下:

    <select id="getUserList" resultType="com.sinosoft.springbootplus.systems.domain.domainobject.UserInfo">
        SELECT
            u.id, u.user_name, u.nick_name, u.phone, u.email, u.sex, u.head, u.remark, u.state, u.lock_state, u.lock_time,
            u.pwd_last_updae, u.department_id, u.deleted, u.version, u.create_time, u.update_time
        FROM sys_user u
        WHERE u.deleted = 0
        <if test="name != null and name != ''">
            AND u.user_name LIKE CONCAT('%',#{name},'%')
        </if>
    </select>

注意:
此方法只针对mysql数据库所用,如果换成Oracle数据库则需要修改sql代码,因此此方法不通用,但可以使用。

利用mybatis的bind元素

mybatis针对这种情况作出了调整,提供了一个bind元素,此元素可以跨越数据库限制,也就是说不管是mysql还是Oracle数据库都可以通用模糊查询。

mapper层接口如下:

    /**
     * 根据用户名模糊查询用户信息
     * 
     * @param name
     * @return
     */
    List<UserInfo> getUserList(@Param("name") String name);

mapper文件如下:

    <select id="getUserList" resultType="com.sinosoft.springbootplus.systems.domain.domainobject.UserInfo">
        SELECT
            u.id, u.user_name, u.nick_name, u.phone, u.email, u.sex, u.head, u.remark, u.state, u.lock_state, u.lock_time,
            u.pwd_last_updae, u.department_id, u.deleted, u.version, u.create_time, u.update_time
        FROM sys_user u
        WHERE u.deleted = 0
        <if test="name != null and name != ''">
            <bind name="nameLike" value="'%' + name + '%'"/>
            AND u.user_name LIKE #{nameLike}
        </if>
    </select>

注意:
此方式可以跨越数据库限制,也就是说不管是mysql还是Oracle数据库都可以通用模糊查询,推荐使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值