zoukankan      html  css  js  c++  java
  • MyBatis传递参数

    MyBatis传递参数

    一、使用 map 接口传递参数

      在 MyBatis 中允许 map 接口通过键值对传递多个参数,把接口方法定义为

    public List<Role> findRolesByMap(Map<String , Object> parameterMap);

       此时,传递给映射器的是个 map对象,使用它SQL 中设置对应的参数,如代码清单, 参数 roleName note , 要求map 的

    <select id=” findRolesByMap ” parameterType=”map” resultType=”role”>
      select id, role name as roleName , note from t_role
        where role name like concat ( ’%’, #{ roleName } ,’%’)
          and note like concat ( ’%’, #{ note } ,’%’)
    </select>

      严说,map 适用 乎所有场景 但是我们用得不多。原因有两个:首先 , map 值对合,

    使用者要通过阅读它的键 才能明了其其次 ,使用 map 能限定其传递的数据类型

    业务性质不强 可读性使用者要读懂代码才能知道需要传递什么参数给它

    不推荐用这方式传递多参数。

    二、使用注解传递多个参数

      MyBatis 为 开发者提供了 注解@Param ( org.apache. atis .annotations.Param ),

     以通过它去定义映射参数名称 使用它可 得到更好可读性, 方法定义为:

    public List<Role> findRolesByAnnotation (@Param (”roleName” ) String rolename ,@Param (”note” ) String note) ;

      此时代可读性大大提高了,能明确参数 roleName 是角称,而 note 是备注 , 目了然 时候需要修改映射文件的代码,如代码清单

    <select id=” findRolesByAnnotation ” resultType=”role ”>
      select 工 d , role name as roleName , note from t_role
        where role name like concat (’%’,#{ roleName },’%’)
          and note like concat ( ’% ’,#{ note },’%’)
    </select>

      注意 ,此时并不需要给出 parameterType 性,让 MyBatis 自动探索便可以了 。如果 SQL 复杂,拥有大于 10 个参数

    那么接口方法的参数个数就多了,使用起来就很不容易,不过不必担心, MyBatis 还提供传递 Java Bean 的形式。

    三、通过 JavaBean 传递多个参数

      先定义一个参数的 POJO一RoleParams,如代码清单

    public class RoleParams {
        private String roleName ;
        private String note ;
        /**setter and getter**/
    }

      此时把接口方法定义为:

    public List<Role> findRolesByBean(RoleParams roleParam);

      JavaBean 的属性 roleName 代表角色名称,而 note 代表备注 ,代码清单

    <select id=”findRolesByBean”  parameterType= ”cn.lzc.ssm.mybatis.po.RoleParams” resultType=”role” >
      select id, role name as roleName, note from t_role
      where role name like concat ( ’%’, #roleName },’%’ )
      and note like concat ( ’%’, #{note }, ’%’)
    </select>

    四、混合使用

      在某些情况下可能需要混合使用几种方法来传递参数。举个例子,查询个角色,可以通过角色名称和备注进行查询,与此同时还需要支持分页,而分页的 POJO 实现如代清单

    public class PageParams {
        private int start ;
        private int limit;
        /*******setter and getter*********/
    }

      这个时候接口设计如下

    public List<Role> findByMix (@Param (”params”) RoleParams roleParams ,@Param (”page”) PageParam PageParam) ;

      这样不仅是可行的,也是合理的,当然 MyBatis 也为此做了支持,把映射文件修改为如代码清单

    <select id=”findByMix” resultType=”role” >
      select id, role name as roleName , note from t_role
      where role name like
      concat (’%’, #{params.roleName}, ’%’}
      and note like concat ( ’%’, #{params.note} ,’%’)
      limit #{page.start}, #{page.limit}
    </select>

      这样就能使用混合参数了,其中 MyBatis 对 params 和 page 这Java Bean 参数提供
      EL (中间语言)支持,为编程带来了很多的便利。

    五、总结

      描述了 4 种传递多个参数的方法,对各种方法加以点评和总结,以利于我们在实际操作中的应用。

    • 使用 map 传递参数导致了业务可读性的丧失,导致后续扩展和维护的困难,在实际的应用中要果断废弃这种方式。
    • 使用@Param 注解传递多个参数,受到参数个数 ( n )的影响。当 n<=5 时, 这是最佳的传参方式,它比用 Java Bean 更好,因为它更加直观 当 n> 5 时, 多个参数将给调用带来困难,此时不推荐使用它。
    • 当参数个数多于 5 个时,建议使用 Java Bean 方式。
    • 对于使用混合参数的,要明确参数的合理性。
  • 相关阅读:
    ie标题修改
    求两个数的商在单元格内设置公示显示#ERROR
    明细报表汇总使用说明
    学习了GDI+ 做了个简单的折线图。
    C#读写文本文件,字符串截取
    C#winform去除btn按钮的边框
    观江南大学设计学院2011届迎新晚会有感
    c++的一个程序源码记录
    c#中委托的概念一个总结demo
    《平凡的世界》中田晓霞和孙少平的爱情
  • 原文地址:https://www.cnblogs.com/limn/p/9031988.html
Copyright © 2011-2022 走看看