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

     
    复制请注明出处,在世界中挣扎的灰太狼
  • 相关阅读:
    阅读计划博文
    系统设计时所实现的质量属性战术
    关于如何提高系统的可用性和易用性
    jdbc.properties
    JDBCUtil
    软件质量属性的场景描述
    架构漫谈阅读笔记
    软件架构师工作过程
    orm框架中entityframework的 增删改查操作
    事件和委托
  • 原文地址:https://www.cnblogs.com/XingXiaoMeng/p/13763555.html
Copyright © 2020-2023  润新知