006参数处理

本文详细解析MyBatis框架中参数的传递方式,包括单个标量参数、复合参数或Map参数,以及多个参数的处理方法。通过具体示例说明如何在Mapper.java接口和XML配置文件中正确使用参数。

目的:配置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以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值