MyBatis模糊查询——bind元素使用
1. 以往模糊查询方式
<select id="findByUsername" parameterType="String" resultType="user"> SELECT * FROM user WHERE username LIKE concat('%',#{username},'%') </select>
使用concat进行拼接。
1.1. 存在的问题
concat只存在于mysql数据库中,而对于别的数据库如Oracle数据库并不适用。这就使得,如果更换数据库,就需要修改源码。
2. bind元素的引入
bind元素的作用是通过OGNL表达式去自定义一个上下文变量,这样更方便使用。在进行模糊查询时,如果是Mysql数据库,常常会用到的是一个concat,它用%和参数相连。然而在Oracle数据库则没有,Oracle数据库使用||进行连接。这样SQL就需要提供两种形式去实现。但是有了bind元素,就不必使用数据库的语言,而是使用MyBatis的动态SQL实现。
3. bind元素使用
<select id="findByUsername" parameterType="String" resultType="user"> <bind name="pattern" value="'%'+_parameter+'%'"/> SELECT * FROM user WHERE username LIKE #{pattern} </select>
多参数情况:可定义多个bind元素
public List<User> findByUsernameAndSex(@Param("username") String username,@Param("sex") String sex);
<select id="findByUsernameAndSex" resultType="user"> <bind name="pattern_username" value="'%'+username+'%'"/> <bind name="pattern_sex" value="'%'+sex+'%'"/> SELECT * FROM user WHERE username LIKE #{pattern_username} AND sex LIKE #{pattern_sex} </select>