Mybatis实战练习六【批量删除&Mybatis参数传递】(下)

简介: Mybatis实战练习六【批量删除&Mybatis参数传递】

Mybatis参数传递


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


  • 多个参数


  • 单个参数:单个参数又可以是如下类型


POJO 类型


Map 集合类型


Collection 集合类型


List 集合类型


Array 类型


其他类型


多个参数

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


User select(@Param("username") String username,@Param("password") String password);
<select id="select" resultType="user">
  select *
    from tb_user
    where 
      username=#{username}
      and password=#{password}
</select>


我们在接口方法中定义多个参数,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);

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


<select id="select" resultType="user">
  select *
    from tb_user
    where 
      username=#{arg0}
      and password=#{arg1}
</select>

或者


<select id="select" resultType="user">
  select *
    from tb_user
    where 
      username=#{param1}
      and password=#{param2}
</select>

运行代码结果如下  

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


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


代码验证:


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


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

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>

运行程序结果没有报错。而如果将 #{} 中的 username 还是写成 arg0  


<select id="select" resultType="user">
  select *
    from tb_user
    where 
      username=#{arg0}
      and password=#{param2}
</select>

运行程序则可以看到错误  

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


单个参数

  • 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月前
|
SQL XML Java
mybatis Mapper的概念与实战
MyBatis 是一个流行的 Java 持久层框架,它提供了对象关系映射(ORM)的功能,使得Java对象和数据库中的表之间的映射变得简单。在MyBatis中,Mapper是一个核心的概念,它定义了映射到数据库操作的接口。简而言之,Mapper 是一个接口,MyBatis 通过这个接口与XML映射文件或者注解绑定,以实现对数据库的操作。
39 1
|
5月前
|
SQL Java 数据库连接
mybatis常见分页技术和自定义分页原理实战
mybatis常见分页技术和自定义分页原理实战
|
5月前
|
SQL Java 数据库连接
MyBatis练习(1)数据表中的数据封装成JavaBean
MyBatis练习(1)数据表中的数据封装成JavaBean
34 0
|
2月前
|
SQL Java 数据库连接
Mybatis技术专题(3)MybatisPlus自带强大功能之多租户插件实现原理和实战分析
Mybatis技术专题(3)MybatisPlus自带强大功能之多租户插件实现原理和实战分析
52 1
|
2月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
5月前
|
Java 数据库连接 微服务
Java程序员必学知识:高并发+微服务+数据结构+Mybatis实战实践
BATJ最全架构技术合集:高并发+微服务+数据结构+SpringBoot 关于一线互联网大厂网站的一些特点:用户多,分布广泛、大流量,高并发、海量数据,服务高可用、安全环境恶劣,易受网络攻击、功能多,变更快,频繁发布、从小到大,渐进发展、以用户为中心。 如果你工作中够仔细,你会发现这些特点跟高并发、分布式、微服务、Nginx这些技术密切相关的,是因为只要你的公司在上升,用户量级都会与日俱增,高性能、高并发的问题自然避免不了,话不多说往下看。
|
5月前
|
SQL Java 数据库连接
MyBatis练习(2)查询所有的一级分类,同时查询二级分类,以及查询二级分类下的所有图书
MyBatis练习(2)查询所有的一级分类,同时查询二级分类,以及查询二级分类下的所有图书
23 0
|
5月前
|
Java 数据库连接 数据库
Spring Boot整合MyBatis操作mysql数据库实战(附源码 超详细)
Spring Boot整合MyBatis操作mysql数据库实战(附源码 超详细)
172 0
|
2月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
45 1
|
2月前
|
druid Java 数据库连接
Spring Boot3整合MyBatis Plus
Spring Boot3整合MyBatis Plus
46 1