1. 字符串判null與判空的順序:細節問題,在判斷條件上判null應該放在前面(短路求值~);
2. Mysql是不能再update(包括insert等中直接連接或嵌套查詢自身的):
一個簡單的例子,在一個根據order_value值降序管理界面記錄列表中上移和下移功能的實現:
使用Mybatis框架,具體語句:
<update id="swapOrder" parameterType="Map">
update lectures as q1 join lectures as q2 on (q1.id=#{id,jdbcType=INTEGER} and q2.id=#{nextID,jdbcType=INTEGER})
or(q1.id=#{nextID,jdbcType=INTEGER} and q2.id=#{id,jdbcType=INTEGER})
set q1.order_value = q2.order_value,q2.order_value=q1.order_value;
</update>
<select id="getNextSmallerID" parameterType="int" resultType="String">
select id from lectures where order_value<(select order_value from lectures where id=#{id,jdbcType=INTEGER}) limit 1
</select>
<select id="getNextBiggerID" parameterType="int" resultType="String">
select id from lectures where order_value>(select order_value from lectures where id=#{id,jdbcType=INTEGER}) limit 1
</select>
swapOrder過程使用了連接,但這裏通過別名來實現的自身連接,參數map中包括了id和要與之交換的nextID(上移的nextID通過getNextBiggerID來獲得,下移同理)。
3. 在實際項目中一定要注意釋放資源,各種mysql的session要及時close掉,以及reader、流等,否則在壓力測試面前問題立刻就暴露了。
另外,在繼承結構中,能夠通用的部分可以考慮設爲static;
循環中使用Matcher,注意不要在循環內創建Matcher實例,而是用reset()(同String操作——StringBuilder);