Mybatis 通過註解的方式實現動態SQL

Mybatis 動態SQL 實現方式

第一種方式

在 mapper 的 interface類中使用註解的方式實現:

  • 需要使用 <script></script> 標籤包裹
  • 可以正常的使用在 XML 的動態SQL 標籤
@Select("<script> SELECT * FROM AREA WHERE 1 = 1 " +
        "<if test= \"id != null and id != ''\"> id = #{id} </if>" +
        "</script>")
List<Area> selectAreaByCondition(Map<String,Object> map);

這種方式在寫法上面和 XML 中的寫法是一樣,支持 XML 的動態SQL語法,可以在上面的字符串中寫 <foreach> 等 標籤的語法。 

 

第二種方式

使用 @SelectProvider 註解,type 參數是提供構建 SQL 的類,method 是構建 SQL 的方法,可以看上圖更加直觀

@SelectProvider(type = AreaService.class, method = "selectAreaByProviderSQL")
List<Area> selectAreaByProvider(Area area);

構建 SQL 的方法主體

public String selectAreaByProviderSQL(Area area) {
    return new SQL(){
        {
            SELECT("  * ");
            FROM("AREA").WHERE("1=1");
            if (!StringUtils.isEmpty(area.getId())) {
                WHERE("id = #{id}");
            }
            if (!StringUtils.isEmpty(area.getName())) {
                WHERE("name = #{name}");
            }
        }
    }.toString();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章