浅谈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数据库都可以通用模糊查询,推荐使用。

你可能感兴趣的:(个人学习,mybatis,java,mysql)