Mybatis面试

作者: Penva | 来源:发表于2021-07-10 18:34 被阅读0次

#{}和${}的区别

${}是变量占位符,用于xml的标签属性中和sql内部,用于字符串替换,也就是用户传入非法参数进来也会原样拼接到sql,所以sql内部会造成sql注入,非常不安全不建议使用于sql内部

#{}是参数占位符,用于sql内部,mybatis会将#{}变成?,在执行sql之前会使用预编译会话的参数设置方法按顺序给?占位符进行设置参数,避免了sql注入


Statement与preparedStatement区别

预编译会话的效率会比普通会话效率高,因为预编译会先将语句进行编译,且编译后的语句可以重复使用

预编译可以避免sql注入比较安全


什么是sql注入

用户输入非法参数,服务端在构造sql语句的时候也能构造成功,会让数据泄露等问题


一级缓存和二级缓存

一级缓存:当我们执行查询操作的时候,会将查询结果放到sqlsession中并且是用Map结构来保存的,当下一次执行查询操作的时候会先去sqlsession查询是否有,如果有的话就会直接拿来用,没有的话就去数据库查.当sqlsession消失是一级缓存一会随之消失,sqlsession调用增加修改删除close()commit()方法后就会清空缓存

二级缓存是在

相关文章

网友评论

    本文标题:Mybatis面试

    本文链接:https://www.haomeiwen.com/subject/amacpltx.html