Mapper.xml中的#{}和${}

Mapper.xml中的#{}与${}的区别与使用场景
本文介绍了在Mapper.xml中#{}和${}的使用区别。#{}会根据驼峰命名规则找get方法注入参数,预编译时处理,提高性能并防止SQL注入。${}则在预编译前被替换,可能引发SQL注入问题,适合于动态表名或分页参数等特殊场景。

#{}:

通过大括号里面的参数,根据驼峰命名规则寻找相应的get方法,将参数注入
编译前

select * from user where name = #{name};
  • 编译后
select * from user where name = ?;

${}:

  • 编译前
select * from user where name = ${name};
  • 编译后
select * from user where name = "Jack";

总结

用法
能使用 #{ } 的地方就用 #{ }
首先这是为了性能考虑的,相同的预编译 sql 可以重复利用。
而${ }在预编译之前已经被变量替换了,这会存在 sql 注入问题。
若其中的值中包含类似–这样的符号,则后面的sql会被当做注解,使用#{}可以避免这一类问题。

那几种情况使用${}

  • 变量为表名时,表名是字符串,使用 sql 占位符替换字符串时会带上单引号 ‘’,这会导致 sql 语法错误
  • LIMIT后的分页参数
`org.apache.ibatis.exceptions.PersistenceException: Error building SqlSession, 错误存在于com.mybatis.mapper.parameterMapper.xml, 原因是Could not find resource com.mybatis.mapper.parameterMapper.xml` 这个错误表明 MyBatis 在构建 `SqlSession` 时无法找到指定的 XML 资源文件。以下是一些可能的解决方法: #### 检查文件路径命名 确保 `parameterMapper.xml` 文件的路径命名正确,并且位于类路径下。通常,MyBatis 会从类路径中查找 XML 文件。例如,如果使用 Maven 项目,XML 文件应该放在 `src/main/resources` 目录下,并且目录结构要与包名对应,即 `com/mybatis/mapper/parameterMapper.xml`。 #### 检查 MyBatis 配置文件 在 MyBatis 的配置文件(通常是 `mybatis-config.xml`)中,检查是否正确配置了 XML 映射文件。可以使用 `<mapper resource="com/mybatis/mapper/parameterMapper.xml"/>` 来指定 XML 文件的路径: ```xml <mappers> <mapper resource="com/mybatis/mapper/parameterMapper.xml"/> </mappers> ``` #### 检查 IDE 配置 有时候,IDE 可能没有正确将资源文件复制到类路径下。可以尝试重新构建项目,或者检查 IDE 的构建配置,确保资源文件被正确打包。 #### 检查依赖版本 确保 MyBatis 相关的依赖都正确添加,并且版本兼容。可以在 `pom.xml`(如果是 Maven 项目)中检查依赖配置: ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值