面试题:Mybatis中的#{}和${}有什么区别?这是我见过最好的回答

面试题 **:**Mybatis中的#{}和${}有什么区别?

前言

今天来分享一道比较好的面试题,"Mybatis中的#{}和${}有什么区别?"。

对于这个问题,我们一起看看考察点和比较好的回答吧!题,看看普通人

考察点

mybatis是现在企业级开发中经常使用的数据持久层框架,这个问题就是面试官想考察我们对#{},${}有没有深刻的认识,以及日常开发中是否善于积累,认真思考。

回答

下面我从3个点来回答:

1.共同点:#,$都是去实现动态SQL的一种方式,通过这种方式我们可以把参数传递到xml中,在执行前mybatis会对占位符进行动态解析。

2.# 等同于jdbc里面的 ?占位符,相当于向PreparedStatement(了解PreparedStateMent https://jenkov.com/tutorials/jdbc/preparedstatement.html)中设置属性值,而我们的PreparedStatement是预编译的,它规定了SQL语句的一个结构,并且在设置参数的时候,如果有特殊的字符会自动进行转义,所以#占位符可以防止SQL注入。

sql 复制代码
String sql = "update people set firstname=? , lastname=? where id=?";

PreparedStatement preparedStatement =connection.prepareStatement(sql);

preparedStatement.setString(1, "Gary");
preparedStatement.setString(2, "Larson");
preparedStatement.setLong  (3, 123);

int rowsAffected = preparedStatement.executeUpdate();

3. 的方式相当于直接把参数拼接到SQL中,Mybatis不会对它进行任何特殊的处理。所以不能够防止SQL注入。但是占位符更多的是动态参数,#其实是用来做占位符的。$更适合动态传递表名,动态设置排序字段等。

以上就是我对于这个问题的理解。

总结

这个问题主要是考察求职者对mybatis中常见占位符的理解能力。在实际应用中,mybatis是最常用的功能,对于这部分内容如果理解不够深刻,很容易造成事务不生效的问题。*希望读完这篇文章你有所收获。*欢迎转发,关注微信公众号:程序员的故事,了解更多精彩面试题。

精选推荐

1.面试题:过滤器和拦截器的区别?

2.如何知道线程池中的线程任务执行完成?

3.面试题:为什么 SQL 语句不要过多的 join?

4.有没有排查过线上OOM问题,怎么处理的?

5.cpu飚高反应慢怎么排查?

6.@Resource和@Autowired的区别?

7.面试题:请说一下对象的创建过程?

相关推荐
正儿八经的少年1 天前
MyBatis 一对一、一对多 SQL
数据库·sql·mybatis
paopaokaka_luck2 天前
社区服务平台(加权协同过滤推荐、Jieba中文词频分析、WebSocket实时聊天、求助处理闭环、 活动积分闭环、ECharts多维分析)
java·前端·spring boot·mysql·echarts·mybatis
代码不停3 天前
MyBatis操作数据库
数据库·mybatis
wno7043 天前
Spring Boot中JdbcTemplate与Mybatis使用PostgreSQL
spring boot·postgresql·mybatis
lzhdim4 天前
100条常用SQL语句
数据库·sql·mysql·mybatis
景熙55234 天前
2.什么是业务后台系统
java·spring·tomcat·mybatis·jdbc
2601_962885725 天前
AkShare 和 Tushare 哪个好?区别、场景与选型
mybatis
_Evan_Yao6 天前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
paopaokaka_luck6 天前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
2301_32241428046 天前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis