如果要設置占位符默認值的話:需要進行 設置
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屬性值,否則將直接返回空字符串("")。