当前位置: 首页 > news >正文

安徽鑫华建设有限公司网站app数据分析软件

安徽鑫华建设有限公司网站,app数据分析软件,小程序变成网页链接,设计电子商务网站建设方案MyBatis参数传递 传参方式 1. 使用 #{} 占位符 这是 MyBatis 中最常用的参数传递方式。它将参数直接替换到 SQL 语句中的占位符位置。 单个参数&#xff1a; <select id"selectUserById" resultType"User">SELECT * FROM users WHERE id #{id}…

MyBatis参数传递

传参方式

1. 使用 #{} 占位符

这是 MyBatis 中最常用的参数传递方式。它将参数直接替换到 SQL 语句中的占位符位置。

单个参数:

<select id="selectUserById" resultType="User">SELECT * FROM users WHERE id = #{id}
</select>

多个参数:

如果传递多个参数,可以按顺序使用 #{param1}#{param2}, … 或者给参数命名。

<select id="selectUserByNameAndAge" resultType="User">SELECT * FROM users WHERE name = #{name} AND age = #{age}
</select>

2. 使用 @Param 注解(推荐使用

在接口方法中使用 @Param 注解可以给参数命名,这样在 SQL 映射文件中就可以使用这些名称。

User selectUserByNameAndAge(@Param("name") String name, @Param("age") int age);

对应的 XML:

<select id="selectUserByNameAndAge" resultType="User">SELECT * FROM users WHERE name = #{name} AND age = #{age}
</select>

3. 使用 Map 

可以将参数封装在一个 Map 或 POJO(Plain Old Java Object)中,然后在 SQL 语句中通过键名或属性名来访问这些参数。

Map<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("age", 30);

对应的 XML:

<select id="selectUserByMap" resultType="User">SELECT * FROM users WHERE name = #{name} AND age = #{age}
</select>

4. 使用 ${} 字符串替换

虽然不推荐使用,但 MyBatis 也支持使用 ${} 来进行字符串替换。这种方式容易导致 SQL 注入攻击,因此应该谨慎使用。

<select id="selectUserByName" resultType="User">SELECT * FROM users WHERE name = '${name}'
</select>

注:

  • 使用 #{} 时,MyBatis 会创建预处理语句(PreparedStatement),这有助于防止 SQL 注入。
  • 使用 ${} 时,MyBatis 会直接将参数值拼接到 SQL 语句中,这可能会导致 SQL 注入风险。

参数不同的封装方式

        MyBatis接口方法上可以接收各种各样的参数,MyBatis底层对于这些参数有不同的封装处理方式。我们以解读源码的形式对MyBatis提供的ParamNameResolver类进行参数封装解读。

单个参数:

1.POJO类型:(直接使用,属性名和参数占位符名称一致)
public class UserParam {private String name;private int age;
}

对应的 XML:

<select id="selectUserByPOJO" resultType="User">SELECT * FROM users WHERE name = #{name} AND age = #{age}
</select>
2.Map集合:(直接使用,属性名和参数占位符名称一致)
Map<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("age", 30);

对应的 XML:

<select id="selectUserByMap" resultType="User">SELECT * FROM users WHERE name = #{name} AND age = #{age}
</select>
3.Collection:

可以看出Collection会封装成Map集合,参数值会被封装成:

map.put("arg0", collection集合);
map.put("collection", collection集合);
4.List:也会被封装成map集合

如果是List,则会在Collection的基础上增加一个List键值。

map.put("arg0", List集合);
map.put("collection", List集合);
map.put("List", List集合);
5.Array:也会被封装成map集合

如果是Array数组,则会走另一个if语句。

map.put("arg0", 数组);
map.put("array",数组);
6.其他类型:直接使用

多个参数类型,

put出两个键值对,一个是arg0,另一个是param1。

map.put("arg0",参数值1)
map.put("param1",参数值1)
map.put("arg1",参数值2)
map.put("param2",参数值2)
User select(@Param("username") String username,String password);

 注意:封装为Map集合,可以使用@param注解,替换Map集合中默认的arg键名。

-----------------@Param("username")
map.put("username",参数值1)
map.put("param1",参数值1)
map.put("arg1",参数值2)
map.put("param2",参数值2)

为什么会有arg和param两个键值对呢?

兼容不同的参数命名规则

  1. arg0arg1, ...:这种命名方式通常用于通过位置(索引)传递参数。在一些情况下,用户可能更喜欢或更习惯于通过参数的顺序来引用它们,而不是通过具体的参数名。这种方式在MyBatis的早期版本中较为常见,尤其是在使用XML映射文件时
  2. param1param2, ...:这种命名方式则是基于参数的名称来传递参数。随着MyBatis的发展,基于名称的参数传递变得更加流行,因为它提供了更好的可读性和灵活性,尤其是在处理复杂对象或多个参数时。
http://www.hengruixuexiao.com/news/31301.html

相关文章:

  • 聚震网站开发百度扫一扫
  • dede网站地图文章变量数字营销软件
  • 如何制作网站视频的软件优化防控措施
  • 成品网站管理系统源码建网站seo
  • 网络舆情分析报告模板seo和sem的联系
  • 做c语言的题目的网站seo权重查询
  • 怎么创建企业网站免费友情链接
  • 北票网站建设宁波技术好的企业网站制作
  • 网站改版建设主要网站alexa排名
  • 网站建设大概价格seo外包杭州
  • 百度推广 手机网站中国seo网站
  • 哪些网站可以做装修鹤壁搜索引擎优化
  • 上海做网站的公seo顾问服务 乐云践新专家
  • 微信 html5 网站正规推广平台有哪些
  • 武汉便宜做网站seo网站优化培训厂家报价
  • 什么是网站流量昆明网站seo服务
  • word怎么做网站导航栏市场调研报告万能模板
  • 网站建设相关推荐百度站长链接提交
  • 微信h5怎么制作广州网站营销seo费用
  • 南京门户网站建设网站策划是干什么的
  • 全国免费的分类信息网苏州首页排名关键词优化
  • 建设银行成都官网招聘网站seo分析及优化建议
  • 这么用自己的电脑做网站服务器站长联盟
  • 什么app可以制作价目表seo搜索引擎优化哪家好
  • 谈谈网站开发流程北京网站优化方法
  • 镇江建设局网站seo工程师是做什么的
  • 中国建设银行网站-公司机构客户网站如何让百度收录
  • 手机网站的网址是什么原因网络营销的实现方式
  • 金融做市场广告挂哪些网站最新病毒感染什么症状
  • 专业做外贸网站网络营销方案总结