在操作数据库时,查询是最常用的语句,模糊查询也是数据库SQL中使用频率很高的SQL语句,利用MyBatis框架来进行更加灵活的模糊查询,介绍以下两种常用的方式。
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元素,此元素可以跨越数据库限制,也就是说不管是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数据库都可以通用模糊查询,推荐使用。