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属性值,否则将直接返回空字符串("")。
Mybatis mapper文件占位符设置默认值的更多相关文章
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...
- [DB][mybatis]MyBatis mapper文件引用变量#{}与${}差异
MyBatis mapper文件引用变量#{}与${}差异 默认,使用#{}语法,MyBatis会产生PreparedStatement中.而且安全的设置PreparedStatement參数,这个过 ...
- ][mybatis]MyBatis mapper文件中的变量引用方式#{}与${}的差别
转自https://blog.csdn.net/szwangdf/article/details/26714603 MyBatis mapper文件中的变量引用方式#{}与${}的差别 默认情况下,使 ...
- Linux Linux下最大文件描述符设置
Linux下最大文件描述符设置 by:授客 QQ:1033553122 1. 系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 6 ...
- intellij idea 插件开发--快速定位到mybatis mapper文件中的sql
intellij idea 提供了openApi,通过openApi我们可以自己开发插件,提高工作效率.这边直接贴个链接,可以搭个入门的demo:http://www.jianshu.com/p/24 ...
- spring 配置文件属性设置默认值以及读取环境变量值
在 Spring 中为 javabean 注入属性文件中的属性值一般人都知道的,可以通过 org.springframework.beans.factory.config.PropertyPlaceh ...
- ng-option指令使用记录,设置默认值需要注意
ng-options一般有以下用法: 数组作为数据源: label for value in array select as label for value in array label group ...
- 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...
- EF Core1.0 CodeFirst为Modell设置默认值!
当我们使用CodeFirst时,有时候需要设置默认值! 如下 ; public string AdminName {get; set;} = "admin"; public boo ...
随机推荐
- github push时提示Username for 'https://github.com' 解决办法
问题 github push时在输入账号密码后仍提示:Username for 'https://github.com',需要进一步输入账号密码. 解决方案 注意这里的账号密码并不是github的登录 ...
- 案例八:shell自动化管理账本脚本
该脚本目的帮助管理员创建账号.删除账号.锁定账号.解锁账号. #!/bin/bash #filename: #author: #date:2018-6-6 echo "用户管理程序" ...
- Codeforces Round #769 (Div. 2)D,E
D.New Year Concert 传送门 题目大意: 一个长为 N ( 1 ≤ N ≤ 2 × 1 0 5 ) N(1\leq N\leq2\times 10^5) N(1≤N≤2×105)的序列 ...
- python+pytest接口自动化(6)-请求参数格式的确定
我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请求主体的编码方式为 applicat ...
- 【笔记】封神榜游戏设计VR
一.添加怪物(这个教程的鬼兵我可以用)1.设置怪物出生点.2.创建一个新脚本-CreateMonster,写好脚本之后放到3个传送门上.3.然后添加完成后,给三个添加Audio Source组件4.可 ...
- Netty学习(三)高性能之ByteBuf源码解析
原文链接: https://juejin.im/post/5db8ea506fb9a02061399ab3 Netty 的 ByteBuf 类型 Pooled(池化).Unpooled(非池化) Di ...
- netty通信
学习netty之前,要先了解操作系统中的IO.零拷贝(已经附上链接了) 一.netty的简单介绍 Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目. Ne ...
- LGP6156题解
真·简单题 题目大意 给定 \(n\) 和 \(k\),求出这个柿子的值: \[\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\mu^2(\gcd(i,j)gcd(i,j) \] 按照 ...
- CF917D题解
题目大意 一张有 \(n\) 个节点的完全图,再给出这张图的一棵生成树,问该图有多少颗生成树和这颗生成树的公共边总共有 \(k\) 条,求助 \(0 \leq k \leq n-1\) 时所有 \(k ...
- Java基础——StringBuilder
/* StringBuilder作用: String 在new一个新的对象以及进行字符串拼接时,会在常量池创建拼接之前的两个字符串对象,拼接完成后会造成内存浪费,时间浪费 StringBuilder ...