目前專案中寫動態SQL,用的都是下面的語法:
@Select("<script>" +
"SELECT wr.id,wr.customer_id,wr.type,wr.detail from xxx rel " +
"LEFT JOIN xxx wr on rel.rule_id=wr.id where rel.entity_id=#{entityId} and wr.customer_id=#{customerId} " +
"</script>")
List<WarningRule> queryByEntityId(@Param("entityId") Integer entityId,@Param("customerId")Integer customerId);
有以下幾種最佳化方式:
1、大括號形式,免去字串拼接SQL時忘記空格導致的語法錯誤問題。
@Select({
"<script>",
"SELECT wr.id, wr.customer_id, wr.type, wr.detail",
"FROM xxx rel",
"LEFT JOIN xxx wr ON rel.rule_id = wr.id",
"WHERE rel.entity_id = #{entityId}",
"AND wr.customer_id = #{customerId}",
"</script>"
})
List<WarningRule> queryByEntityId(@Param("entityId") Integer entityId, @Param("customerId") Integer customerId);
2、藉助OGNL表示式,減少函式引數數量
OGNL(Object-Graph Navigation Language)是一種用於訪問和操作物件圖的表示式語言。它被廣泛用於 Java 環境中,尤其是在 MyBatis 和其他框架中。OGNL 允許你以簡潔的方式訪問物件屬性、呼叫方法以及進行邏輯運算。
@Select("SELECT * FROM users WHERE id = #{user.id}")
User getUser(@Param("user") User user);