目的:配置sql语句用到的参数 要与 包装sql语句的对象(Mapper.java)的方法所需的参数对应
根据Mapper.java接口中的方法参数来分类:
1 单个标量参数:标量代表8个基本类型及其包装类、String类型等。
2 单个复合参数或者Map参数。
3.多个参数
1 单个标量参数
不需要任何对应关系,参数名称随便写都可以对应,因为本来就一个参数,并且这个参数是个标量.
2 单个复合参数或者Map参数
2.1复合参数
sql语句传入的参数名 要与 方法参数中的对象属性名相同
int insertUser(User user);
//User对象中所有属性名:userId、userName、userAge、userDate
<insert id="insertUser" databaseId="mysql" useGeneratedKeys="true" keyProperty="userId">
insert into table_name value (null,#{userName},#{userAge},#{userDate})
</insert>
2.2.Map参数
sql语句传入的参数名应为Map的Key值
3.多个参数
三种方式:
1.sql语句传入的参数名 使用MyBatis内置参数名:arg0,arg1,arg2 … 或者
param1,param2,param3 …(param从1开始)。arg0(param1)就代表 方法参数的第一个参数,往后以此类推。
2.使用@Param(“自定义的形参名”)修饰方法参数,然后sql语句就传入这个自定义的参数名。
3.用java8的特性,即 -parameters 选项编译,这样程序就能保存方法的参数名,就不用在用@Param另外为参数取名了,那么 sql语句自然就是传入这个方法参数名了。(在ide工具中可以设置编译时默认使用-parameters )
<select id="queryUser" resultType="com.lyx.domain.User" databaseId="mysql" >
select
<include refid="allProp">
<property name="tableName" value="u"/>
</include>
from user u where user_id between #{s} and #{e}
</select>
@Update("update user set " +
"user_age=#{usee.userAge},user_name=#{usee.userName},user_datetime=#{usee.userDate}\n" +
" where user_id between #{startt} and #{endd}")
int updateUser(@Param("usee") User use,@Param("startt") int satrt,@Param("endd") int end);
当然,如果sql语句是在Mapper.xml定义的,sql语句写法完全一样.三种方法用起来都很简单,就不一一举例.
我个人比较喜欢用@Param参数指定的,这种方式比第一种方式逻辑更清楚并且不容易搞混,第三种方式局限性太大,首先必须要用-parameters 编译,并且jdk版本要在1.8以上。
本文详细解析MyBatis框架中参数的传递方式,包括单个标量参数、复合参数或Map参数,以及多个参数的处理方法。通过具体示例说明如何在Mapper.java接口和XML配置文件中正确使用参数。
1605

被折叠的 条评论
为什么被折叠?



