• mybatis 传递多个参数


    方法一:使用map接口传递参数

      严格来说,map适用几乎所有场景,但是我们用得不多。原因有两个:首先,map是一个键值对应的集合,使用者要通过阅读它的键,才能明了其作用;其次,使用map不能限定其传递的数据类型,因此业务性质不强,可读性差,使用者要读懂代码才能知道需要传递什么参数给它,所以不推荐用这种方式传递多个参数。

    public List<Role> findRolesByMap(Map<String, Object> parameterMap);
    <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>

    方法二:使用注解传递多个参数
      MyBatis为开发者提供了一个注解@Param(org.apache.ibatis.annotations.Param),可以通过它去定义映射器的参数名称,使用它可以得到更好的可读性
      这个时候需要修改映射文件的代码,此时并不需要给出parameterType属性,让MyBatis自动探索便可以了
      使可读性大大提高,使用者也方便了,但是这会带来一个麻烦。如果SQL很复杂,拥有大于10个参数,那么接口方法的参数个数就多了,使用起来就很不容易,不过不必担心,MyBatis还提供传递Java Bean的形式。

    public List<Role> findRolesByAnnotation(@Param("roleName") String rolename, @Param("note") String note);
    <select id="findRolesByAnnotation" resultType="role">
        select id, role_name as roleName, note from t_role where role_name like concat('%', #{roleName}, '%') and note like concat('%', #{note}, '%')
    </select>

    方法三:通过Java Bean传递多个参数

    public List<Role> findRolesByBean(RoleParams roleParam);
    <select id="findRolesByBean" parameterType="com.xc.pojo.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>

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

    public List<Role> findByMix(@Param("params") RoleParams roleParams, @Param("page") PageParam PageParam);
    <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>

    总结:
    描述了4种传递多个参数的方法,对各种方法加以点评和总结,以利于我们在实际操作中的应用。
      •使用map传递参数导致了业务可读性的丧失,导致后续扩展和维护的困难,在实际的应用中要果断废弃这种方式。
      •使用@Param注解传递多个参数,受到参数个数(n)的影响。当n≤5时,这是最佳的传参方式,它比用Java Bean更好,因为它更加直观;当n>5时,多个参数将给调用带来困难,此时不推荐使用它。
      •当参数个数多于5个时,建议使用Java Bean方式。
      •对于使用混合参数的,要明确参数的合理性。

  • 相关阅读:
    java算法
    2012 要找回曾经的忘我的激情
    啊啊啊
    利用ORACLE JOB 模拟多线程应用
    有没有一种数据库叫思科
    且行好事,莫问前程
    女人浪漫的好点子
    What is the difference between interface and abstract class
    优秀是一种习惯
    C#判断ContextMenuStrip右键菜单的来源(从哪个控件弹出来的) (转载)
  • 原文地址:https://www.cnblogs.com/ooo0/p/10932929.html
Copyright © 2020-2023  润新知