mybatis中xml格式的mapper文件中接收入参时#和$的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis中xml格式的mapper文件中接收入参时#和$的区别相关的知识,希望对你有一定的参考价值。

参考技术A 简单数据类型

User selectByPrimaryKey(Integer id);

sql映射:

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from base.tb_user
where id = #id,jdbcType=INTEGER
</select>

对于简单数据类型,sql映射语句中直接#变量名这种方式引用就行了,其实这里的"变量名"可以是任意的。mapper接口方法传递过来的值,至于其叫什么名字其实是不可考也没必要知道的。
而且JAVA反射只能获取方法参数的类型,是无从得知方法参数的名字的。
比如上面这个示例中,使用#id来引用只是比较直观而已,使用其他名字来引用也是一样的。所以当在if元素中test传递的参数时,就必须要用_parameter来引用这个参数了。像这样:

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from tb_user
<if test="_parameter != 0">
where id = #id,jdbcType=INTEGER
</if>
</select>

以上是关于mybatis中xml格式的mapper文件中接收入参时#和$的区别的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis之mapper.xml配置文件中的#{}和${}

idea怎么从mapper进xml

MyBatis的Mapper.xml文件中没有提示怎么办?

热加载 MyBatis 中修改过的 Mapper.xml

mybaties中mapper.xml映射文件中输出映射resultMap与resultType的不同

mybatis中dao接口与mapper关联的理解