1、MyBatis模糊查询——bind元素使用
1.1 以往模糊查询方式
<select id="findByUsername" parameterType="String" resultType="user">
SELECT * FROM user WHERE username LIKE
<if test="dbName == 'oracle'">'%'||#{pattern}||'%'</if>
<if test="dbName == 'highgo'">'%'||#{pattern}||'%'</if>
<if test="dbName == 'mssql'">'%'+#{pattern}+'%'</if>
<if test="dbName == 'mysql'">CONCAT('%', #{pattern}, '%')</if>
</select>
1.2. 存在的问题
根据不同的数据库使用不同的连接方式。这就使得,如果更换数据库,就需要修改源码。
1.3. bind元素的引入
bind元素的作用是通过OGNL表达式去自定义一个上下文变量,这样更方便使用。在进行模糊查询时,如果是Mysql数据库,常常会用到的是一个concat,它用%和参数相连。然而在Oracle数据库则没有,Oracle数据库使用||进行连接。这样SQL就需要提供两种形式去实现。但是有了bind元素,就不必使用数据库的语言,而是使用MyBatis的动态SQL实现。
<select id="findByUsername" parameterType="String" resultType="user">
SELECT * FROM user WHERE
<if test="fieldlabel != null and fieldlabel != ''">
<bind name="fieldlabelMatch" value="'%' + fieldlabel + '%'"/>
username LIKE #{fieldlabelMatch}
</if>
</select>