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 方式。
    • 对于使用混合参数的,要明确参数的合理性。
  • 相关阅读:
    Django(app的概念、ORM介绍及编码错误问题)
    Django(完整的登录示例、render字符串替换和redirect跳转)
    Construct Binary Tree from Preorder and Inorder Traversal
    Single Number II
    Single Number
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Binary Tree Zigzag Level Order Traversal
    Recover Binary Search Tree
    Add Binary
  • 原文地址:https://www.cnblogs.com/limn/p/9031988.html
Copyright © 2011-2022 走看看