zoukankan      html  css  js  c++  java
  • MyBatis_传入参数的问题

    一、单个参数

      1、基本数据类型

        (1)直接使用

          List<ChargeRuleDO> tests(long id);
          <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
            select * from t_charge_rule t where t.id = #{id}
          </select>
          #{}中的参数名与方法中的参数名一致

        (2)使用注解
          List<ChargeRuleDO> tests(@Param("aid") long bid);
          <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
            select * from t_charge_rule t where t.id = #{aid}
          </select>
          #{}中的参数名与方法中的@Param()里的参数名一致

      2、复杂数据类型(这里主要是指Java实体类)
        (1)直接使用
          List<ChargeRuleDO> tests(TestQO testQO);
          <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
            select * from t_charge_rule t where t.id = #{id} and t.rule_type=#{ruleType}
          </select>
          #{}中的参数名与方法中的参数的属性名一致

        (2)使用注解
          List<ChargeRuleDO> tests(@Param("atestQO") TestQO btestQO);
          <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
            select * from t_charge_rule t where t.id = #{atestQO.id} and t.rule_type=#{atestQO.ruleType}
          </select>
          #{}中的参数名与方法中的@Param()里的参数对应的属性名一致,而且必须写成"#{atestQO.id}"的格式,不能简写成"#{id}".

    二、多个参数
      1、基本数据类型
        (1)直接使用
          List<ChargeRuleDO> tests(long id,String ruleType);
          <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
            select * from t_charge_rule t where t.id = #{0} and t.rule_type=#{1}
          </select>
          这里改用#{index},其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

        (2)使用注解
          List<ChargeRuleDO> tests(@Param("id") long id,@Param("ruleType") String ruleType);
          <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
            select * from t_charge_rule t where t.id = #{id} and t.rule_type=#{ruleType}
          </select>
          #{}中的参数名与方法中的@Param()里的参数名一致

      2、复杂数据类型
        (1)直接使用
          尝试了两种取参数的方法都不行

        (2)使用注解
          List<ChargeRuleDO> tests(@Param("testQO")TestQO testQO,@Param("testQO2")TestQO2 testQO2);
          <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
            select * from t_charge_rule t where t.id = #{testQO.id} and t.rule_type=#{testQO.ruleType} and t.user_id=#{testQO2.uesrId}
          </select>
          #{}中的参数名与方法中的@Param()里的参数对应的属性名一致,而且必须写成"#{testQO.id}"的格式,不能简写成"#{id}".

      3、基本数据类型与复杂数据类型混合使用
        因为在多参数的情况下,复杂数据类型不能直接使用,所以这里主要尝试基本数据类型直接使用并且复杂数据类型使用注解这一种情况
        List<ChargeRuleDO> tests(long id,String ruleType,@Param("testQO2")TestQO2 testQO2);
        <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
          select * from t_charge_rule t where t.id = #{0} and t.rule_type=#{1} and t.user_id=#{testQO2.uesrId}
        </select>

    三、List参数
      List<ChargeRuleDO> tests(List<long> list);
      <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
        select * from t_charge_rule t where t.id in
          <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
            #{item}
          </foreach>
      </select>

      以上是我遇到过的,并且曾经犯过错误的几种方式.当然还有别的一些传参方式,在这里我就不一一写出来了,大家可以自己去百度,等遇到了,我再补充.

  • 相关阅读:
    server 2016部署网络负载平衡(NLB)
    Windows Server 2012 搭建DHCP及远程路由访问
    第一章 Windows Server 2016网络管理
    不懂 ZooKeeper?没关系,这一篇给你讲的明明白白
    更新bios后进不了系统
    ICP备案和ICP许可证
    C# 解决“请求被中止: 未能创建 SSL/TLS 安全通道”的问题
    Is EnableViewStateMAC=true compulsory for ViewStateEncryption in an ASP.Net Website?
    Uses for MachineKey in ASP.NET
    5月底更新后桌面右下角出现的新闻资讯怎么删除?
  • 原文地址:https://www.cnblogs.com/xiancheng/p/5543014.html
Copyright © 2011-2022 走看看