Cuando configuramos el archivo del asignador, queremos configurar la consulta difusa, así:
<select id="getAllUserRoleDepByName" resultMap="userRoleDepList">
select
u.*,r.*,d.* from
user u left join user_role ur on u.user_id=ur.user_id
left join role r on
r.role_id=ur.role_id
left join department d on
<if test="user_name != null">
u.department_id = d.department_id where u.user_name like '%#{user_name}%'
</if>
</select>
O así:
<select id="getAllUserRoleDepByName" resultMap="userRoleDepList">
select
u.*,r.*,d.* from
user u left join user_role ur on u.user_id=ur.user_id
left join role r on
r.role_id=ur.role_id
left join department d on
<if test="user_name != null">
u.department_id = d.department_id where u.user_name like '%' + #{user_name} + '%'
</if>
</select>
Descubrí que no funcionaba. Informé de un error cuando lo ejecuté. También encontré algunos métodos en Internet, pero fallé. Finalmente, vi el método de vinculación en el sql dinámico en el sitio web oficial de mybatis para resolver el problema. El método es el siguiente:
Defina los atributos relevantes en bind.
<select id="getAllUserRoleDepByName" resultMap="userRoleDepList">
<bind name="pattern" value="'%' + user_name + '%'"/>
select
u.*,r.*,d.* from
user u left join user_role ur on u.user_id=ur.user_id
left join role r on
r.role_id=ur.role_id
left join department d on
<if test="user_name != null">
u.department_id = d.department_id where u.user_name like #{pattern}
</if>
</select>