Mybatis中的 ${} 和 #{}区别与用法

没有检索到摘要

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

Mybatis 的Mapper.xml语句中parameterType向SQL语句传参有两种方式:#{}和${}

我们经常使用的是#{},一般解说是因为这种方式可以防止SQL注入,简单的说#{}这种方式SQL语句是经过预编译的,它是把#{}中间的参数转义成字符串,举个例子:

select * from student where student_name = #{name} 

预编译后,会动态解析成一个参数标记符?

select * from student where student_name = ?

而使用${}在动态解析时候,会传入参数字符串

select * from student where student_name = 'lyrics'


总结:

#{} 这种取值是编译好SQL语句再取值
${} 这种是取值以后再去编译SQL语句

  • #{}方式能够很大程度防止sql注入。
  • $方式无法防止Sql注入。
  • $方式一般用于传入数据库对象,例如传入表名.
  • 一般能用#的就别用$.
举个activiti工作流的例子:
select * from  ${prefix} ACT_HI_PROCINST where PROC_INST_ID_ =  #{processInstanceId}


Mybatis中的 ${} 和 #{}区别与用法

### MyBatis 使用指南 #### 一、简介 MyBatis 是一款用于简化 JDBC 开发的优秀持久层框架,能够支持定制 SQL 语句、存储过程以及高级映射功能[^2]。作为数据访问层(DAO),它主要用于操作数据库。 #### 二、环境搭建 为了使用 MyBatis 进行项目开发,需先配置好运行环境。这通常涉及到引入必要的依赖库并编写相应的配置文件。对于 Maven 工程来说,在 `pom.xml` 中加入如下依赖即可快速集成 MyBatis: ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version><!-- 版本号根据实际需求填写 --> </dependency> <!-- 如果还需要连接 MySQL 数据库,则还需添加驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> ``` #### 三、核心组件介绍 1. **SQL 映射文件** - 可以通过 XML 文件定义 SQL 查询逻辑,也可以利用 Java 注解方式实现相同目的。 2. **Mapper 接口** - 定义了特定表结构相对应的方法签名,无需具体实现因为这些方法会被动态代理处理。 3. **SqlSessionFactoryBuilder SqlSession** - 前者负责创建后者实例;而 `SqlSession` 则提供了执行 CRUD 操作所需的各种 API 方法。 4. **Configuration 配置对象** - 存储着整个应用程序范围内共享的一些全局属性设定,比如缓存策略等。 #### 四、基本用法示例 下面给出一段简单的代码片段展示如何基于 MyBatis 实现对 User 表的基本增删改查(CRUD) 功能: 假设已经存在名为 user 的关系型表格,其字段有 id (主键), name, age. ##### 创建 Mapper Interface ```java public interface IUserDao { @Select("SELECT * FROM user WHERE id=#{id}") public User getUserById(int id); @Insert("INSERT INTO user(name,age) VALUES(#{name}, #{age})") void insertUser(User user); } ``` ##### 编写测试类调用上述接口中的方法 ```java @Test public void testCRUD() throws IOException{ String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try(SqlSession session=sqlSessionFactory.openSession()){ IUserDao userDao=session.getMapper(IUserDao.class); // 插入新纪录 User newUser=new User(); newUser.setName("张三"); newUser.setAge(20); userDao.insertUser(newUser); System.out.println("新增成功!"); // 获取指定ID的数据项 User found=userDao.getUserById(1); System.out.printf("查询到的结果:%s\n",found.toString()); } } ``` 以上即是对 MyBatis 使用的一个简要概述及其入门级别的实践案例说明[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值