5、Mybatis高频面试题

1、Mybatis中#{}和${}的区别

在Mybatis中#{}${}都可以用于在sql语句中拼接参数,但是在使用方面有很多的区别

1、处理方式不同:${}表示的是字符串拼接,Mybatis在处理它时,会直接将${}替换成变量的值

​ 而#{}是预编译处理,Mybatis在处理它时,会将sql中的#{}替换为?号,然后底层使用JDBC的预编译对象来赋值

2、安全性不同:${}存在SQL注入问题,#{}可以有效的防止SQL注入

3、效率不同:${}处理的sql到数据库每次都要重新编译,而#{}处理的sql只需要编译一次

总之,在实际使用过程中尽量使用#{},而避免使用${},当然这也不是说${}就没有使用场景

比如:如果sql中需要动态传递表名或者字段名,那就只能使用${}了

2、当实体类中的属性名和表中的字段名不一样 ,怎么办

是这样的,当实体类中的属性名和表中的字段名一样的时候,Mybatis会自动完成查询结果的映射

但是如果不一样,Mybatis默认无法完成结果映射,此时我们可以使用下面这几种方案:

1、开启驼峰映射:这种方式可以处理掉字段和属性满足驼峰转换规则的那部分

2、字段起别名:可以在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致

3、手动映射:mybatis提供了resultMap标签,它可以通过来自定义映射关系来保证字段和属性的映射

3、MyBatis动态SQL了解吗

动态SQL是为了解决SQL语句灵活性不足的问题而提出的一种技术,它可以根据条件拼接SQL语句以不同的查询需求

MyBatis常用的动态SQL标签有:

  1. 条件判断标签:if、choose、when、otherwise 当条件成立时才执行其中的 SQL 语句
  2. 格式整理标签:trim、where、set 它可以在生成的SQL语句中调整格式,去除多余的关键字和符号
  3. 循环遍历标签:foreach 它用于遍历一个集合并将集合中的元素添加到 SQL 语句中

动态 SQL 的执行原理是,当 MyBatis 执行动态 SQL 语句时,会将 SQL 语句和参数传递给 SQL 解析器进行解析

SQL 解析器会根据 SQL 语句中的动态标签和参数的值,生成一个完整的 SQL 语句

然后,MyBatis将生成的SQL语句和参数传递给 JDBC 驱动程序进行执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值