Mybatis mapper文件佔位符設置默認值

如果要設置佔位符默認值的話:需要進行 設置 

org.apache.ibatis.parsing.PropertyParser.enable-default-value 屬性爲true啓用佔位符默認值處理,默認爲false不啓用;由於我是 SpirngBoot項目,故需要在yaml文件配置這個即可,如果你是xml或Java配置,在相應位置配置即可

 

 

這樣你就可以在 mapper文件裏使用 ${提取的值:默認值};分隔符默認是 冒號:;不過可以配置   看 org.apache.ibatis.parsing.PropertyParser.VariableTokenHandler這個私有內部類的構造方法即可

 

 

 

mapper文件sql片段使用示例

<sql id="abc">
        <bind name="alias" value="'${alias:}'"/>  # 這裏提取變量,如果不存在,將設置爲默認值(空字符串);方便下面的判斷
        <bind name="prefix" value="'${prefix:}'"/>
        <bind name="columns" value="new String[]{'col_1','col_2','col_3'}"></bind> # 實體類對應的表的字段列表
        <foreach collection="columns" item="columnName" separator=",">
            <bind name="column_Name" value="( (alias != null and alias !='') ?(alias + '.') : '') + columnName + ( (prefix!=null and prefix !='') ?(' AS ' + prefix + columnName) : '')" />  # 這裏加上 sql的表的別名和 AS 後的前綴
            ${column_Name}
        </foreach>
    </sql>



使用方式

<include refid="abc">
    <property name="alias" value="bc"/>
<property name="prefix" value="category_" />
</include>
 

 


 

 

 

Mybatis 的 ${}是先有自身解析,也就是從上文下中提取值(需要開啓佔位符默認值處理,否則,將直接提供給OGNL處理),繼而交由OGNL處理:org.apache.ibatis.parsing.GenericTokenParser#parse 查看此方法可以看到是怎麼處理mapper文件 ${} 中的值的

 

<bind /> 標籤的name和value處理方式一樣,都由 org.apache.ibatis.parsing.PropertyParser.VariableTokenHandler#handleToken 方法處理

 

 

 

使用佔位符默認值示例::

<bind name="variable" value="${name:}" />   從mapper上下文中提取name屬性值,否則將直接返回空字符串("")。

 

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