如果要设置占位符默认值的话:需要进行 设置

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

 

最新文章

  1. [转]DataURL与File,Blob,canvas对象之间的互相转换的Javascript
  2. Setup Factory Error3014
  3. iOS学习之Object-C语言简单的通讯录管理系统
  4. [Javascript] Lodash: Refactoring Simple For Loops (_.find, _.findLast, _.filter)
  5. maven+springmvc+easyui+fastjson+pagehelper
  6. Node.js笔记1
  7. hrbustoj 2013 Play Game 2(博弈)
  8. 09 Linear Regression
  9. RAID RAID 大揭秘~
  10. 201521123072《Java程序设计》第1周学习总结
  11. iOS开发经验总结
  12. jQuery的鼠标事件总结
  13. springboot项目利用devtools实现热部署,改动代码自动生效
  14. 正则表达式在Java中的使用
  15. python的学习笔记01_3 基本运算符 流程控制if while 字符串常用办法
  16. 使用re开发python计算器
  17. 5N - 考试排名
  18. Java——类和对象
  19. c#大文件的拷贝
  20. Alpha 冲刺 (10/10)

热门文章

  1. [Golang]一些书城项目中出现错误的原因和解决办法(一)
  2. 防世界之Web_ics-06
  3. C语言中puts()和printf()区别
  4. 【C# .Net GC】GC内存分配规则
  5. Symfony Bundle开发视频教程分享
  6. html实现随机验证码
  7. pyinstaller打包exe文件,运行时一闪而过
  8. Mysql的用户管理与授权
  9. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2
  10. LeetCode-075-颜色分类