我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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 传参内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录