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属性值,否则将直接返回空字符串("")。

 

 
posted @ 2020-10-03 09:51  星小梦  阅读(2546)  评论(0编辑  收藏  举报