mybatis参数传递的问题

mybatis参数传递的问题:如何传递一个参数并在xxxMapper.xml中拿到参数值用于sql操作?如何传递多个参数并在xxxMapper.xml中拿到参数值用于sql操作?

1.基本数据类型只能传一个(int,String,Data等),通过#{参数名}即可获取传入值,参数名要严格一致。

举例:

接口代码:

List<FundoutRequest> selectPage1(String name);


Mapper的mybatis查询代码:

<select id="selectPage1" resultMap="BaseResultMap" >
    select 
    <include refid="Base_Column_List" />
    from cap_settlement_daily_summary where 1 = 1 
    <if test="name != null">
      and `id` = #{name,jdbcType=VARCHAR}
      </if>
</select>

2.复杂数据类型(例如java实体类,Map等),通过#{对象.属性名}或#{Map的key值}即可获取传入的值(#也可以看情况换成$,但是要注意在mybatis中使用$有可能会产生sql注入)。

举例:

接口代码:

List<FundoutRequest> selectPageNoLimit(FundoutRequest fundoutRequest);


Mapper的mybatis查询代码:

<select id="selectPageNoLimit" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from cap_settlement_daily_summary where 1 = 1 
    <if test="settlementDailySummary.id != null" >
      and `id` = #{settlementDailySummary.id,jdbcType=BIGINT}
    </if>
        <if test="settlementDailySummary.accountingDate != null" >
      and `accounting_date` = #{settlementDailySummary.accountingDate,jdbcType=VARCHAR}
    </if>
        <if test="settlementDailySummary.merchantId != null" >
      and `merchant_id` = #{settlementDailySummary.merchantId,jdbcType=VARCHAR}
    </if>
        <if test="settlementDailySummary.merchantName != null" >
      and `merchant_name` = #{settlementDailySummary.merchantName,jdbcType=VARCHAR}
    </if>
        <if test="settlementDailySummary.paymentTransactionCount != null" >
      and `payment_transaction_count` = #{settlementDailySummary.paymentTransactionCount,jdbcType=INTEGER}
    </if>
        <if test="settlementDailySummary.paymentTransactionAmount != null" >
      and `payment_transaction_amount` = #{settlementDailySummary.paymentTransactionAmount,jdbcType=DECIMAL}
    </if>
  </select>

3.传多个参数的方法:对于传的是多个基本数据类型的情况,必须在每个参数前使用注解标识(在接口的参数前添加@Param(value="参数名")),不然无法区分基本数据类型哪个是哪个。对于有不同的复杂数据类型的多个参数,建议也统一采用注解标识。通过#{对象.属性名}或#{Map的key值}即可获取传入的参数值(#也可以看情况换成$,但是要注意在mybatis中使用$有可能会产生sql注入)。

举例:

接口代码:

List<FundoutRequest> selectPage(@Param("fundoutRequest") FundoutRequest fundoutRequest, @Param("pageable")0 Pageable pageable);
</pre><p>Mapper的mybatis查询代码:</p><pre name="code" class="java"><select id="selectPage" resultMap="BaseResultMap" >
    select 
    <include refid="Base_Column_List" />
    from cap_settlement_daily_summary where 1 = 1 
        <if test="settlementDailySummary.id != null" >
      and `id` = #{settlementDailySummary.id,jdbcType=BIGINT}
    </if>
        <if test="settlementDailySummary.accountingDate != null" >
      and `accounting_date` = #{settlementDailySummary.accountingDate,jdbcType=VARCHAR}
    </if>
        <if test="settlementDailySummary.merchantId != null" >
      and `merchant_id` = #{settlementDailySummary.merchantId,jdbcType=VARCHAR}
    </if>
        <if test="settlementDailySummary.merchantName != null" >
      and `merchant_name` = #{settlementDailySummary.merchantName,jdbcType=VARCHAR}
    </if>
        <if test="settlementDailySummary.paymentTransactionCount != null" >
      and `payment_transaction_count` = #{settlementDailySummary.paymentTransactionCount,jdbcType=INTEGER}
    </if>
        <if test="settlementDailySummary.paymentTransactionAmount != null" >
      and `payment_transaction_amount` = #{settlementDailySummary.paymentTransactionAmount,jdbcType=DECIMAL}
    </if>
        <if test="pageable.sort != null" >
      order by 
      <foreach collection="pageable.sort" item="order" separator="," >
        <if test="
   order.property == 'id' 
   || order.property == 'accounting_date'
   || order.property == 'merchant_id'
   || order.property == 'merchant_name'
   || order.property == 'payment_transaction_count'
   || order.property == 'payment_transaction_amount'
        " >
        ${order.property} ${order.direction}
        </if>
      </foreach>
    </if>
    <if test="pageable.offset >= 0 and pageable.pageSize > 0" >
      limit ${pageable.offset}, ${pageable.pageSize}
    </if>
  </select>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值