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);