Mybatis的@Param注解

关于Mybatis @Param 注解,官方文档: http://www.mybatis.org/mybatis-3/zh/java-api.html

说明:@Param Parameter N/A 如果你的映射器的方法需要多个参数, 这个注解可以被应用于映射器的方法 参数来给每个参数一个名字。否则,多 参数将会以它们的顺序位置来被命名 (不包括任何 RowBounds 参数) 比如。 #{param1} , #{param2} 等 , 这 是 默 认 的 。 使 用 @Param(“person”),参数应该被命名为 #{person}。

1、传递单个参数时,不使用@Param注解

mapper层: ImsrobotMapper.java 

1 public interface ImsrobotMapper extends BaseMapper<Imsrobot>{
2     List<Imsrobot> query(Integer id); 
3 }

mapper文件: ImsrobotMapper.xml 

1 <select id='query' resultType="java.util.Map">
2     select *from imsrobot where robot_id=#{id}
3 </select>

这里只有一个参数,java 接口不使用 @Param 注解,同时 mapper 文件也不需要使用 parameterType 这个参数,Mybatis会 根据实体类(entity)的类型自动识别并匹配javaBean(这一部分在 spring配置文件关于数据源那一部分)

2、传递单个参数时,使用@Param注解

mapper层: ImsrobotMapper.java 

1 public interface ImsrobotMapper extends BaseMapper<Imsrobot>{
2     List<Imsrobot> query(@Param("imsrobot")Integer id); 
3 }
mapper文件: ImsrobotMapper.xml 
1 <select id='query' resultType="java.util.Map">
2     select *from imsrobot where robot_id=#{imsrobot}
3 </select>

 当使用javaBean作为对象的时候,在写 SQL 语句的时候,必须指定参数类型  parameterType="com.ljq.cs.entity.robotId" ,同时在 #{ } 取值的时候不能直接填入 javaBean 的属性,必须这样使用 imsrobot.id  ;否则,会抛出参数类型不匹配异常
如果不是 javaBean ,则需要在写 SQL 语句的时候,  #{ } 中的属性必须与 @Param中定义的一致,eg:  @Param("username") , #{username} ,这样才可以

3、传递多个参数,使用@Param注解
mapper层: ImsrobotMapper.java 
1 List<Imsrobot> queryByMonthCompany(@Param("current_month")String monthId, @Param("company")Integer companyId);

mapper文件: ImsrobotMapper.xml 

1 <select id="queryByMonthCompany" resultType="java.util.Map">
2     select * from imsrobot where current_month = #{monthId} and company = #{companyId}
3 </select>

 这里 @Param 中定义的变量名必须和 mapper 中保持一致才可以

4、传递多个参数,不使用@Param注解

其实从第一种场景中已经可以实现传递多个参数了,即把多个参数封装到一个 javaBean 中就可以实现了,但是如果是两个或者多个 javaBean 的时候,可以通过使用@Param注解的方式来实现,但是需要把每个 javaBean 中的属性全部拆分出来,这样就增加了巨大的代码量,因此不推荐这么做
那么有没有可以不使用@Param注解,同样也可以传递多个参数(尤其是多个 javaBean)呢?答案是有的,废话不多说,直接上代码

mapper层: ImsrobotMapper.java 

1 List searchUser(Map<String,Object>);

 service层: ImsrobotServiceIml.java 

1 UserInfo userInfo = new UserInfo();
2 Pagination page = new Pagination();
3 Map<String,Object> map = new HashMap<>;
4 map.put("userInfo",userInfo);
5 pam.put("page",page);
6 userService.searchUser(map);
mapper文件: ImsrobotMapper.xml 
 
<select id="searchUser" parameterType="java.util.Map" resultType="UserInfo">
        select *
        from t_userinfo user 
        where 1 =1
        <if test="user.uname != null and ''!= user.uname ">
            and user.uname like '%${userInfo.uname}$%'
        </if>
Copy
    &lt;if test="page.order != null and page.order == 10" &gt;
        order by user.id asc
    &lt;/if&gt;
    limit ${page.pagenum * page.limitnum}, #{page.limitnum}
    
&lt;/select&gt;

 

posted @ 2020-10-21 14:38  小熊公子  阅读(644)  评论(0)    收藏  举报