本文記錄使用Mybatis操作數據庫時碰到的一些語句,供以后參考。
一,多條件查詢
示意SQL語句:SELECT t_field1, t_field2 FROM table_name WHERE t_field3 (BETWEEN startTime AND endTime) AND t_field4 IN (xxx,xxx,xxx)
Mapper接口配置:
public List<Chat> query(@Param("startTime") long startTime, @Param("endTime") long endTime, @Param("sids") List<Long> sidList);
Mapper.xml配置:
<select id="query" resultMap="chat"> SELECT uid,content from tableName WHERE ( UNIX_TIMESTAMP(data_time) >= #{startTime} ) AND ( UNIX_TIMESTAMP(data_time) <= #{endTime} ) AND sid IN <foreach collection="sids" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </select>
resultMap 將數據庫中的列名 與 JavaBean 屬性名 對應,從而映射成Java對象。Chat則是一個擁有兩個字段(uid 和 content)的 JavaBean類。
<resultMap id="chat" type="Chat"><!-- Chat 是在mybatisConfig.xml中定義的別名(全限定包名在 mybatisConfig.xml中配置了)--> <id property="id" column="id"/> <result property="uid" column="uid"/> <result property="content" column="content"/> </resultMap>
解釋:①Mapper接口中的方法名 與 Mapper.xml中的 <select id 一 一對應。
②Mapper接口 通過 @Param 實現多個參數傳遞。可參考:MyBatis簡單使用和入門理解 中的“使用參數注解的形式傳遞多個參數”。@Param中指定的參數名稱 與 select 查詢語句中的 名稱 一 一對應。比如:@param("startTime") 對應 #{startTime} 。 @param("endTime") 對應 #{endTime} 。
@param("sids") 對應 foreach collection="sids"
③通過 foreach 語句,對 sid 字段 實現了 多條件匹配。相當於 sid IN {xxx1,xxx2,xxx3....}
④另外對於數據庫中的String類型 data_time字段,首先轉化成UNIX時間戳,然后與 startTime 及 endTime 比較。注意的是 <= 是用 < 來表示的。否則會報下面錯誤:
tag name are expected