【Mybatis知识点整理】--- mapper请求参数使用总结


本文源码地址: https://github.com/nieandsun/NRSC-STUDY

1 Map作为请求参数 — 尽量避免使用

注意:不建议使用Map作为参数 — 很多公司的开发规范里都直接【强制】禁止使用map作为参数
(1)无法见名之义
(2)不好维护

  • Mapper类
/***
 * 使用Map时不要加@Param注解 ---> 加了会报错
 * @param params
 * @return
 */
List<TUser> selectByUsernameAndGender(Map<String, Object> params);
/***
 * 使用Map一种比较画蛇添足的方式
 * @param params
 * @return
 */
List<TUser> selectByUsernameAndGenderMap2(@Param("params") Map<String, Object> params);
  • 与Mapper类对应的mapper.xml
 <!--请求参数为Map方式-->
 <select id="selectByUsernameAndGender" resultMap="BaseResultMap">
     select
     <include refid="Base_Column_List"/>
     from t_user u
     where u.gender =#{gender} and u.username like CONCAT('%', #{username}, '%')
 </select>
 <!--请求参数为map,且用了@Param注解时 (画蛇添足)-->
 <select id="selectByUsernameAndGenderMap2" resultMap="BaseResultMap">
     select
     <include refid="Base_Column_List"/>
     from t_user u
     where u.username like CONCAT('%', #{params.username}, '%') and
     u.gender =#{params.gender}
 </select>

2 多个基本类型作为参数

注意:
(1)建议加上@Param注解
(2)参数在3-5个,如果超过这个数,建议自己构建po类

  • Mapper类
/***
 * 多个参数时,最好加上@Param注解 --- 因为有可能会报错
 * @param username
 * @param gender
 * @return
 */
List<TUser> selectByUsernameAndGenderParam(@Param("username") String username, @Param("gender") String gender);
/***
 * 不加@Param注解也可以 --- 但我一般都会用上面的方式
 * @param username
 * @param gender
 * @return
 */
List<TUser> selectByUsernameAndGenderParam2(String username, String gender);
  • 与Mapper类对应的mapper.xml
 <!--请求参数为多个参数方式1-->
 <select id="selectByUsernameAndGenderParam" resultMap="BaseResultMap">
     select
     <include refid="Base_Column_List"/>
     from t_user u
     where u.username like CONCAT('%', #{username}, '%') and
     u.gender =#{gender}
 </select>
 <!--请求参数为多个参数方式2||||和上面的代码一样-->
 <select id="selectByUsernameAndGenderParam2" resultType="TUser">
     select
     <include refid="Base_Column_List"/>
     from t_user u
     where u.username like CONCAT('%', #{username}, '%') and
     u.gender =#{gender}
 </select>

3 PO类作为请求参数

注意 :
(1)使用PO类时,可以不加@Param注解 —》 其实我也老是会忘,因为加了也不会错

  • Mapper类
 /***
  * 使用pojo做参数 --- 不加@Param
  * @param user
  * @return
  */
 List<TUser> selectByUsernameAndGenderPojo(UserPo user);

 /***
  * 使用po类做参数 --- @Param (画蛇添个足)
  * @param user
  * @return
  */
 List<TUser> selectByUsernameAndGenderPojo2(@Param("user") UserPo user);
  • 与Mapper类对应的mapper.xml
 <!--请求参数为po类-->
 <select id="selectByUsernameAndGenderPojo" resultMap="BaseResultMap">
     select
     <include refid="Base_Column_List"/>
     from t_user u
     where u.username like CONCAT('%', #{username}, '%') and
     u.salary =#{salary}
 </select>
 <!--请求参数为po类(画蛇添足版)-->
 <select id="selectByUsernameAndGenderPojo2" resultMap="BaseResultMap">
     select
     <include refid="Base_Column_List"/>
     from t_user u
     where u.username like CONCAT('%', #{user.username}, '%') and
     u.salary =#{user.salary}
 </select>
发布了189 篇原创文章 · 获赞 187 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/nrsc272420199/article/details/102907320