- MySQL 中常使用concat函數處理字符串拼接,尤其是模糊查詢中
假設Mapper接口如下定義
/**
* 模糊查詢 t_role 表
* @param roleName 查詢角色名稱-模糊值
* @return 滿足規則的角色集合
*/
List<Role> readRoles(@Param("roleName") String roleName);
則xml實現的sql語句爲
<!-- 模糊查詢 -->
<select id="readRoles" resultType="com.pojo.Role">
select
t_role_id as roleId,
t_role_name as roleName,
t_role_value as roleValue,
t_role_desc as roleDesc
from t_role tsr
<where>
<if test="roleName != null and roleName != ''">
tsr.t_role_name LIKE CONCAT('%',#{roleName},'%')
</if>
</where>
</select>
- 然而Sqlite中不包含Concat函數幫助我們處理,就只能用最原始的字符串拼接,特別的Sqlite中使用 '||' 符號做拼接而不是 ‘+’
/**
* 模糊查詢 t_role 表
* @param roleName 查詢角色名稱-模糊值
* @return 滿足規則的角色集合
*/
@select("select * from t_role where t_role_name like '%'||#{roleName}||'%'")
List<Role> readRoles(@Param("roleName") String roleName);
- 拓展業務:大多數表在增加、編輯數據時會做一些重複值的校驗;比如用戶名唯一校驗;而增加和編輯的情況有一點區別,比如僅在方法中傳遞一個用戶名參數去數據庫查詢,在編輯時用戶會把自身也算入重複中;這時可以選擇傳遞用戶名,id兩個參數在不同的業務中進行傳參操作即可