mybatis動態SQL

耗子哥信徒發表於2024-10-30

目前專案中寫動態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);

相關文章