SpringBoot使用MyBatis时的几种传参规范示例

 更新时间:2022年02月20日 10:29:23   作者:工作事小摸鱼事大  
使用Mybatis作为持久层框架时,对于数据库的增删改查等操作都需要参数的传递,本文就详细的介绍了一下SpringBoot使用MyBatis时的几种传参规范示例,感兴趣的可以了解一下

使用Mybatis作为持久层框架时,对于数据库的增删改查等操作都需要参数的传递,这里学习记录一下MyBatis中可用的参数传递方式。

1. 单个简单参数传递

使用 MyBatis 传递单个参数时比较简单,形式如#{a},#{b},#{param1}等都可以在 MyBatis 中获取到唯一参数,但是参数名尽量和入参名一致,这样更符合开发规范。

Mapper 文件定义

UserInfo selectById(String userId);

xml 文件定义

  • 单个参数时,标签中可不定义参数类型
<select id="selectByUserId" resultType="com.shone.entity.UserInfo">
    select user_id, user_name from user_info where user_id=#{userId}
</select>

2. 匿名参数顺序传递

匿名参数传递时使用的是 MyBatis 中索引传递的方式,对于传递的多个参数,在sql语句标签中使用#{param1}#{param2}等索引依次代表传入的参数值。

Mapper 文件

  • 使用匿名参数传递时,接口中定义的方法参数无需使用注解
UserInfo selectByNameAndAge(String userName, Integer age);

xml 文件

  • xml中读取参数时可以使用使用arg0, arg1, param1, param2等形式
  • 参数有多个类型且匿名,因此不需要指定入参类型
  • Mapper中没有使用注解,因此直接使用参数名时会报错参数名找不到
<select id="selectByNameAndAge" resultType="com.shone.entity.UserInfo">
    select user_id, user_name from user_info where user_name=#{param1} and user_gender=#{param2}
</select>
  • 匿名参数传递方法可读性差,对后期维护不友好,不符合开发规范。

3. 使用@Param注解传递

@Param注解用于指定key,指定了key之后,在sql标签中可以使用key来索引对应的参数值。

Mapper 文件

  • 接口中定义时使用 @Param注解指定参数对应的key
UserInfo selectByNameAndAge(@Param("userName") String userName, @Param("age") Integer age);

xml 文件

  • 不需要指定传入参数类型
  • 使用注解指定的key就可以获取到对应入参值
<select id="selectByNameAndAge" resultType="com.shone.entity.UserInfo">
    select user_id, user_name from user_info where user_name=#{userName} and user_gender=#{age}
</select>

@Param注解传参使用时清晰简洁明了,符合开发规范,在参数较少时建议使用该方式。

4. 使用Map传递参数

MyBatis框架底层就是将入参转换成Map类型进行传递的,因此我们也可以使用Map进行参数的传递,传入的参数在sql标签中可以根据Map中的key值直接获取。

使用时,需要将传入的参数放入到map中

  map.put("userName","tom");
  map.put("gender",1);

Mapper 文件

UserInfo selectByNameAndAge(Map<String, Object> map);

xml 文件

  • 入参类型指定为Map
<select id="selectByNameAndAge" resultType="com.shone.entity.UserInfo" paramterType="map">
    select user_id, user_name from user_info where user_name=#{userName} and user_gender=#{age}
</select>

使用Map传递参数符合MyBatis底层的设计,性能也没有问题,但是在开发中由于将所有值封装成为map,无法直观看到map中可能含有的参数,在后期维护上不太友好。

5. 使用JavaBean(POJO)传递

除了Map方式,还可以使用JavaBean的方式来传递多个参数,此时在sql标签中直接使用bean对象的属性来索引参数值,注意bean对象中 需要有相应参数的get方法,否则无法正常获取。

使用javabean作为参数,需要先定义JavaBean

@Data
public class UserInfo {
  private String userName;
  private Integer age;
}

Mapper 文件

UserInfo selectByEntity(UserInfo userInfo);

xml 文件

  • 指定入参类型为相应的JavaBean全路径限定类名
<select id="selectByNameAndAge" resultType="com.shone.entity.UserInfo" paramterType="com.shone.entity.UserInfo">
    select user_id, user_name from user_info where user_name=#{userName} and user_gender=#{age}
</select>

JavaBean的参数传递方式更符合项目开发的规范,实际使用时简洁明了,在参数较多时建议使用这种方式,创建JavaBean来作为参数传递对象。

6. 使用List、Array、Set传递

List、Array、Set等方式的传参通常用于sql标签中的in操作,即用于MyBatis中的标签。

使用list或array时,一般是做in操作,只有一个参数。

Mapper 文件

UserInfo selectByIdList(List<String> userIdList);

xml 文件

  • 不需要指定入参类型,或指定为List
  • 使用标签处理sql中的in操作
  • 如果参数是list,则collection为list;如果参数类型是array,则collection是array
  • 如果是多个参数或者是对象的属性值作为list,则传参应为map/bean类型,collection应为对象属性中的list
<select id="selectByIdList" resultMap="userResultMap">
    select * from user_info where status=1
    and user_id in
    <foreach collection="list" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

到此这篇关于SpringBoot使用MyBatis时的几种传参规范示例的文章就介绍到这了,更多相关SpringBoot MyBatis 传参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • EasyExcel实现读取excel中的日期单元格并自动判定终止读取

    EasyExcel实现读取excel中的日期单元格并自动判定终止读取

    这篇文章主要为大家详细介绍了EasyExcel如何实现读取excel中的日期单元格并自动判定终止读取,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • java中计算集合的交差并集示例代码

    java中计算集合的交差并集示例代码

    今天突然想Java如何计算集合的交差并集,主要是看Python语言的时候想起来的。下面这篇文章主要给大家介绍了关于java中计算集合的交差并集的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • Java数据类型实现自动与强制转换的示例代码

    Java数据类型实现自动与强制转换的示例代码

    Java数据类型之间的转换有自动转换和强制类型转换,这篇文章主要给大家介绍Java数据类型如何实现自动转换与强制转换,需要的朋友可以参考下
    2023-05-05
  • 使用Java Minio搭建自己的文件系统详解

    使用Java Minio搭建自己的文件系统详解

    这篇文章主要介绍了使用Java Minio搭建自己的文件系统的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • Java调用Zookeeper的实现步骤

    Java调用Zookeeper的实现步骤

    本文主要介绍了Java调用Zookeeper的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Spring Bean的线程安全问题

    Spring Bean的线程安全问题

    Spring容器中的Bean是否线程安全,本文主要介绍了Spring Bean的线程安全问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 详解SpringBoot2 使用Spring Session集群

    详解SpringBoot2 使用Spring Session集群

    这篇文章主要介绍了SpringBoot2 使用Spring Session集群,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • 在SpringBoot中使用JWT的实现方法

    在SpringBoot中使用JWT的实现方法

    这篇文章主要介绍了在SpringBoot中使用JWT的实现方法,详细的介绍了什么是JWT和JWT实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Java 实战练手项目之酒店管理系统的实现流程

    Java 实战练手项目之酒店管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+SSM+jsp+mysql+maven实现一个酒店管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • springboot整合ehcache和redis实现多级缓存实战案例

    springboot整合ehcache和redis实现多级缓存实战案例

    这篇文章主要介绍了springboot整合ehcache和redis实现多级缓存实战案例,从源码角度分析下多级缓存实现原理,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论