Mybaits映射文件配置之参数获取#{}与${}的区别

博客主要介绍MyBatis映射文件配置中参数获取#{}与${}的区别。指出在MyBatis里二者都可获取参数,使用${}方式获取参数前需加注解,还展示了使用两种方式获取参数的打印输出截图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybaits映射文件配置之参数获取#{}与${}的区别

​ 在mybaits中#{}与${}都可以获取参数

参数获取方式使用方式区别使用建议
#{}不需要在参数前加 @Param参数注入方式推荐使用
${}使用map,key/v,需要在参数前加 @Param,才能获取到只拼接sql语句方式由sql注入风险,不推荐使用

测试对比一下

如果要使用$p{}方式获取,参数前一定要加注解 @Param

image.png

功能相同的sql

  	<!--
  		 #{} 和 ${} 的区别
  		 #{} 使用的是preparedStatement方式 预处理
  		 ${} 使用的是 Statement的方式  有sql注入的风险
  	 -->
  	<select id="queryById1" resultType="user">
  		select * from t_user where id=#{id}
  	</select>
  	
  	<select id="queryById2" resultType="user">
  		select * from t_user where id=${id}
  	</select>

测试一下

	@Test
	public void test1() throws IOException {
		InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = factory.openSession();
		// 获取代理类
		UserMapper dao = session.getMapper(UserMapper.class);
		User user = dao.queryById1(3);
		System.out.println(user);
		session.close();
	}
	@Test
	public void test2() throws IOException {
		InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = factory.openSession();
		// 获取代理类
		UserMapper dao = session.getMapper(UserMapper.class);
		User user = dao.queryById2(3);
		System.out.println(user);
		session.close();
	}

使用#{}方式获取参数,打印输出截图

image.png

使用${}方式获取参数,打印输出截图

image.png

项目打包 提取码:8idb 环境:eclipse,maven

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值