• MyBatis学习(二):补充


    1、Mybatis参数传递

    Mybatis 接口方法中可以接收各种各样的参数,如下:

    • 多个参数
    • 单个参数:单个参数又可以是如下类型
      • POJO 类型
      • Map 集合类型
      • Collection 集合类型
      • List 集合类型
      • Array 类型
      • 其他类型
    1.1 多个参数

    如下面的代码,就是接收两个参数,而接收多个参数需要使用 @Param 注解,那么为什么要加该注解呢?这个问题要弄明白就必须来研究Mybatis 底层对于这些参数是如何处理的。

    User select(@Param("username") String username,@Param("password") String password);
    
    • 1
    <select id="select" resultType="user">
    	select *
        from tb_user
        where 
        	username=#{username}
        	and password=#{password}
    select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    我们在接口方法中定义多个参数,Mybatis 会将这些参数封装成 Map 集合对象,值就是参数值,而键在没有使用 @Param 注解时有以下命名规则:

    • 以 arg 开头 :第一个参数就叫 arg0,第二个参数就叫 arg1,以此类推。如:

      map.put(“arg0”,参数值1);

      map.put(“arg1”,参数值2);

    • 以 param 开头 : 第一个参数就叫 param1,第二个参数就叫 param2,依次类推。如:

      map.put(“param1”,参数值1);

      map.put(“param2”,参数值2);

    代码验证:

    • UserMapper 接口中定义如下方法

      User select(String username,String password);
      
      • 1
    • UserMapper.xml 映射配置文件中定义SQL

      <select id="select" resultType="user">
      	select *
          from tb_user
          where 
          	username=#{arg0}
          	and password=#{arg1}
      select>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      或者

      <select id="select" resultType="user">
      	select *
          from tb_user
          where 
          	username=#{param1}
          	and password=#{param2}
      select>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 运行代码结果如下
      在这里插入图片描述

      在映射配合文件的SQL语句中使用用 arg 开头的和 param 书写,代码的可读性会变的特别差,此时可以使用 @Param 注解。

    在接口方法参数上使用 @Param 注解,Mybatis 会将 arg 开头的键名替换为对应注解的属性值。

    代码验证:

    • UserMapper 接口中定义如下方法,在 username 参数前加上 @Param 注解

      User select(@Param("username") String username, String password);
      
      • 1

      Mybatis 在封装 Map 集合时,键名就会变成如下:

      map.put(“username”,参数值1);

      map.put(“arg1”,参数值2);

      map.put(“param1”,参数值1);

      map.put(“param2”,参数值2);

    • UserMapper.xml 映射配置文件中定义SQL

      <select id="select" resultType="user">
      	select *
          from tb_user
          where 
          	username=#{username}
          	and password=#{param2}
      select>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 运行程序结果没有报错。而如果将 #{} 中的 username 还是写成 arg0

      <select id="select" resultType="user">
      	select *
          from tb_user
          where 
          	username=#{arg0}
          	and password=#{param2}
      select>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 运行程序则可以看到错误

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0xUnom5g-1662900976231)(assets/image-20210805231727206.png)]

    结论:以后接口参数是多个时,在每个参数上都使用 @Param 注解。这样代码的可读性更高。

    1.10.2 单个参数
    • POJO 类型

      直接使用。要求 属性名参数占位符名称 一致

    • Map 集合类型

      直接使用。要求 map集合的键名参数占位符名称 一致

    • Collection 集合类型

      Mybatis 会将集合封装到 map 集合中,如下:

      map.put(“arg0”,collection集合);

      map.put(“collection”,collection集合;

      可以使用 @Param 注解替换map集合中默认的 arg 键名。

    • List 集合类型

      Mybatis 会将集合封装到 map 集合中,如下:

      map.put(“arg0”,list集合);

      map.put(“collection”,list集合);

      map.put(“list”,list集合);

      可以使用 @Param 注解替换map集合中默认的 arg 键名。

    • Array 类型

      Mybatis 会将集合封装到 map 集合中,如下:

      map.put(“arg0”,数组);

      map.put(“array”,数组);

      可以使用 @Param 注解替换map集合中默认的 arg 键名。

    • 其他类型

      比如int类型,参数占位符名称 叫什么都可以。尽量做到见名知意

    2、注解实现CRUD

    使用注解开发会比配置文件开发更加方便。如下就是使用注解进行开发

    @Select(value = "select * from tb_user where id = #{id}")
    public User select(int id);
    
    • 1
    • 2

    注意:

    • 注解是用来替换映射配置文件方式配置的,所以使用了注解,就不需要再映射配置文件中书写对应的 statement

    Mybatis 针对 CURD 操作都提供了对应的注解,已经做到见名知意。如下:

    • 查询 :@Select
    • 添加 :@Insert
    • 修改 :@Update
    • 删除 :@Delete

    在这里插入图片描述

  • 相关阅读:
    ACM MM 2022 Oral | PRVR: 新的文本到视频跨模态检索子任务
    Hadoop总结
    ABP微服务学习系列-修复System.Text.Json不支持序列化Exception
    HTTP请求和响应(补充HTTP协议)
    软件工程与计算总结(十二)详细设计的基础
    #php的pecl工具#
    微信小程序案例2-3:婚礼邀请函
    [附源码]Python计算机毕业设计Django学生疫情防控信息填报系统
    软件项目管理文档模板目录
    用PS给证件照换底色
  • 原文地址:https://blog.csdn.net/john1516/article/details/126809399